xref: /reactos/dll/shellext/shellbtrfs/shellext.h (revision 8c2e9189)
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);
190