1 #ifndef _WIMLIB_WIN32_COMMON_H
2 #define _WIMLIB_WIN32_COMMON_H
11 #include "wimlib/types.h"
12 #include "wimlib/win32.h"
16 extern NTSTATUS (WINAPI *func_NtCreateFile)(PHANDLE FileHandle,
17 ACCESS_MASK DesiredAccess,
18 POBJECT_ATTRIBUTES ObjectAttributes,
19 PIO_STATUS_BLOCK IoStatusBlock,
20 PLARGE_INTEGER AllocationSize,
23 ULONG CreateDisposition,
29 # define FILE_OPENED 0x00000001
32 extern NTSTATUS (WINAPI *func_NtOpenFile) (PHANDLE FileHandle,
33 ACCESS_MASK DesiredAccess,
34 POBJECT_ATTRIBUTES ObjectAttributes,
35 PIO_STATUS_BLOCK IoStatusBlock,
39 extern NTSTATUS (WINAPI *func_NtReadFile) (HANDLE FileHandle,
41 PIO_APC_ROUTINE ApcRoutine,
43 PIO_STATUS_BLOCK IoStatusBlock,
46 PLARGE_INTEGER ByteOffset,
49 extern NTSTATUS (WINAPI *func_NtWriteFile) (HANDLE FileHandle,
51 PIO_APC_ROUTINE ApcRoutine,
53 PIO_STATUS_BLOCK IoStatusBlock,
56 PLARGE_INTEGER ByteOffset,
59 extern NTSTATUS (WINAPI *func_NtQueryInformationFile)(HANDLE FileHandle,
60 PIO_STATUS_BLOCK IoStatusBlock,
61 PVOID FileInformation,
63 FILE_INFORMATION_CLASS FileInformationClass);
65 extern NTSTATUS (WINAPI *func_NtQuerySecurityObject)(HANDLE handle,
66 SECURITY_INFORMATION SecurityInformation,
67 PSECURITY_DESCRIPTOR SecurityDescriptor,
71 extern NTSTATUS (WINAPI *func_NtQueryDirectoryFile) (HANDLE FileHandle,
73 PIO_APC_ROUTINE ApcRoutine,
75 PIO_STATUS_BLOCK IoStatusBlock,
76 PVOID FileInformation,
78 FILE_INFORMATION_CLASS FileInformationClass,
79 BOOLEAN ReturnSingleEntry,
80 PUNICODE_STRING FileName,
83 extern NTSTATUS (WINAPI *func_NtQueryVolumeInformationFile) (HANDLE FileHandle,
84 PIO_STATUS_BLOCK IoStatusBlock,
87 FS_INFORMATION_CLASS FsInformationClass);
89 extern NTSTATUS (WINAPI *func_NtSetInformationFile)(HANDLE FileHandle,
90 PIO_STATUS_BLOCK IoStatusBlock,
91 PVOID FileInformation,
93 FILE_INFORMATION_CLASS FileInformationClass);
95 extern NTSTATUS (WINAPI *func_NtSetSecurityObject)(HANDLE Handle,
96 SECURITY_INFORMATION SecurityInformation,
97 PSECURITY_DESCRIPTOR SecurityDescriptor);
99 extern NTSTATUS (WINAPI *func_NtFsControlFile) (HANDLE FileHandle,
101 PIO_APC_ROUTINE ApcRoutine,
103 PIO_STATUS_BLOCK IoStatusBlock,
106 ULONG InputBufferLength,
108 ULONG OutputBufferLength);
110 extern NTSTATUS (WINAPI *func_NtClose) (HANDLE Handle);
112 extern DWORD (WINAPI *func_RtlNtStatusToDosError)(NTSTATUS status);
114 typedef struct _RTLP_CURDIR_REF {
117 } RTLP_CURDIR_REF, *PRTLP_CURDIR_REF;
119 typedef struct _RTL_RELATIVE_NAME_U {
120 UNICODE_STRING RelativeName;
121 HANDLE ContainingDirectory;
122 PRTLP_CURDIR_REF CurDirRef;
123 } RTL_RELATIVE_NAME_U, *PRTL_RELATIVE_NAME_U;
125 extern BOOLEAN (WINAPI *func_RtlDosPathNameToNtPathName_U)
127 OUT PUNICODE_STRING NtName,
128 OUT PCWSTR *PartName,
129 OUT PRTL_RELATIVE_NAME_U RelativeName);
131 extern NTSTATUS (WINAPI *func_RtlDosPathNameToNtPathName_U_WithStatus)
133 OUT PUNICODE_STRING NtName,
134 OUT PCWSTR *PartName,
135 OUT PRTL_RELATIVE_NAME_U RelativeName);
137 extern NTSTATUS (WINAPI *func_RtlCreateSystemVolumeInformationFolder)
138 (PCUNICODE_STRING VolumeRootPath);
140 #define FSCTL_SET_PERSISTENT_VOLUME_STATE 0x90238
142 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED 0x00000001
144 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
149 } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
152 win32_path_to_nt_path(const wchar_t *win32_path, UNICODE_STRING *nt_path);
155 win32_get_drive_path(const wchar_t *file_path, wchar_t drive_path[7]);
158 win32_try_to_attach_wof(const wchar_t *drive);
161 win32_warning(DWORD err, const wchar_t *format, ...) _cold_attribute;
164 win32_error(DWORD err, const wchar_t *format, ...) _cold_attribute;
167 winnt_warning(NTSTATUS status, const wchar_t *format, ...) _cold_attribute;
170 winnt_error(NTSTATUS status, const wchar_t *format, ...) _cold_attribute;
172 #endif /* _WIMLIB_WIN32_COMMON_H */