]> wimlib.net Git - wimlib/blob - include/wimlib/win32_common.h
win32_capture.c: Load volume information on first chance
[wimlib] / include / wimlib / win32_common.h
1 #ifndef _WIMLIB_WIN32_COMMON_H
2 #define _WIMLIB_WIN32_COMMON_H
3
4 #include <windows.h>
5 #ifdef ERROR
6 #  undef ERROR
7 #endif
8
9 #include "wimlib/types.h"
10 #include "wimlib/win32.h"
11
12 #include <ntstatus.h>
13 #include <winternl.h>
14
15 extern void
16 set_errno_from_GetLastError(void);
17
18 extern void
19 set_errno_from_win32_error(DWORD err);
20
21 extern void
22 set_errno_from_nt_status(NTSTATUS status);
23
24 extern bool
25 win32_path_is_root_of_drive(const wchar_t *path);
26
27 extern int
28 win32_get_vol_flags(const wchar_t *path, unsigned *vol_flags_ret,
29                     bool *supports_SetFileShortName_ret);
30
31 extern HANDLE
32 win32_open_existing_file(const wchar_t *path, DWORD dwDesiredAccess);
33
34 /* Vista and later */
35 extern BOOL (WINAPI *func_CreateSymbolicLinkW)(const wchar_t *lpSymlinkFileName,
36                                                const wchar_t *lpTargetFileName,
37                                                DWORD dwFlags);
38
39 /* ntdll functions  */
40
41 extern NTSTATUS (WINAPI *func_NtOpenFile) (PHANDLE FileHandle,
42                                            ACCESS_MASK DesiredAccess,
43                                            POBJECT_ATTRIBUTES ObjectAttributes,
44                                            PIO_STATUS_BLOCK IoStatusBlock,
45                                            ULONG ShareAccess,
46                                            ULONG OpenOptions);
47
48 extern NTSTATUS (WINAPI *func_NtReadFile) (HANDLE FileHandle,
49                                            HANDLE Event,
50                                            PIO_APC_ROUTINE ApcRoutine,
51                                            PVOID ApcContext,
52                                            PIO_STATUS_BLOCK IoStatusBlock,
53                                            PVOID Buffer,
54                                            ULONG Length,
55                                            PLARGE_INTEGER ByteOffset,
56                                            PULONG Key);
57
58 extern NTSTATUS (WINAPI *func_NtQueryInformationFile)(HANDLE FileHandle,
59                                                       PIO_STATUS_BLOCK IoStatusBlock,
60                                                       PVOID FileInformation,
61                                                       ULONG Length,
62                                                       FILE_INFORMATION_CLASS FileInformationClass);
63
64 extern NTSTATUS (WINAPI *func_NtQuerySecurityObject)(HANDLE handle,
65                                                      SECURITY_INFORMATION SecurityInformation,
66                                                      PSECURITY_DESCRIPTOR SecurityDescriptor,
67                                                      ULONG Length,
68                                                      PULONG LengthNeeded);
69
70 extern NTSTATUS (WINAPI *func_NtQueryDirectoryFile) (HANDLE FileHandle,
71                                                      HANDLE Event,
72                                                      PIO_APC_ROUTINE ApcRoutine,
73                                                      PVOID ApcContext,
74                                                      PIO_STATUS_BLOCK IoStatusBlock,
75                                                      PVOID FileInformation,
76                                                      ULONG Length,
77                                                      FILE_INFORMATION_CLASS FileInformationClass,
78                                                      BOOLEAN ReturnSingleEntry,
79                                                      PUNICODE_STRING FileName,
80                                                      BOOLEAN RestartScan);
81
82 extern NTSTATUS (WINAPI *func_NtQueryVolumeInformationFile) (HANDLE FileHandle,
83                                                              PIO_STATUS_BLOCK IoStatusBlock,
84                                                              PVOID FsInformation,
85                                                              ULONG Length,
86                                                              FS_INFORMATION_CLASS FsInformationClass);
87
88
89 extern NTSTATUS (WINAPI *func_NtSetSecurityObject)(HANDLE Handle,
90                                                    SECURITY_INFORMATION SecurityInformation,
91                                                    PSECURITY_DESCRIPTOR SecurityDescriptor);
92
93 extern NTSTATUS (WINAPI *func_NtClose) (HANDLE Handle);
94
95 extern DWORD (WINAPI *func_RtlNtStatusToDosError)(NTSTATUS status);
96
97 extern NTSTATUS (WINAPI *func_RtlCreateSystemVolumeInformationFolder)
98                         (PCUNICODE_STRING VolumeRootPath);
99
100
101 extern bool
102 windows_version_is_at_least(unsigned major, unsigned minor);
103
104 #define running_on_windows_xp_or_later() \
105                         windows_version_is_at_least(5, 1)
106
107 #define running_on_windows_vista_or_later() \
108                         windows_version_is_at_least(6, 0)
109
110 #define running_on_windows_7_or_later() \
111                         windows_version_is_at_least(6, 1)
112
113
114
115 #endif /* _WIMLIB_WIN32_COMMON_H */