X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib%2Fwin32_common.h;h=d3649ace53c074a7ebaecda4840be5f8d14cbbf1;hb=8b676e7d340fb8197824745eb387e1d3154e6f60;hp=019dd7df742b7d95bbb20c2794094f257c1f7050;hpb=51f8edf82794f07055e3d9bcc8cd51bf0d86fae0;p=wimlib diff --git a/include/wimlib/win32_common.h b/include/wimlib/win32_common.h index 019dd7df..d3649ace 100644 --- a/include/wimlib/win32_common.h +++ b/include/wimlib/win32_common.h @@ -1,58 +1,65 @@ +/* + * win32_common.h - common header for Windows-specific files. This always + * should be included first. + */ + #ifndef _WIMLIB_WIN32_COMMON_H #define _WIMLIB_WIN32_COMMON_H +#include #include +#include + #ifdef ERROR # undef ERROR #endif - #include "wimlib/types.h" #include "wimlib/win32.h" -#ifdef WITH_NTDLL -# include -# include -#endif - -extern void -set_errno_from_GetLastError(void); - -extern void -set_errno_from_win32_error(DWORD err); +/* ntdll functions */ -#ifdef WITH_NTDLL -extern void -set_errno_from_nt_status(NTSTATUS status); +extern NTSTATUS (WINAPI *func_NtCreateFile)(PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + PLARGE_INTEGER AllocationSize, + ULONG FileAttributes, + ULONG ShareAccess, + ULONG CreateDisposition, + ULONG CreateOptions, + PVOID EaBuffer, + ULONG EaLength); + +#ifndef FILE_OPENED +# define FILE_OPENED 0x00000001 #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, - bool *supports_SetFileShortName_ret); - -extern HANDLE -win32_open_existing_file(const wchar_t *path, DWORD dwDesiredAccess); - -/* Vista and later */ -extern HANDLE (WINAPI *win32func_FindFirstStreamW)(LPCWSTR lpFileName, - STREAM_INFO_LEVELS InfoLevel, - LPVOID lpFindStreamData, - DWORD dwFlags); - -/* Vista and later */ -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_NtOpenFile) (PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG ShareAccess, + ULONG OpenOptions); + +extern NTSTATUS (WINAPI *func_NtReadFile) (HANDLE FileHandle, + HANDLE Event, + PIO_APC_ROUTINE ApcRoutine, + PVOID ApcContext, + PIO_STATUS_BLOCK IoStatusBlock, + PVOID Buffer, + ULONG Length, + PLARGE_INTEGER ByteOffset, + PULONG Key); + +extern NTSTATUS (WINAPI *func_NtWriteFile) (HANDLE FileHandle, + HANDLE Event, + PIO_APC_ROUTINE ApcRoutine, + PVOID ApcContext, + PIO_STATUS_BLOCK IoStatusBlock, + PVOID Buffer, + ULONG Length, + PLARGE_INTEGER ByteOffset, + PULONG Key); extern NTSTATUS (WINAPI *func_NtQueryInformationFile)(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, @@ -78,28 +85,93 @@ extern NTSTATUS (WINAPI *func_NtQueryDirectoryFile) (HANDLE FileHandle, PUNICODE_STRING FileName, BOOLEAN RestartScan); +extern NTSTATUS (WINAPI *func_NtQueryVolumeInformationFile) (HANDLE FileHandle, + PIO_STATUS_BLOCK IoStatusBlock, + PVOID FsInformation, + ULONG Length, + FS_INFORMATION_CLASS FsInformationClass); + +extern NTSTATUS (WINAPI *func_NtSetInformationFile)(HANDLE FileHandle, + PIO_STATUS_BLOCK IoStatusBlock, + PVOID FileInformation, + ULONG Length, + FILE_INFORMATION_CLASS FileInformationClass); extern NTSTATUS (WINAPI *func_NtSetSecurityObject)(HANDLE Handle, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR SecurityDescriptor); +extern NTSTATUS (WINAPI *func_NtFsControlFile) (HANDLE FileHandle, + HANDLE Event, + PIO_APC_ROUTINE ApcRoutine, + PVOID ApcContext, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG FsControlCode, + PVOID InputBuffer, + ULONG InputBufferLength, + PVOID OutputBuffer, + ULONG OutputBufferLength); + +extern NTSTATUS (WINAPI *func_NtClose) (HANDLE Handle); + extern DWORD (WINAPI *func_RtlNtStatusToDosError)(NTSTATUS status); -#endif +typedef struct _RTLP_CURDIR_REF { + LONG RefCount; + HANDLE Handle; +} RTLP_CURDIR_REF, *PRTLP_CURDIR_REF; +typedef struct _RTL_RELATIVE_NAME_U { + UNICODE_STRING RelativeName; + HANDLE ContainingDirectory; + PRTLP_CURDIR_REF CurDirRef; +} RTL_RELATIVE_NAME_U, *PRTL_RELATIVE_NAME_U; -extern bool -windows_version_is_at_least(unsigned major, unsigned minor); +extern BOOLEAN (WINAPI *func_RtlDosPathNameToNtPathName_U) + (IN PCWSTR DosName, + OUT PUNICODE_STRING NtName, + OUT PCWSTR *PartName, + OUT PRTL_RELATIVE_NAME_U RelativeName); -#define running_on_windows_xp_or_later() \ - windows_version_is_at_least(5, 1) +extern NTSTATUS (WINAPI *func_RtlDosPathNameToNtPathName_U_WithStatus) + (IN PCWSTR DosName, + OUT PUNICODE_STRING NtName, + OUT PCWSTR *PartName, + OUT PRTL_RELATIVE_NAME_U RelativeName); -#define running_on_windows_vista_or_later() \ - windows_version_is_at_least(6, 0) +extern NTSTATUS (WINAPI *func_RtlCreateSystemVolumeInformationFolder) + (PCUNICODE_STRING VolumeRootPath); -#define running_on_windows_7_or_later() \ - windows_version_is_at_least(6, 1) +#define FSCTL_SET_PERSISTENT_VOLUME_STATE 0x90238 +#define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED 0x00000001 + +typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION { + ULONG VolumeFlags; + ULONG FlagMask; + ULONG Version; + ULONG Reserved; +} FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION; + +extern int +win32_path_to_nt_path(const wchar_t *win32_path, UNICODE_STRING *nt_path); + +extern int +win32_get_drive_path(const wchar_t *file_path, wchar_t drive_path[7]); +extern bool +win32_try_to_attach_wof(const wchar_t *drive); + +extern void +win32_warning(DWORD err, const wchar_t *format, ...) _cold_attribute; + +extern void +win32_error(DWORD err, const wchar_t *format, ...) _cold_attribute; + +extern void +winnt_warning(NTSTATUS status, const wchar_t *format, ...) _cold_attribute; + +extern void +winnt_error(NTSTATUS status, const wchar_t *format, ...) _cold_attribute; #endif /* _WIMLIB_WIN32_COMMON_H */