[SDK][ACGENRAL] Add the shim IgnoreFreeLibrary
[reactos.git] / dll / shellext / shellbtrfs / shellext.h
1 /* Copyright (c) Mark Harmstone 2016-17
2 *
3 * This file is part of WinBtrfs.
4 *
5 * WinBtrfs is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public Licence as published by
7 * the Free Software Foundation, either version 3 of the Licence, or
8 * (at your option) any later version.
9 *
10 * WinBtrfs is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Lesser General Public Licence for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public Licence
16 * along with WinBtrfs. If not, see <http://www.gnu.org/licenses/>. */
17
18 #pragma once
19
20 #define ISOLATION_AWARE_ENABLED 1
21 #define STRSAFE_NO_DEPRECATE
22
23 #ifndef __REACTOS__
24 #define WINVER 0x0A00 // Windows 10
25 #define _WIN32_WINNT 0x0A00
26 #endif
27
28 #ifndef __REACTOS__
29 #include <windows.h>
30 #include <winternl.h>
31 #else
32 #define WIN32_NO_STATUS
33 #include <windef.h>
34 #include <winbase.h>
35 #include <strsafe.h>
36 #include <ndk/iofuncs.h>
37 #endif
38 #include <string>
39 #ifndef __REACTOS__
40 #include "../btrfs.h"
41 #include "../btrfsioctl.h"
42 #else
43 #include "btrfs.h"
44 #include "btrfsioctl.h"
45 #endif
46
47 #ifndef __REACTOS__
48 #define STATUS_SUCCESS (NTSTATUS)0x00000000
49 #define STATUS_BUFFER_OVERFLOW (NTSTATUS)0x80000005
50 #define STATUS_END_OF_FILE (NTSTATUS)0xc0000011
51 #define STATUS_MORE_PROCESSING_REQUIRED (NTSTATUS)0xc0000016
52 #define STATUS_BUFFER_TOO_SMALL (NTSTATUS)0xc0000023
53 #define STATUS_DEVICE_NOT_READY (NTSTATUS)0xc00000a3
54 #define STATUS_CANNOT_DELETE (NTSTATUS)0xc0000121
55 #define STATUS_NOT_FOUND (NTSTATUS)0xc0000225
56 #endif
57
58 #define BLOCK_FLAG_DATA 0x001
59 #define BLOCK_FLAG_SYSTEM 0x002
60 #define BLOCK_FLAG_METADATA 0x004
61 #define BLOCK_FLAG_RAID0 0x008
62 #define BLOCK_FLAG_RAID1 0x010
63 #define BLOCK_FLAG_DUPLICATE 0x020
64 #define BLOCK_FLAG_RAID10 0x040
65 #define BLOCK_FLAG_RAID5 0x080
66 #define BLOCK_FLAG_RAID6 0x100
67
68 #define BTRFS_TYPE_FILE 1
69 #define BTRFS_TYPE_DIRECTORY 2
70 #define BTRFS_TYPE_CHARDEV 3
71 #define BTRFS_TYPE_BLOCKDEV 4
72 #define BTRFS_TYPE_FIFO 5
73 #define BTRFS_TYPE_SOCKET 6
74 #define BTRFS_TYPE_SYMLINK 7
75
76 #ifdef _MSC_VER
77 #define funcname __FUNCTION__
78 #else
79 #define funcname __func__
80 #endif
81
82 #ifdef __cplusplus
83 extern "C" {
84 #endif
85 #ifndef __REACTOS__
86 NTSYSCALLAPI NTSTATUS NTAPI NtFsControlFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext,
87 PIO_STATUS_BLOCK IoStatusBlock, ULONG FsControlCode, PVOID InputBuffer, ULONG InputBufferLength,
88 PVOID OutputBuffer, ULONG OutputBufferLength);
89
90 NTSTATUS NTAPI NtReadFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer,
91 ULONG Length, PLARGE_INTEGER ByteOffset, PULONG Key);
92 #endif
93
94 NTSTATUS WINAPI RtlUTF8ToUnicodeN(PWSTR UnicodeStringDestination, ULONG UnicodeStringMaxWCharCount,
95 PULONG UnicodeStringActualWCharCount, PCCH UTF8StringSource,
96 ULONG UTF8StringByteCount);
97
98 #ifndef __REACTOS__
99 NTSTATUS WINAPI NtSetEaFile(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length);
100
101 NTSTATUS WINAPI NtSetSecurityObject(HANDLE Handle, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR SecurityDescriptor);
102
103 NTSTATUS NTAPI NtQueryInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass);
104 #ifdef __cplusplus
105 }
106 #endif
107 #else
108 BOOL
109 WINAPI
110 SetFileInformationByHandle(HANDLE hFile, FILE_INFO_BY_HANDLE_CLASS FileInformationClass, LPVOID lpFileInformation, DWORD dwBufferSize);
111 BOOL
112 WINAPI
113 GetFileInformationByHandleEx(HANDLE hFile, FILE_INFO_BY_HANDLE_CLASS FileInformationClass, LPVOID lpFileInformation, DWORD dwBufferSize);
114 #ifdef __cplusplus
115 }
116 #endif
117 #endif
118
119 #ifndef __REACTOS__
120 typedef struct _REPARSE_DATA_BUFFER {
121 ULONG ReparseTag;
122 USHORT ReparseDataLength;
123 USHORT Reserved;
124
125 union {
126 struct {
127 USHORT SubstituteNameOffset;
128 USHORT SubstituteNameLength;
129 USHORT PrintNameOffset;
130 USHORT PrintNameLength;
131 ULONG Flags;
132 WCHAR PathBuffer[1];
133 } SymbolicLinkReparseBuffer;
134
135 struct {
136 USHORT SubstituteNameOffset;
137 USHORT SubstituteNameLength;
138 USHORT PrintNameOffset;
139 USHORT PrintNameLength;
140 WCHAR PathBuffer[1];
141 } MountPointReparseBuffer;
142
143 struct {
144 UCHAR DataBuffer[1];
145 } GenericReparseBuffer;
146 };
147 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
148
149 #define SYMLINK_FLAG_RELATIVE 1
150 #endif
151
152 #ifndef FILE_SUPPORTS_BLOCK_REFCOUNTING
153
154 typedef struct _DUPLICATE_EXTENTS_DATA {
155 HANDLE FileHandle;
156 LARGE_INTEGER SourceFileOffset;
157 LARGE_INTEGER TargetFileOffset;
158 LARGE_INTEGER ByteCount;
159 } DUPLICATE_EXTENTS_DATA, *PDUPLICATE_EXTENTS_DATA;
160
161 #define FSCTL_DUPLICATE_EXTENTS_TO_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 209, METHOD_BUFFERED, FILE_WRITE_ACCESS)
162
163 typedef struct _FSCTL_GET_INTEGRITY_INFORMATION_BUFFER {
164 WORD ChecksumAlgorithm;
165 WORD Reserved;
166 DWORD Flags;
167 DWORD ChecksumChunkSizeInBytes;
168 DWORD ClusterSizeInBytes;
169 } FSCTL_GET_INTEGRITY_INFORMATION_BUFFER, *PFSCTL_GET_INTEGRITY_INFORMATION_BUFFER;
170
171 typedef struct _FSCTL_SET_INTEGRITY_INFORMATION_BUFFER {
172 WORD ChecksumAlgorithm;
173 WORD Reserved;
174 DWORD Flags;
175 } FSCTL_SET_INTEGRITY_INFORMATION_BUFFER, *PFSCTL_SET_INTEGRITY_INFORMATION_BUFFER;
176
177 #define FSCTL_GET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 159, METHOD_BUFFERED, FILE_ANY_ACCESS)
178 #define FSCTL_SET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 160, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
179
180 #endif
181
182 extern HMODULE module;
183 void ShowError(HWND hwnd, ULONG err);
184 void ShowNtStatusError(HWND hwnd, NTSTATUS Status);
185 void ShowStringError(HWND hwndDlg, int num, ...);
186 void format_size(UINT64 size, WCHAR* s, ULONG len, BOOL show_bytes);
187 void set_dpi_aware();
188 std::wstring format_message(ULONG last_error);
189 std::wstring format_ntstatus(NTSTATUS Status);