2 * win32_common.h - common header for Windows-specific files. This always
3 * should be included first.
6 #ifndef _WIMLIB_WIN32_COMMON_H
7 #define _WIMLIB_WIN32_COMMON_H
16 #include "wimlib/types.h"
17 #include "wimlib/win32.h"
21 extern NTSTATUS (WINAPI *func_NtCreateFile)(PHANDLE FileHandle,
22 ACCESS_MASK DesiredAccess,
23 POBJECT_ATTRIBUTES ObjectAttributes,
24 PIO_STATUS_BLOCK IoStatusBlock,
25 PLARGE_INTEGER AllocationSize,
28 ULONG CreateDisposition,
34 # define FILE_OPENED 0x00000001
37 extern NTSTATUS (WINAPI *func_NtOpenFile) (PHANDLE FileHandle,
38 ACCESS_MASK DesiredAccess,
39 POBJECT_ATTRIBUTES ObjectAttributes,
40 PIO_STATUS_BLOCK IoStatusBlock,
44 extern NTSTATUS (WINAPI *func_NtReadFile) (HANDLE FileHandle,
46 PIO_APC_ROUTINE ApcRoutine,
48 PIO_STATUS_BLOCK IoStatusBlock,
51 PLARGE_INTEGER ByteOffset,
54 extern NTSTATUS (WINAPI *func_NtWriteFile) (HANDLE FileHandle,
56 PIO_APC_ROUTINE ApcRoutine,
58 PIO_STATUS_BLOCK IoStatusBlock,
61 PLARGE_INTEGER ByteOffset,
64 extern NTSTATUS (WINAPI *func_NtQueryInformationFile)(HANDLE FileHandle,
65 PIO_STATUS_BLOCK IoStatusBlock,
66 PVOID FileInformation,
68 FILE_INFORMATION_CLASS FileInformationClass);
70 extern NTSTATUS (WINAPI *func_NtQuerySecurityObject)(HANDLE handle,
71 SECURITY_INFORMATION SecurityInformation,
72 PSECURITY_DESCRIPTOR SecurityDescriptor,
76 extern NTSTATUS (WINAPI *func_NtQueryDirectoryFile) (HANDLE FileHandle,
78 PIO_APC_ROUTINE ApcRoutine,
80 PIO_STATUS_BLOCK IoStatusBlock,
81 PVOID FileInformation,
83 FILE_INFORMATION_CLASS FileInformationClass,
84 BOOLEAN ReturnSingleEntry,
85 PUNICODE_STRING FileName,
88 extern NTSTATUS (WINAPI *func_NtQueryVolumeInformationFile) (HANDLE FileHandle,
89 PIO_STATUS_BLOCK IoStatusBlock,
92 FS_INFORMATION_CLASS FsInformationClass);
94 extern NTSTATUS (WINAPI *func_NtSetInformationFile)(HANDLE FileHandle,
95 PIO_STATUS_BLOCK IoStatusBlock,
96 PVOID FileInformation,
98 FILE_INFORMATION_CLASS FileInformationClass);
100 extern NTSTATUS (WINAPI *func_NtSetSecurityObject)(HANDLE Handle,
101 SECURITY_INFORMATION SecurityInformation,
102 PSECURITY_DESCRIPTOR SecurityDescriptor);
104 extern NTSTATUS (WINAPI *func_NtClose) (HANDLE Handle);
106 extern DWORD (WINAPI *func_RtlNtStatusToDosError)(NTSTATUS status);
108 typedef struct _RTLP_CURDIR_REF {
111 } RTLP_CURDIR_REF, *PRTLP_CURDIR_REF;
113 typedef struct _RTL_RELATIVE_NAME_U {
114 UNICODE_STRING RelativeName;
115 HANDLE ContainingDirectory;
116 PRTLP_CURDIR_REF CurDirRef;
117 } RTL_RELATIVE_NAME_U, *PRTL_RELATIVE_NAME_U;
119 extern BOOLEAN (WINAPI *func_RtlDosPathNameToNtPathName_U)
121 OUT PUNICODE_STRING NtName,
122 OUT PCWSTR *PartName,
123 OUT PRTL_RELATIVE_NAME_U RelativeName);
125 extern NTSTATUS (WINAPI *func_RtlDosPathNameToNtPathName_U_WithStatus)
127 OUT PUNICODE_STRING NtName,
128 OUT PCWSTR *PartName,
129 OUT PRTL_RELATIVE_NAME_U RelativeName);
131 extern NTSTATUS (WINAPI *func_RtlCreateSystemVolumeInformationFolder)
132 (PCUNICODE_STRING VolumeRootPath);
134 #define FSCTL_SET_PERSISTENT_VOLUME_STATE 0x90238
136 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED 0x00000001
138 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
143 } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
146 win32_path_to_nt_path(const wchar_t *win32_path, UNICODE_STRING *nt_path);
149 win32_get_drive_path(const wchar_t *file_path, wchar_t drive_path[7]);
152 win32_try_to_attach_wof(const wchar_t *drive);
155 win32_warning(DWORD err, const wchar_t *format, ...) _cold_attribute;
158 win32_error(DWORD err, const wchar_t *format, ...) _cold_attribute;
161 winnt_warning(NTSTATUS status, const wchar_t *format, ...) _cold_attribute;
164 winnt_error(NTSTATUS status, const wchar_t *format, ...) _cold_attribute;
167 winnt_fsctl(HANDLE h, u32 code, const void *in, u32 in_size,
168 void *out, u32 out_size_avail, u32 *actual_out_size_ret);
170 #endif /* _WIMLIB_WIN32_COMMON_H */