[NDK]
[reactos.git] / reactos / 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 #define ISOLATION_AWARE_ENABLED 1
19 #define STRSAFE_NO_DEPRECATE
20
21 #ifndef __REACTOS__
22 #define WINVER 0x0A00 // Windows 10
23 #define _WIN32_WINNT 0x0A00
24 #endif
25
26 #ifndef __REACTOS__
27 #include <windows.h>
28 #include <winternl.h>
29 #else
30 #define WIN32_NO_STATUS
31 #include <windef.h>
32 #include <winbase.h>
33 #include <strsafe.h>
34 #include <ndk/iofuncs.h>
35 #endif
36 #include <string>
37 #ifndef __REACTOS__
38 #include "../btrfs.h"
39 #include "../btrfsioctl.h"
40 #else
41 #include "btrfs.h"
42 #include "btrfsioctl.h"
43 #endif
44
45 #ifndef __REACTOS__
46 #define STATUS_SUCCESS (NTSTATUS)0x00000000
47 #define STATUS_BUFFER_OVERFLOW (NTSTATUS)0x80000005
48 #define STATUS_END_OF_FILE (NTSTATUS)0xc0000011
49 #define STATUS_MORE_PROCESSING_REQUIRED (NTSTATUS)0xc0000016
50 #define STATUS_BUFFER_TOO_SMALL (NTSTATUS)0xc0000023
51 #define STATUS_DEVICE_NOT_READY (NTSTATUS)0xc00000a3
52 #define STATUS_CANNOT_DELETE (NTSTATUS)0xc0000121
53 #define STATUS_NOT_FOUND (NTSTATUS)0xc0000225
54 #endif
55
56 #define BLOCK_FLAG_DATA 0x001
57 #define BLOCK_FLAG_SYSTEM 0x002
58 #define BLOCK_FLAG_METADATA 0x004
59 #define BLOCK_FLAG_RAID0 0x008
60 #define BLOCK_FLAG_RAID1 0x010
61 #define BLOCK_FLAG_DUPLICATE 0x020
62 #define BLOCK_FLAG_RAID10 0x040
63 #define BLOCK_FLAG_RAID5 0x080
64 #define BLOCK_FLAG_RAID6 0x100
65
66 #define BTRFS_TYPE_FILE 1
67 #define BTRFS_TYPE_DIRECTORY 2
68 #define BTRFS_TYPE_CHARDEV 3
69 #define BTRFS_TYPE_BLOCKDEV 4
70 #define BTRFS_TYPE_FIFO 5
71 #define BTRFS_TYPE_SOCKET 6
72 #define BTRFS_TYPE_SYMLINK 7
73
74 #ifdef _MSC_VER
75 #define funcname __FUNCTION__
76 #else
77 #define funcname __func__
78 #endif
79
80 #ifdef __cplusplus
81 extern "C" {
82 #endif
83 #ifndef __REACTOS__
84 NTSYSCALLAPI NTSTATUS NTAPI NtFsControlFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext,
85 PIO_STATUS_BLOCK IoStatusBlock, ULONG FsControlCode, PVOID InputBuffer, ULONG InputBufferLength,
86 PVOID OutputBuffer, ULONG OutputBufferLength);
87
88 NTSTATUS NTAPI NtReadFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer,
89 ULONG Length, PLARGE_INTEGER ByteOffset, PULONG Key);
90 #endif
91
92 NTSTATUS WINAPI RtlUTF8ToUnicodeN(PWSTR UnicodeStringDestination, ULONG UnicodeStringMaxWCharCount,
93 PULONG UnicodeStringActualWCharCount, PCCH UTF8StringSource,
94 ULONG UTF8StringByteCount);
95
96 #ifndef __REACTOS__
97 NTSTATUS WINAPI NtSetEaFile(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length);
98
99 NTSTATUS WINAPI NtSetSecurityObject(HANDLE Handle, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR SecurityDescriptor);
100
101 NTSTATUS NTAPI NtQueryInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass);
102 #ifdef __cplusplus
103 }
104 #endif
105 #else
106 BOOL
107 WINAPI
108 SetFileInformationByHandle(HANDLE hFile, FILE_INFO_BY_HANDLE_CLASS FileInformationClass, LPVOID lpFileInformation, DWORD dwBufferSize);
109 BOOL
110 WINAPI
111 GetFileInformationByHandleEx(HANDLE hFile, FILE_INFO_BY_HANDLE_CLASS FileInformationClass, LPVOID lpFileInformation, DWORD dwBufferSize);
112 #ifdef __cplusplus
113 }
114 #endif
115 #endif
116
117 #ifndef __REACTOS__
118 typedef struct _REPARSE_DATA_BUFFER {
119 ULONG ReparseTag;
120 USHORT ReparseDataLength;
121 USHORT Reserved;
122
123 union {
124 struct {
125 USHORT SubstituteNameOffset;
126 USHORT SubstituteNameLength;
127 USHORT PrintNameOffset;
128 USHORT PrintNameLength;
129 ULONG Flags;
130 WCHAR PathBuffer[1];
131 } SymbolicLinkReparseBuffer;
132
133 struct {
134 USHORT SubstituteNameOffset;
135 USHORT SubstituteNameLength;
136 USHORT PrintNameOffset;
137 USHORT PrintNameLength;
138 WCHAR PathBuffer[1];
139 } MountPointReparseBuffer;
140
141 struct {
142 UCHAR DataBuffer[1];
143 } GenericReparseBuffer;
144 };
145 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
146
147 #define SYMLINK_FLAG_RELATIVE 1
148 #endif
149
150 #ifndef FILE_SUPPORTS_BLOCK_REFCOUNTING
151
152 typedef struct _DUPLICATE_EXTENTS_DATA {
153 HANDLE FileHandle;
154 LARGE_INTEGER SourceFileOffset;
155 LARGE_INTEGER TargetFileOffset;
156 LARGE_INTEGER ByteCount;
157 } DUPLICATE_EXTENTS_DATA, *PDUPLICATE_EXTENTS_DATA;
158
159 #define FSCTL_DUPLICATE_EXTENTS_TO_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 209, METHOD_BUFFERED, FILE_WRITE_ACCESS)
160
161 typedef struct _FSCTL_GET_INTEGRITY_INFORMATION_BUFFER {
162 WORD ChecksumAlgorithm;
163 WORD Reserved;
164 DWORD Flags;
165 DWORD ChecksumChunkSizeInBytes;
166 DWORD ClusterSizeInBytes;
167 } FSCTL_GET_INTEGRITY_INFORMATION_BUFFER, *PFSCTL_GET_INTEGRITY_INFORMATION_BUFFER;
168
169 typedef struct _FSCTL_SET_INTEGRITY_INFORMATION_BUFFER {
170 WORD ChecksumAlgorithm;
171 WORD Reserved;
172 DWORD Flags;
173 } FSCTL_SET_INTEGRITY_INFORMATION_BUFFER, *PFSCTL_SET_INTEGRITY_INFORMATION_BUFFER;
174
175 #define FSCTL_GET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 159, METHOD_BUFFERED, FILE_ANY_ACCESS)
176 #define FSCTL_SET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 160, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
177
178 #endif
179
180 extern HMODULE module;
181 void ShowError(HWND hwnd, ULONG err);
182 void ShowNtStatusError(HWND hwnd, NTSTATUS Status);
183 void ShowStringError(HWND hwndDlg, int num, ...);
184 void format_size(UINT64 size, WCHAR* s, ULONG len, BOOL show_bytes);
185 void set_dpi_aware();
186 std::wstring format_message(ULONG last_error);
187 std::wstring format_ntstatus(NTSTATUS Status);