X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=include%2Fwimlib%2Fwin32_common.h;h=fa10469bc777c0cd0cef4aedf49c3204878b932f;hp=ebd0564d7ccf15c7b3d80f11c46638cf839931f6;hb=ad8c3f70361e25b7c1bbc46d4429749c7215fa12;hpb=e8c3ca2d1d0cac3d64985b45a9f654d2029a7518 diff --git a/include/wimlib/win32_common.h b/include/wimlib/win32_common.h index ebd0564d..fa10469b 100644 --- a/include/wimlib/win32_common.h +++ b/include/wimlib/win32_common.h @@ -9,32 +9,33 @@ #include "wimlib/types.h" #include "wimlib/win32.h" - -#ifdef ENABLE_ERROR_MESSAGES -extern void -win32_error(DWORD err_code); -#else -static inline void -win32_error(DWORD err_code) -{ -} +#ifdef WITH_NTDLL +# include +# include #endif extern void set_errno_from_GetLastError(void); -extern int -win32_error_to_errno(DWORD err_code); +extern void +set_errno_from_win32_error(DWORD err); + +#ifdef WITH_NTDLL +extern void +set_errno_from_nt_status(NTSTATUS status); +#endif + +extern bool +win32_path_is_root_of_drive(const wchar_t *path); extern int -win32_get_vol_flags(const wchar_t *path, unsigned *vol_flags_ret); +win32_get_vol_flags(const wchar_t *path, unsigned *vol_flags_ret, + bool *supports_SetFileShortName_ret); extern HANDLE win32_open_existing_file(const wchar_t *path, DWORD dwDesiredAccess); -extern HANDLE -win32_open_file_data_only(const wchar_t *path); - +/* Vista and later */ extern HANDLE (WINAPI *win32func_FindFirstStreamW)(LPCWSTR lpFileName, STREAM_INFO_LEVELS InfoLevel, LPVOID lpFindStreamData, @@ -44,6 +45,52 @@ extern HANDLE (WINAPI *win32func_FindFirstStreamW)(LPCWSTR lpFileName, extern BOOL (WINAPI *win32func_FindNextStreamW)(HANDLE hFindStream, LPVOID lpFindStreamData); +/* Vista and later */ +extern BOOL (WINAPI *win32func_CreateSymbolicLinkW)(const wchar_t *lpSymlinkFileName, + const wchar_t *lpTargetFileName, + DWORD dwFlags); + +/* ntdll functions */ + +#ifdef WITH_NTDLL + +extern NTSTATUS (WINAPI *func_NtQueryInformationFile)(HANDLE FileHandle, + PIO_STATUS_BLOCK IoStatusBlock, + PVOID FileInformation, + ULONG Length, + FILE_INFORMATION_CLASS FileInformationClass); + +extern NTSTATUS (WINAPI *func_NtQuerySecurityObject)(HANDLE handle, + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR SecurityDescriptor, + ULONG Length, + PULONG LengthNeeded); + +extern NTSTATUS (WINAPI *func_NtQueryDirectoryFile) (HANDLE FileHandle, + HANDLE Event, + PIO_APC_ROUTINE ApcRoutine, + PVOID ApcContext, + PIO_STATUS_BLOCK IoStatusBlock, + PVOID FileInformation, + ULONG Length, + FILE_INFORMATION_CLASS FileInformationClass, + BOOLEAN ReturnSingleEntry, + PUNICODE_STRING FileName, + BOOLEAN RestartScan); + + +extern NTSTATUS (WINAPI *func_NtSetSecurityObject)(HANDLE Handle, + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR SecurityDescriptor); + +extern DWORD (WINAPI *func_RtlNtStatusToDosError)(NTSTATUS status); + +extern NTSTATUS (WINAPI *func_RtlCreateSystemVolumeInformationFolder) + (PCUNICODE_STRING VolumeRootPath); +#endif + + + extern bool windows_version_is_at_least(unsigned major, unsigned minor);