@@ -116,13 +116,80 @@ typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
116
116
WCHAR FileName [1 ];
117
117
} FILE_ID_BOTH_DIR_INFORMATION , * PFILE_ID_BOTH_DIR_INFORMATION ;
118
118
119
+ typedef struct _FILE_BASIC_INFORMATION
120
+ {
121
+ LARGE_INTEGER CreationTime ;
122
+ LARGE_INTEGER LastAccessTime ;
123
+ LARGE_INTEGER LastWriteTime ;
124
+ LARGE_INTEGER ChangeTime ;
125
+ ULONG FileAttributes ;
126
+ } FILE_BASIC_INFORMATION , * PFILE_BASIC_INFORMATION ;
127
+
128
+ typedef struct _FILE_STANDARD_INFORMATION
129
+ {
130
+ LARGE_INTEGER AllocationSize ;
131
+ LARGE_INTEGER EndOfFile ;
132
+ ULONG NumberOfLinks ;
133
+ BOOLEAN DeletePending ;
134
+ BOOLEAN Directory ;
135
+ } FILE_STANDARD_INFORMATION , * PFILE_STANDARD_INFORMATION ;
136
+
119
137
typedef struct _FILE_NAMES_INFORMATION {
120
138
ULONG NextEntryOffset ;
121
139
ULONG FileIndex ;
122
140
ULONG FileNameLength ;
123
141
WCHAR FileName [1 ];
124
142
} FILE_NAMES_INFORMATION , * PFILE_NAMES_INFORMATION ;
125
143
144
+ typedef struct _FILE_INTERNAL_INFORMATION
145
+ {
146
+ LARGE_INTEGER IndexNumber ;
147
+ } FILE_INTERNAL_INFORMATION , * PFILE_INTERNAL_INFORMATION ;
148
+
149
+ typedef struct _FILE_EA_INFORMATION
150
+ {
151
+ ULONG EaSize ;
152
+ } FILE_EA_INFORMATION , * PFILE_EA_INFORMATION ;
153
+
154
+ typedef struct _FILE_ACCESS_INFORMATION
155
+ {
156
+ ACCESS_MASK AccessFlags ;
157
+ } FILE_ACCESS_INFORMATION , * PFILE_ACCESS_INFORMATION ;
158
+
159
+ typedef struct _FILE_POSITION_INFORMATION
160
+ {
161
+ LARGE_INTEGER CurrentByteOffset ;
162
+ } FILE_POSITION_INFORMATION , * PFILE_POSITION_INFORMATION ;
163
+
164
+ typedef struct _FILE_MODE_INFORMATION
165
+ {
166
+ ULONG Mode ;
167
+ } FILE_MODE_INFORMATION , * PFILE_MODE_INFORMATION ;
168
+
169
+ typedef struct _FILE_ALIGNMENT_INFORMATION
170
+ {
171
+ ULONG AlignmentRequirement ;
172
+ } FILE_ALIGNMENT_INFORMATION , * PFILE_ALIGNMENT_INFORMATION ;
173
+
174
+ typedef struct _FILE_NAME_INFORMATION
175
+ {
176
+ ULONG FileNameLength ;
177
+ WCHAR FileName [1 ];
178
+ } FILE_NAME_INFORMATION , * PFILE_NAME_INFORMATION ;
179
+
180
+ typedef struct _FILE_ALL_INFORMATION
181
+ {
182
+ FILE_BASIC_INFORMATION BasicInformation ;
183
+ FILE_STANDARD_INFORMATION StandardInformation ;
184
+ FILE_INTERNAL_INFORMATION InternalInformation ;
185
+ FILE_EA_INFORMATION EaInformation ;
186
+ FILE_ACCESS_INFORMATION AccessInformation ;
187
+ FILE_POSITION_INFORMATION PositionInformation ;
188
+ FILE_MODE_INFORMATION ModeInformation ;
189
+ FILE_ALIGNMENT_INFORMATION AlignmentInformation ;
190
+ FILE_NAME_INFORMATION NameInformation ;
191
+ } FILE_ALL_INFORMATION , * PFILE_ALL_INFORMATION ;
192
+
126
193
typedef struct _FILE_OBJECTID_INFORMATION {
127
194
LONGLONG FileReference ;
128
195
UCHAR ObjectId [16 ];
@@ -158,13 +225,17 @@ typedef enum _FILE_INFORMATION_CLASS {
158
225
FileDirectoryInformation = 1 ,
159
226
FileFullDirectoryInformation = 2 ,
160
227
FileBothDirectoryInformation = 3 ,
228
+ FileStandardInformation = 5 ,
229
+ FileNameInformation = 9 ,
230
+ FileRenameInformation = 10 ,
161
231
FileNamesInformation = 12 ,
232
+ FileAllInformation = 18 ,
162
233
FileObjectIdInformation = 29 ,
163
234
FileReparsePointInformation = 33 ,
164
235
FileIdBothDirectoryInformation = 37 ,
165
- FileIdFullDirectoryInformation = 38
166
- } FILE_INFORMATION_CLASS ,
167
- * PFILE_INFORMATION_CLASS ;
236
+ FileIdFullDirectoryInformation = 38 ,
237
+ FileNormalizedNameInformation = 48 ,
238
+ } FILE_INFORMATION_CLASS , * PFILE_INFORMATION_CLASS ;
168
239
169
240
typedef enum _MODE { KernelMode , UserMode , MaximumMode } MODE ;
170
241
@@ -253,6 +324,12 @@ typedef struct _OBJECT_HANDLE_INFORMATION {
253
324
ACCESS_MASK GrantedAccess ;
254
325
} OBJECT_HANDLE_INFORMATION , * POBJECT_HANDLE_INFORMATION ;
255
326
327
+ typedef enum _OBJECT_INFORMATION_CLASS
328
+ {
329
+ ObjectBasicInformation = 0 ,
330
+ ObjectTypeInformation = 2
331
+ } OBJECT_INFORMATION_CLASS ;
332
+
256
333
typedef struct _RTL_RELATIVE_NAME {
257
334
UNICODE_STRING RelativeName ;
258
335
HANDLE ContainingDirectory ;
@@ -269,14 +346,6 @@ typedef struct _FILE_NETWORK_OPEN_INFORMATION {
269
346
ULONG FileAttributes ;
270
347
} FILE_NETWORK_OPEN_INFORMATION , * PFILE_NETWORK_OPEN_INFORMATION ;
271
348
272
- typedef struct _FILE_BASIC_INFORMATION {
273
- LARGE_INTEGER CreationTime ;
274
- LARGE_INTEGER LastAccessTime ;
275
- LARGE_INTEGER LastWriteTime ;
276
- LARGE_INTEGER ChangeTime ;
277
- ULONG FileAttributes ;
278
- } FILE_BASIC_INFORMATION , * PFILE_BASIC_INFORMATION ;
279
-
280
349
#define FILE_DIRECTORY_FILE 0x00000001
281
350
#define FILE_WRITE_THROUGH 0x00000002
282
351
#define FILE_SEQUENTIAL_ONLY 0x00000004
@@ -302,55 +371,62 @@ typedef struct _FILE_BASIC_INFORMATION {
302
371
#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
303
372
#define FILE_CONTAINS_EXTENDED_CREATE_INFORMATION 0x10000000
304
373
305
- typedef NTSTATUS (WINAPI * NtQueryDirectoryFile_type )(
374
+ // Nt
375
+
376
+ using NtQueryDirectoryFile_type = NTSTATUS (WINAPI * )(
306
377
HANDLE , HANDLE , PIO_APC_ROUTINE , PVOID , PIO_STATUS_BLOCK , PVOID , ULONG ,
307
378
FILE_INFORMATION_CLASS , BOOLEAN , PUNICODE_STRING , BOOLEAN );
308
-
309
- typedef NTSTATUS (WINAPI * NtQueryDirectoryFileEx_type )(
379
+ using NtQueryDirectoryFileEx_type = NTSTATUS (WINAPI * )(
310
380
HANDLE , HANDLE , PIO_APC_ROUTINE , PVOID , PIO_STATUS_BLOCK , PVOID , ULONG ,
311
381
FILE_INFORMATION_CLASS , ULONG , PUNICODE_STRING );
312
382
313
- typedef NTSTATUS (WINAPI * NtQueryFullAttributesFile_type )(
383
+ using NtQueryFullAttributesFile_type = NTSTATUS (WINAPI * )(
314
384
POBJECT_ATTRIBUTES , PFILE_NETWORK_OPEN_INFORMATION );
315
-
316
- typedef NTSTATUS (WINAPI * NtQueryAttributesFile_type )(POBJECT_ATTRIBUTES ,
385
+ using NtQueryAttributesFile_type = NTSTATUS (WINAPI * )(POBJECT_ATTRIBUTES ,
317
386
PFILE_BASIC_INFORMATION );
318
387
319
- typedef NTSTATUS (WINAPI * NtOpenFile_type )(PHANDLE , ACCESS_MASK ,
388
+ using NtQueryObject_type = NTSTATUS (WINAPI * )(
389
+ HANDLE Handle , OBJECT_INFORMATION_CLASS ObjectInformationClass ,
390
+ PVOID ObjectInformation , ULONG ObjectInformationLength , PULONG ReturnLength );
391
+ using NtQueryInformationFile_type = NTSTATUS (WINAPI * )(
392
+ HANDLE FileHandle , PIO_STATUS_BLOCK IoStatusBlock , PVOID FileInformation ,
393
+ ULONG Length , FILE_INFORMATION_CLASS FileInformationClass );
394
+
395
+ using NtOpenFile_type = NTSTATUS (WINAPI * )(PHANDLE , ACCESS_MASK ,
320
396
POBJECT_ATTRIBUTES , PIO_STATUS_BLOCK ,
321
397
ULONG , ULONG );
322
-
323
- typedef NTSTATUS (WINAPI * NtCreateFile_type )(PHANDLE , ACCESS_MASK ,
398
+ using NtCreateFile_type = NTSTATUS (WINAPI * )(PHANDLE , ACCESS_MASK ,
324
399
POBJECT_ATTRIBUTES ,
325
400
PIO_STATUS_BLOCK , PLARGE_INTEGER ,
326
401
ULONG , ULONG , ULONG , ULONG , PVOID ,
327
402
ULONG );
328
403
329
- typedef NTSTATUS (WINAPI * NtClose_type )(HANDLE );
330
-
331
- typedef NTSYSAPI BOOLEAN (NTAPI * RtlDoesFileExists_U_type )(PCWSTR );
332
-
333
- typedef NTSTATUS (NTAPI * RtlDosPathNameToRelativeNtPathName_U_WithStatus_type )(
334
- PCWSTR DosFileName , PUNICODE_STRING NtFileName , PWSTR * FilePath , PRTL_RELATIVE_NAME RelativeName );
404
+ using NtClose_type = NTSTATUS (WINAPI * )(HANDLE );
335
405
336
- typedef void ( NTAPI * RtlReleaseRelativeName_type )( PRTL_RELATIVE_NAME RelativeName );
406
+ using NtTerminateProcess_type = NTSTATUS ( WINAPI * )( HANDLE ProcessHandle , NTSTATUS ExitStatus );
337
407
338
- typedef NTSTATUS ( NTAPI * RtlGetVersion_type )( PRTL_OSVERSIONINFOW );
408
+ // Rtl
339
409
340
- typedef NTSTATUS (WINAPI * NtTerminateProcess_type )(HANDLE ProcessHandle , NTSTATUS ExitStatus );
410
+ using RtlDoesFileExists_U_type = NTSYSAPI BOOLEAN (NTAPI * )(PCWSTR );
411
+ using RtlDosPathNameToRelativeNtPathName_U_WithStatus_type = NTSTATUS (NTAPI * )(
412
+ PCWSTR DosFileName , PUNICODE_STRING NtFileName , PWSTR * FilePath , PRTL_RELATIVE_NAME RelativeName );
413
+ using RtlReleaseRelativeName_type = void (NTAPI * )(PRTL_RELATIVE_NAME RelativeName );
414
+ using RtlGetVersion_type = NTSTATUS (NTAPI * )(PRTL_OSVERSIONINFOW );
341
415
342
416
extern NtQueryDirectoryFile_type NtQueryDirectoryFile ;
343
417
extern NtQueryDirectoryFileEx_type NtQueryDirectoryFileEx ;
344
418
extern NtQueryFullAttributesFile_type NtQueryFullAttributesFile ;
345
419
extern NtQueryAttributesFile_type NtQueryAttributesFile ;
420
+ extern NtQueryObject_type NtQueryObject ;
421
+ extern NtQueryInformationFile_type NtQueryInformationFile ;
346
422
extern NtOpenFile_type NtOpenFile ;
347
423
extern NtCreateFile_type NtCreateFile ;
348
424
extern NtClose_type NtClose ;
425
+ extern NtTerminateProcess_type NtTerminateProcess ;
349
426
extern RtlDoesFileExists_U_type RtlDoesFileExists_U ;
350
427
extern RtlDosPathNameToRelativeNtPathName_U_WithStatus_type RtlDosPathNameToRelativeNtPathName_U_WithStatus ;
351
428
extern RtlReleaseRelativeName_type RtlReleaseRelativeName ;
352
429
extern RtlGetVersion_type RtlGetVersion ;
353
- extern NtTerminateProcess_type NtTerminateProcess ;
354
430
355
431
// ensures ntdll functions have been initialized (only needed during static objects initialization)
356
432
void ntdll_declarations_init ();
0 commit comments