]> wimlib.net Git - wimlib/blob - include/wimlib/win32_common.h
mount_image.c: add fallback definitions of RENAME_* constants
[wimlib] / include / wimlib / win32_common.h
1 /*
2  * win32_common.h - common header for Windows-specific files.  This always
3  * should be included first.
4  */
5
6 #ifndef _WIMLIB_WIN32_COMMON_H
7 #define _WIMLIB_WIN32_COMMON_H
8
9 #include <ntstatus.h>
10 #include <windows.h>
11 #include <winternl.h>
12
13 #ifdef ERROR
14 #  undef ERROR
15 #endif
16 #include "wimlib/win32.h"
17
18 /* ntdll definitions */
19
20 #define FILE_OPENED 0x00000001
21
22 typedef struct _RTLP_CURDIR_REF {
23         LONG RefCount;
24         HANDLE Handle;
25 } RTLP_CURDIR_REF, *PRTLP_CURDIR_REF;
26
27 typedef struct _RTL_RELATIVE_NAME_U {
28         UNICODE_STRING RelativeName;
29         HANDLE ContainingDirectory;
30         PRTLP_CURDIR_REF CurDirRef;
31 } RTL_RELATIVE_NAME_U, *PRTL_RELATIVE_NAME_U;
32
33 #ifndef FSCTL_SET_PERSISTENT_VOLUME_STATE
34 #define FSCTL_SET_PERSISTENT_VOLUME_STATE \
35         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
36
37 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED 0x00000001
38
39 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
40         ULONG VolumeFlags;
41         ULONG FlagMask;
42         ULONG Version;
43         ULONG Reserved;
44 } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
45 #endif /* FSCTL_SET_PERSISTENT_VOLUME_STATE */
46
47 /* ntdll functions  */
48
49 NTSTATUS
50 NTAPI
51 NtReadFile(IN HANDLE FileHandle,
52            IN HANDLE Event OPTIONAL,
53            IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
54            IN PVOID ApcContext OPTIONAL,
55            OUT PIO_STATUS_BLOCK IoStatusBlock,
56            OUT PVOID Buffer,
57            IN ULONG Length,
58            IN PLARGE_INTEGER ByteOffset OPTIONAL,
59            IN PULONG Key OPTIONAL);
60
61 NTSTATUS
62 NTAPI
63 NtWriteFile(IN HANDLE FileHandle,
64             IN HANDLE Event OPTIONAL,
65             IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
66             IN PVOID ApcContext OPTIONAL,
67             OUT PIO_STATUS_BLOCK IoStatusBlock,
68             IN PVOID Buffer,
69             IN ULONG Length,
70             IN PLARGE_INTEGER ByteOffset OPTIONAL,
71             IN PULONG Key OPTIONAL);
72
73 NTSTATUS
74 NTAPI
75 NtQueryDirectoryFile(IN HANDLE FileHandle,
76                      IN HANDLE EventHandle OPTIONAL,
77                      IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
78                      IN PVOID ApcContext OPTIONAL,
79                      OUT PIO_STATUS_BLOCK IoStatusBlock,
80                      OUT PVOID FileInformation,
81                      IN ULONG Length,
82                      IN FILE_INFORMATION_CLASS FileInformationClass,
83                      IN BOOLEAN ReturnSingleEntry,
84                      IN PUNICODE_STRING FileName OPTIONAL,
85                      IN BOOLEAN RestartScan);
86
87 NTSTATUS
88 NTAPI
89 NtQuerySecurityObject(IN HANDLE Handle,
90                       IN SECURITY_INFORMATION SecurityInformation,
91                       OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
92                       IN ULONG Length,
93                       OUT PULONG ResultLength);
94
95 NTSTATUS
96 NTAPI
97 NtSetSecurityObject(IN HANDLE Handle,
98                     IN SECURITY_INFORMATION SecurityInformation,
99                     IN PSECURITY_DESCRIPTOR SecurityDescriptor);
100
101 NTSTATUS
102 NTAPI
103 NtOpenSymbolicLinkObject(PHANDLE LinkHandle,
104                          ACCESS_MASK DesiredAccess,
105                          POBJECT_ATTRIBUTES ObjectAttributes);
106
107 NTSTATUS
108 NTAPI
109 NtQueryEaFile(IN HANDLE FileHandle,
110               OUT PIO_STATUS_BLOCK IoStatusBlock,
111               OUT PVOID Buffer,
112               IN ULONG Length,
113               IN BOOLEAN ReturnSingleEntry,
114               IN PVOID EaList OPTIONAL,
115               IN ULONG EaListLength,
116               IN PULONG EaIndex OPTIONAL,
117               IN BOOLEAN RestartScan);
118
119 NTSTATUS
120 NTAPI
121 NtSetEaFile(IN HANDLE FileHandle,
122             OUT PIO_STATUS_BLOCK IoStatusBlock,
123             OUT PVOID Buffer,
124             IN ULONG Length);
125
126 /* Dynamically loaded ntdll functions */
127
128 extern NTSTATUS (WINAPI *func_RtlDosPathNameToNtPathName_U_WithStatus)
129                 (IN PCWSTR DosName,
130                  OUT PUNICODE_STRING NtName,
131                  OUT PCWSTR *PartName,
132                  OUT PRTL_RELATIVE_NAME_U RelativeName);
133
134 extern NTSTATUS (WINAPI *func_RtlCreateSystemVolumeInformationFolder)
135                         (PCUNICODE_STRING VolumeRootPath);
136
137 /* Other utility functions */
138
139 extern int
140 win32_path_to_nt_path(const wchar_t *win32_path, UNICODE_STRING *nt_path);
141
142 extern int
143 win32_get_drive_path(const wchar_t *file_path, wchar_t drive_path[7]);
144
145 extern bool
146 win32_try_to_attach_wof(const wchar_t *drive);
147
148 extern void
149 win32_warning(DWORD err, const wchar_t *format, ...) _cold_attribute;
150
151 extern void
152 win32_error(DWORD err, const wchar_t *format, ...) _cold_attribute;
153
154 extern void
155 winnt_warning(NTSTATUS status, const wchar_t *format, ...) _cold_attribute;
156
157 extern void
158 winnt_error(NTSTATUS status, const wchar_t *format, ...) _cold_attribute;
159
160 extern NTSTATUS
161 winnt_fsctl(HANDLE h, u32 code, const void *in, u32 in_size,
162             void *out, u32 out_size_avail, u32 *actual_out_size_ret);
163
164 #endif /* _WIMLIB_WIN32_COMMON_H */