VirtualBox

source: kBuild/trunk/src/lib/nt/ntstuff.h@ 2862

Last change on this file since 2862 was 2862, checked in by bird, 9 years ago

updates

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 17.9 KB
Line 
1/* $Id: ntstuff.h 2862 2016-09-02 02:39:56Z bird $ */
2/** @file
3 * Definitions, types, prototypes and globals for NT.
4 */
5
6/*
7 * Copyright (c) 2005-2013 knut st. osmundsen <bird-kBuild-spamx@anduin.net>
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
25 * IN THE SOFTWARE.
26 *
27 * Alternatively, the content of this file may be used under the terms of the
28 * GPL version 2 or later, or LGPL version 2.1 or later.
29 */
30
31
32#ifndef ___nt_ntstuff_h
33#define ___nt_ntstuff_h
34
35#define timeval timeval_Windows
36#define WIN32_NO_STATUS
37#include <Windows.h>
38#include <winternl.h>
39#undef WIN32_NO_STATUS
40#include <ntstatus.h>
41#undef timeval
42
43
44/** @defgroup grp_nt_ntstuff NT Stuff
45 * @{ */
46
47typedef LONG MY_NTSTATUS;
48typedef ULONG MY_ACCESS_MASK;
49
50typedef struct MY_IO_STATUS_BLOCK
51{
52 union
53 {
54 MY_NTSTATUS Status;
55 PVOID Pointer;
56 } u;
57 ULONG_PTR Information;
58} MY_IO_STATUS_BLOCK;
59
60typedef VOID WINAPI MY_IO_APC_ROUTINE(PVOID, MY_IO_STATUS_BLOCK *, ULONG);
61
62typedef struct MY_UNICODE_STRING
63{
64 USHORT Length;
65 USHORT MaximumLength;
66 PWSTR Buffer;
67} MY_UNICODE_STRING;
68
69typedef struct MY_STRING
70{
71 USHORT Length;
72 USHORT MaximumLength;
73 PCHAR Buffer;
74} MY_STRING;
75typedef MY_STRING MY_ANSI_STRING;
76
77typedef struct MY_OBJECT_ATTRIBUTES
78{
79 ULONG Length;
80 HANDLE RootDirectory;
81 MY_UNICODE_STRING *ObjectName;
82 ULONG Attributes;
83 PVOID SecurityDescriptor;
84 PVOID SecurityQualityOfService;
85} MY_OBJECT_ATTRIBUTES;
86
87#define MyInitializeObjectAttributes(a_pAttr, a_pName, a_fAttribs, a_hRoot, a_pSecDesc) \
88 do { \
89 (a_pAttr)->Length = sizeof(MY_OBJECT_ATTRIBUTES); \
90 (a_pAttr)->RootDirectory = (a_hRoot); \
91 (a_pAttr)->Attributes = (a_fAttribs); \
92 (a_pAttr)->ObjectName = (a_pName); \
93 (a_pAttr)->SecurityDescriptor = (a_pSecDesc); \
94 (a_pAttr)->SecurityQualityOfService = NULL; \
95 } while (0)
96
97
98
99typedef struct MY_FILE_BASIC_INFORMATION
100{
101 LARGE_INTEGER CreationTime;
102 LARGE_INTEGER LastAccessTime;
103 LARGE_INTEGER LastWriteTime;
104 LARGE_INTEGER ChangeTime;
105 ULONG FileAttributes;
106} MY_FILE_BASIC_INFORMATION;
107
108typedef struct MY_FILE_STANDARD_INFORMATION
109{
110 LARGE_INTEGER AllocationSize;
111 LARGE_INTEGER EndOfFile;
112 ULONG NumberOfLinks;
113 BOOLEAN DeletePending;
114 BOOLEAN Directory;
115} MY_FILE_STANDARD_INFORMATION;
116
117typedef struct MY_FILE_NETWORK_OPEN_INFORMATION
118{
119 LARGE_INTEGER CreationTime;
120 LARGE_INTEGER LastAccessTime;
121 LARGE_INTEGER LastWriteTime;
122 LARGE_INTEGER ChangeTime;
123 LARGE_INTEGER AllocationSize;
124 LARGE_INTEGER EndOfFile;
125 ULONG FileAttributes;
126} MY_FILE_NETWORK_OPEN_INFORMATION;
127
128typedef struct MY_FILE_INTERNAL_INFORMATION
129{
130 LARGE_INTEGER IndexNumber;
131} MY_FILE_INTERNAL_INFORMATION;
132
133typedef struct MY_FILE_EA_INFORMATION
134{
135 ULONG EaSize;
136} MY_FILE_EA_INFORMATION;
137
138typedef struct MY_FILE_ACCESS_INFORMATION
139{
140 ACCESS_MASK AccessFlags;
141} MY_FILE_ACCESS_INFORMATION;
142
143typedef struct MY_FILE_POSITION_INFORMATION
144{
145 LARGE_INTEGER CurrentByteOffset;
146} MY_FILE_POSITION_INFORMATION;
147
148typedef struct MY_FILE_MODE_INFORMATION
149{
150 ULONG Mode;
151} MY_FILE_MODE_INFORMATION;
152
153typedef struct MY_FILE_ALIGNMENT_INFORMATION
154{
155 ULONG AlignmentRequirement;
156} MY_FILE_ALIGNMENT_INFORMATION;
157
158typedef struct MY_FILE_NAME_INFORMATION
159{
160 ULONG FileNameLength;
161 WCHAR FileName[1];
162} MY_FILE_NAME_INFORMATION;
163
164typedef struct MY_FILE_ALL_INFORMATION
165{
166 MY_FILE_BASIC_INFORMATION BasicInformation;
167 MY_FILE_STANDARD_INFORMATION StandardInformation;
168 MY_FILE_INTERNAL_INFORMATION InternalInformation;
169 MY_FILE_EA_INFORMATION EaInformation;
170 MY_FILE_ACCESS_INFORMATION AccessInformation;
171 MY_FILE_POSITION_INFORMATION PositionInformation;
172 MY_FILE_MODE_INFORMATION ModeInformation;
173 MY_FILE_ALIGNMENT_INFORMATION AlignmentInformation;
174 MY_FILE_NAME_INFORMATION NameInformation;
175} MY_FILE_ALL_INFORMATION;
176
177typedef struct MY_FILE_ATTRIBUTE_TAG_INFORMATION
178{
179 ULONG FileAttributes;
180 ULONG ReparseTag;
181} MY_FILE_ATTRIBUTE_TAG_INFORMATION;
182
183
184typedef struct MY_FILE_NAMES_INFORMATION
185{
186 ULONG NextEntryOffset;
187 ULONG FileIndex;
188 ULONG FileNameLength;
189 WCHAR FileName[1];
190} MY_FILE_NAMES_INFORMATION;
191/** The sizeof(MY_FILE_NAMES_INFORMATION) without the FileName. */
192#define MIN_SIZEOF_MY_FILE_NAMES_INFORMATION (4 + 4 + 4)
193
194
195typedef struct MY_FILE_ID_FULL_DIR_INFORMATION
196{
197 ULONG NextEntryOffset;
198 ULONG FileIndex;
199 LARGE_INTEGER CreationTime;
200 LARGE_INTEGER LastAccessTime;
201 LARGE_INTEGER LastWriteTime;
202 LARGE_INTEGER ChangeTime;
203 LARGE_INTEGER EndOfFile;
204 LARGE_INTEGER AllocationSize;
205 ULONG FileAttributes;
206 ULONG FileNameLength;
207 ULONG EaSize;
208 LARGE_INTEGER FileId;
209 WCHAR FileName[1];
210} MY_FILE_ID_FULL_DIR_INFORMATION;
211/** The sizeof(MY_FILE_NAMES_INFORMATION) without the FileName. */
212#define MIN_SIZEOF_MY_FILE_ID_FULL_DIR_INFORMATION ( (size_t)&((MY_FILE_ID_FULL_DIR_INFORMATION *)0)->FileName )
213
214typedef struct MY_FILE_BOTH_DIR_INFORMATION
215{
216 ULONG NextEntryOffset;
217 ULONG FileIndex;
218 LARGE_INTEGER CreationTime;
219 LARGE_INTEGER LastAccessTime;
220 LARGE_INTEGER LastWriteTime;
221 LARGE_INTEGER ChangeTime;
222 LARGE_INTEGER EndOfFile;
223 LARGE_INTEGER AllocationSize;
224 ULONG FileAttributes;
225 ULONG FileNameLength;
226 ULONG EaSize;
227 CCHAR ShortNameLength;
228 WCHAR ShortName[12];
229 WCHAR FileName[1];
230} MY_FILE_BOTH_DIR_INFORMATION;
231/** The sizeof(MY_FILE_BOTH_DIR_INFORMATION) without the FileName. */
232#define MIN_SIZEOF_MY_FILE_BOTH_DIR_INFORMATION ( (size_t)&((MY_FILE_BOTH_DIR_INFORMATION *)0)->FileName )
233
234
235typedef struct MY_FILE_ID_BOTH_DIR_INFORMATION
236{
237 ULONG NextEntryOffset;
238 ULONG FileIndex;
239 LARGE_INTEGER CreationTime;
240 LARGE_INTEGER LastAccessTime;
241 LARGE_INTEGER LastWriteTime;
242 LARGE_INTEGER ChangeTime;
243 LARGE_INTEGER EndOfFile;
244 LARGE_INTEGER AllocationSize;
245 ULONG FileAttributes;
246 ULONG FileNameLength;
247 ULONG EaSize;
248 CCHAR ShortNameLength;
249 WCHAR ShortName[12];
250 LARGE_INTEGER FileId;
251 WCHAR FileName[1];
252} MY_FILE_ID_BOTH_DIR_INFORMATION;
253/** The sizeof(MY_FILE_NAMES_INFORMATION) without the FileName. */
254#define MIN_SIZEOF_MY_FILE_ID_BOTH_DIR_INFORMATION ( (size_t)&((MY_FILE_ID_BOTH_DIR_INFORMATION *)0)->FileName )
255
256
257typedef struct MY_FILE_DISPOSITION_INFORMATION
258{
259 BOOLEAN DeleteFile;
260} MY_FILE_DISPOSITION_INFORMATION;
261
262
263typedef enum MY_FILE_INFORMATION_CLASS
264{
265 MyFileDirectoryInformation = 1,
266 MyFileFullDirectoryInformation, /* = 2 */
267 MyFileBothDirectoryInformation, /* = 3 */
268 MyFileBasicInformation, /* = 4 */
269 MyFileStandardInformation, /* = 5 */
270 MyFileInternalInformation, /* = 6 */
271 MyFileEaInformation, /* = 7 */
272 MyFileAccessInformation, /* = 8 */
273 MyFileNameInformation, /* = 9 */
274 MyFileRenameInformation, /* = 10 */
275 MyFileLinkInformation, /* = 11 */
276 MyFileNamesInformation, /* = 12 */
277 MyFileDispositionInformation, /* = 13 */
278 MyFilePositionInformation, /* = 14 */
279 MyFileFullEaInformation, /* = 15 */
280 MyFileModeInformation, /* = 16 */
281 MyFileAlignmentInformation, /* = 17 */
282 MyFileAllInformation, /* = 18 */
283 MyFileAllocationInformation, /* = 19 */
284 MyFileEndOfFileInformation, /* = 20 */
285 MyFileAlternateNameInformation, /* = 21 */
286 MyFileStreamInformation, /* = 22 */
287 MyFilePipeInformation, /* = 23 */
288 MyFilePipeLocalInformation, /* = 24 */
289 MyFilePipeRemoteInformation, /* = 25 */
290 MyFileMailslotQueryInformation, /* = 26 */
291 MyFileMailslotSetInformation, /* = 27 */
292 MyFileCompressionInformation, /* = 28 */
293 MyFileObjectIdInformation, /* = 29 */
294 MyFileCompletionInformation, /* = 30 */
295 MyFileMoveClusterInformation, /* = 31 */
296 MyFileQuotaInformation, /* = 32 */
297 MyFileReparsePointInformation, /* = 33 */
298 MyFileNetworkOpenInformation, /* = 34 */
299 MyFileAttributeTagInformation, /* = 35 */
300 MyFileTrackingInformation, /* = 36 */
301 MyFileIdBothDirectoryInformation, /* = 37 */
302 MyFileIdFullDirectoryInformation, /* = 38 */
303 MyFileValidDataLengthInformation, /* = 39 */
304 MyFileShortNameInformation, /* = 40 */
305 MyFileIoCompletionNotificationInformation, /* = 41 */
306 MyFileIoStatusBlockRangeInformation, /* = 42 */
307 MyFileIoPriorityHintInformation, /* = 43 */
308 MyFileSfioReserveInformation, /* = 44 */
309 MyFileSfioVolumeInformation, /* = 45 */
310 MyFileHardLinkInformation, /* = 46 */
311 MyFileProcessIdsUsingFileInformation, /* = 47 */
312 MyFileNormalizedNameInformation, /* = 48 */
313 MyFileNetworkPhysicalNameInformation, /* = 49 */
314 MyFileIdGlobalTxDirectoryInformation, /* = 50 */
315 MyFileIsRemoteDeviceInformation, /* = 51 */
316 MyFileAttributeCacheInformation, /* = 52 */
317 MyFileNumaNodeInformation, /* = 53 */
318 MyFileStandardLinkInformation, /* = 54 */
319 MyFileRemoteProtocolInformation, /* = 55 */
320 MyFileMaximumInformation
321} MY_FILE_INFORMATION_CLASS;
322
323
324typedef struct MY_FILE_FS_VOLUME_INFORMATION
325{
326 LARGE_INTEGER VolumeCreationTime;
327 ULONG VolumeSerialNumber;
328 ULONG VolumeLabelLength;
329 BOOLEAN SupportsObjects;
330 WCHAR VolumeLabel[1];
331} MY_FILE_FS_VOLUME_INFORMATION;
332
333typedef struct _MY_FILE_FS_ATTRIBUTE_INFORMATION
334{
335 ULONG FileSystemAttributes;
336 LONG MaximumComponentNameLength;
337 ULONG FileSystemNameLength;
338 WCHAR FileSystemName[1];
339} MY_FILE_FS_ATTRIBUTE_INFORMATION;
340
341typedef enum MY_FSINFOCLASS
342{
343 MyFileFsVolumeInformation = 1,
344 MyFileFsLabelInformation, /* = 2 */
345 MyFileFsSizeInformation, /* = 3 */
346 MyFileFsDeviceInformation, /* = 4 */
347 MyFileFsAttributeInformation, /* = 5 */
348 MyFileFsControlInformation, /* = 6 */
349 MyFileFsFullSizeInformation, /* = 7 */
350 MyFileFsObjectIdInformation, /* = 8 */
351 MyFileFsDriverPathInformation, /* = 9 */
352 MyFileFsVolumeFlagsInformation, /* = 10 */
353 MyFileFsMaximumInformation
354} MY_FS_INFORMATION_CLASS;
355
356
357typedef struct MY_RTLP_CURDIR_REF
358{
359 LONG RefCount;
360 HANDLE Handle;
361} MY_RTLP_CURDIR_REF;
362
363typedef struct MY_RTL_RELATIVE_NAME_U
364{
365 MY_UNICODE_STRING RelativeName;
366 HANDLE ContainingDirectory;
367 MY_RTLP_CURDIR_REF CurDirRef;
368} MY_RTL_RELATIVE_NAME_U;
369
370
371#ifndef OBJ_INHERIT
372# define OBJ_INHERIT 0x00000002U
373# define OBJ_PERMANENT 0x00000010U
374# define OBJ_EXCLUSIVE 0x00000020U
375# define OBJ_CASE_INSENSITIVE 0x00000040U
376# define OBJ_OPENIF 0x00000080U
377# define OBJ_OPENLINK 0x00000100U
378# define OBJ_KERNEL_HANDLE 0x00000200U
379# define OBJ_FORCE_ACCESS_CHECK 0x00000400U
380# define OBJ_VALID_ATTRIBUTES 0x000007f2U
381#endif
382
383#ifndef FILE_OPEN
384# define FILE_SUPERSEDE 0x00000000U
385# define FILE_OPEN 0x00000001U
386# define FILE_CREATE 0x00000002U
387# define FILE_OPEN_IF 0x00000003U
388# define FILE_OVERWRITE 0x00000004U
389# define FILE_OVERWRITE_IF 0x00000005U
390# define FILE_MAXIMUM_DISPOSITION 0x00000005U
391#endif
392
393#ifndef FILE_DIRECTORY_FILE
394# define FILE_DIRECTORY_FILE 0x00000001U
395# define FILE_WRITE_THROUGH 0x00000002U
396# define FILE_SEQUENTIAL_ONLY 0x00000004U
397# define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008U
398# define FILE_SYNCHRONOUS_IO_ALERT 0x00000010U
399# define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020U
400# define FILE_NON_DIRECTORY_FILE 0x00000040U
401# define FILE_CREATE_TREE_CONNECTION 0x00000080U
402# define FILE_COMPLETE_IF_OPLOCKED 0x00000100U
403# define FILE_NO_EA_KNOWLEDGE 0x00000200U
404# define FILE_OPEN_REMOTE_INSTANCE 0x00000400U
405# define FILE_RANDOM_ACCESS 0x00000800U
406# define FILE_DELETE_ON_CLOSE 0x00001000U
407# define FILE_OPEN_BY_FILE_ID 0x00002000U
408# define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000U
409# define FILE_NO_COMPRESSION 0x00008000U
410# define FILE_RESERVE_OPFILTER 0x00100000U
411# define FILE_OPEN_REPARSE_POINT 0x00200000U
412# define FILE_OPEN_NO_RECALL 0x00400000U
413# define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000U
414#endif
415
416
417/** @name NT status codes and associated macros.
418 * @{ */
419#define MY_NT_SUCCESS(a_ntRc) ((MY_NTSTATUS)(a_ntRc) >= 0)
420#define MY_NT_FAILURE(a_ntRc) ((MY_NTSTATUS)(a_ntRc) < 0)
421#define MY_STATUS_NO_MORE_FILES ((MY_NTSTATUS)0x80000006)
422#define MY_STATUS_OBJECT_NAME_INVALID ((MY_NTSTATUS)0xc0000033)
423#define MY_STATUS_OBJECT_NAME_NOT_FOUND ((MY_NTSTATUS)0xc0000034)
424#define MY_STATUS_OBJECT_PATH_INVALID ((MY_NTSTATUS)0xc0000039)
425#define MY_STATUS_OBJECT_PATH_NOT_FOUND ((MY_NTSTATUS)0xc000003a)
426#define MY_STATUS_OBJECT_PATH_SYNTAX_BAD ((MY_NTSTATUS)0xc000003b)
427/** @} */
428
429
430/*******************************************************************************
431* Global Variables *
432*******************************************************************************/
433extern MY_NTSTATUS (WINAPI * g_pfnNtClose)(HANDLE);
434extern MY_NTSTATUS (WINAPI * g_pfnNtCreateFile)(PHANDLE, MY_ACCESS_MASK, MY_OBJECT_ATTRIBUTES *, MY_IO_STATUS_BLOCK *,
435 PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG);
436extern MY_NTSTATUS (WINAPI * g_pfnNtDeleteFile)(MY_OBJECT_ATTRIBUTES *);
437extern MY_NTSTATUS (WINAPI * g_pfnNtReadFile)(HANDLE hFile, HANDLE hEvent, MY_IO_APC_ROUTINE *pfnApc, PVOID pvApcCtx,
438 MY_IO_STATUS_BLOCK *, PVOID pvBuf, ULONG cbToRead, PLARGE_INTEGER poffFile,
439 PULONG puKey);
440extern MY_NTSTATUS (WINAPI * g_pfnNtQueryInformationFile)(HANDLE, MY_IO_STATUS_BLOCK *,
441 PVOID, LONG, MY_FILE_INFORMATION_CLASS);
442extern MY_NTSTATUS (WINAPI * g_pfnNtQueryVolumeInformationFile)(HANDLE, MY_IO_STATUS_BLOCK *,
443 PVOID, LONG, MY_FS_INFORMATION_CLASS);
444extern MY_NTSTATUS (WINAPI * g_pfnNtQueryDirectoryFile)(HANDLE, HANDLE, MY_IO_APC_ROUTINE *, PVOID, MY_IO_STATUS_BLOCK *,
445 PVOID, ULONG, MY_FILE_INFORMATION_CLASS, BOOLEAN,
446 MY_UNICODE_STRING *, BOOLEAN);
447extern MY_NTSTATUS (WINAPI * g_pfnNtQueryAttributesFile)(MY_OBJECT_ATTRIBUTES *, MY_FILE_BASIC_INFORMATION *);
448extern MY_NTSTATUS (WINAPI * g_pfnNtQueryFullAttributesFile)(MY_OBJECT_ATTRIBUTES *, MY_FILE_NETWORK_OPEN_INFORMATION *);
449extern MY_NTSTATUS (WINAPI * g_pfnNtSetInformationFile)(HANDLE, MY_IO_STATUS_BLOCK *, PVOID, LONG, MY_FILE_INFORMATION_CLASS);
450extern BOOLEAN (WINAPI * g_pfnRtlDosPathNameToNtPathName_U)(PCWSTR, MY_UNICODE_STRING *, PCWSTR *, MY_RTL_RELATIVE_NAME_U *);
451extern MY_NTSTATUS (WINAPI * g_pfnRtlAnsiStringToUnicodeString)(MY_UNICODE_STRING *, MY_ANSI_STRING const *, BOOLEAN);
452extern BOOLEAN (WINAPI * g_pfnRtlEqualUnicodeString)(MY_UNICODE_STRING const *pUniStr1, MY_UNICODE_STRING const *pUniStr2,
453 BOOLEAN fCaseInsensitive);
454extern BOOLEAN (WINAPI * g_pfnRtlEqualString)(MY_ANSI_STRING const *pAnsiStr1, MY_ANSI_STRING const *pAnsiStr2,
455 BOOLEAN fCaseInsensitive);
456extern UCHAR (WINAPI * g_pfnRtlUpperChar)(UCHAR uch);
457
458
459/** @} */
460
461#endif
462
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette