1// Copyright (c) 2006-2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SANDBOX_TOOLS_FINDER_NTUNDOC_H__
6#define SANDBOX_TOOLS_FINDER_NTUNDOC_H__
7
8#define NTSTATUS ULONG
9#define STATUS_SUCCESS 0x00000000
10#define STATUS_INFO_LENGTH_MISMATCH 0xC0000004
11#define STATUS_ACCESS_DENIED 0xC0000022
12#define STATUS_BUFFER_OVERFLOW 0x80000005
13
14typedef struct _LSA_UNICODE_STRING {
15  USHORT Length;
16  USHORT MaximumLength;
17  PWSTR Buffer;
18} UNICODE_STRING;
19
20typedef struct _OBJDIR_INFORMATION {
21  UNICODE_STRING ObjectName;
22  UNICODE_STRING ObjectTypeName;
23  BYTE Data[1];
24} OBJDIR_INFORMATION;
25
26typedef struct _OBJECT_ATTRIBUTES {
27  ULONG Length;
28  HANDLE RootDirectory;
29  UNICODE_STRING *ObjectName;
30  ULONG Attributes;
31  PVOID SecurityDescriptor;
32  PVOID SecurityQualityOfService;
33} OBJECT_ATTRIBUTES;
34
35typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
36  ULONG Attributes;
37  ACCESS_MASK GrantedAccess;
38  ULONG HandleCount;
39  ULONG PointerCount;
40  ULONG Reserved[10];    // reserved for internal use
41 } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;
42
43typedef struct __PUBLIC_OBJECT_TYPE_INFORMATION {
44  UNICODE_STRING TypeName;
45  ULONG Reserved [22];    // reserved for internal use
46} PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
47
48typedef enum _POOL_TYPE {
49  NonPagedPool,
50  PagedPool,
51  NonPagedPoolMustSucceed,
52  ReservedType,
53  NonPagedPoolCacheAligned,
54  PagedPoolCacheAligned,
55  NonPagedPoolCacheAlignedMustS
56} POOL_TYPE;
57
58typedef struct _OBJECT_TYPE_INFORMATION {
59  UNICODE_STRING Name;
60  ULONG TotalNumberOfObjects;
61  ULONG TotalNumberOfHandles;
62  ULONG TotalPagedPoolUsage;
63  ULONG TotalNonPagedPoolUsage;
64  ULONG TotalNamePoolUsage;
65  ULONG TotalHandleTableUsage;
66  ULONG HighWaterNumberOfObjects;
67  ULONG HighWaterNumberOfHandles;
68  ULONG HighWaterPagedPoolUsage;
69  ULONG HighWaterNonPagedPoolUsage;
70  ULONG HighWaterNamePoolUsage;
71  ULONG HighWaterHandleTableUsage;
72  ULONG InvalidAttributes;
73  GENERIC_MAPPING GenericMapping;
74  ULONG ValidAccess;
75  BOOLEAN SecurityRequired;
76  BOOLEAN MaintainHandleCount;
77  USHORT MaintainTypeList;
78  POOL_TYPE PoolType;
79  ULONG PagedPoolUsage;
80  ULONG NonPagedPoolUsage;
81} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
82
83typedef struct _OBJECT_NAME_INFORMATION {
84  UNICODE_STRING          ObjectName;
85} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
86
87typedef enum _OBJECT_INFORMATION_CLASS {
88  ObjectBasicInformation,
89  ObjectNameInformation,
90  ObjectTypeInformation,
91  ObjectAllInformation,
92  ObjectDataInformation
93} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
94
95typedef struct _FILE_NAME_INFORMATION {
96 ULONG FileNameLength;
97 WCHAR FileName[1];
98} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
99
100typedef enum _FILE_INFORMATION_CLASS {
101 // end_wdm
102  FileDirectoryInformation       = 1,
103  FileFullDirectoryInformation, // 2
104  FileBothDirectoryInformation, // 3
105  FileBasicInformation,         // 4  wdm
106  FileStandardInformation,      // 5  wdm
107  FileInternalInformation,      // 6
108  FileEaInformation,            // 7
109  FileAccessInformation,        // 8
110  FileNameInformation,          // 9
111  FileRenameInformation,        // 10
112  FileLinkInformation,          // 11
113  FileNamesInformation,         // 12
114  FileDispositionInformation,   // 13
115  FilePositionInformation,      // 14 wdm
116  FileFullEaInformation,        // 15
117  FileModeInformation,          // 16
118  FileAlignmentInformation,     // 17
119  FileAllInformation,           // 18
120  FileAllocationInformation,    // 19
121  FileEndOfFileInformation,     // 20 wdm
122  FileAlternateNameInformation, // 21
123  FileStreamInformation,        // 22
124  FilePipeInformation,          // 23
125  FilePipeLocalInformation,     // 24
126  FilePipeRemoteInformation,    // 25
127  FileMailslotQueryInformation, // 26
128  FileMailslotSetInformation,   // 27
129  FileCompressionInformation,   // 28
130  FileObjectIdInformation,      // 29
131  FileCompletionInformation,    // 30
132  FileMoveClusterInformation,   // 31
133  FileQuotaInformation,         // 32
134  FileReparsePointInformation,  // 33
135  FileNetworkOpenInformation,   // 34
136  FileAttributeTagInformation,  // 35
137  FileTrackingInformation,      // 36
138  FileMaximumInformation
139  // begin_wdm
140} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
141
142typedef enum _SYSTEM_INFORMATION_CLASS {
143  SystemHandleInformation = 16
144} SYSTEM_INFORMATION_CLASS;
145
146typedef struct _IO_STATUS_BLOCK {
147    union {
148        NTSTATUS Status;
149        PVOID Pointer;
150    };
151    ULONG_PTR Information;
152} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
153
154#define InitializeObjectAttributes( p, n, a, r, s ) { \
155    (p)->Length = sizeof( OBJECT_ATTRIBUTES ); \
156    (p)->RootDirectory = r; \
157    (p)->Attributes = a; \
158    (p)->ObjectName = n; \
159    (p)->SecurityDescriptor = s; \
160    (p)->SecurityQualityOfService = NULL; \
161}
162
163typedef struct _SYSTEM_HANDLE_INFORMATION {
164  USHORT ProcessId;
165  USHORT CreatorBackTraceIndex;
166  UCHAR ObjectTypeNumber;
167  UCHAR Flags;
168  USHORT Handle;
169  PVOID Object;
170  ACCESS_MASK GrantedAccess;
171} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
172
173typedef struct _SYSTEM_HANDLE_INFORMATION_EX {
174  ULONG NumberOfHandles;
175  SYSTEM_HANDLE_INFORMATION Information[1];
176} SYSTEM_HANDLE_INFORMATION_EX, *PSYSTEM_HANDLE_INFORMATION_EX;
177
178#define POBJECT_ATTRIBUTES OBJECT_ATTRIBUTES*
179
180typedef NTSTATUS (WINAPI* NTQUERYDIRECTORYOBJECT)(
181  HANDLE,
182  OBJDIR_INFORMATION*,
183  DWORD,
184  DWORD,
185  DWORD,
186  DWORD*,
187  DWORD*);
188
189typedef NTSTATUS (WINAPI* NTOPENDIRECTORYOBJECT)(
190  HANDLE *,
191  DWORD,
192  OBJECT_ATTRIBUTES* );
193
194typedef NTSTATUS (WINAPI* NTGENERICOPEN) (
195  OUT PHANDLE EventHandle,
196  IN ACCESS_MASK DesiredAccess,
197  IN POBJECT_ATTRIBUTES ObjectAttributes);
198
199typedef NTSTATUS (WINAPI* NTOPENEVENT)(
200  OUT PHANDLE EventHandle,
201  IN ACCESS_MASK DesiredAccess,
202  IN POBJECT_ATTRIBUTES ObjectAttributes);
203
204typedef NTSTATUS (WINAPI* NTOPENJOBOBJECT)(
205  OUT PHANDLE JobHandle,
206  IN ACCESS_MASK DesiredAccess,
207  IN POBJECT_ATTRIBUTES ObjectAttributes);
208
209typedef NTSTATUS (WINAPI* NTOPENKEYEDEVENT)(
210  OUT PHANDLE KeyedEventHandle,
211  IN ACCESS_MASK DesiredAccess,
212  IN POBJECT_ATTRIBUTES ObjectAttributes);
213
214typedef NTSTATUS (WINAPI* NTOPENMUTANT)(
215  OUT PHANDLE MutantHandle,
216  IN ACCESS_MASK DesiredAccess,
217  IN POBJECT_ATTRIBUTES ObjectAttributes);
218
219typedef NTSTATUS (WINAPI* NTOPENSECTION)(
220  OUT PHANDLE SectionHandle,
221  IN ACCESS_MASK DesiredAccess,
222  IN POBJECT_ATTRIBUTES ObjectAttributes);
223
224typedef NTSTATUS (WINAPI* NTOPENSEMAPHORE)(
225  OUT PHANDLE SemaphoreHandle,
226  IN ACCESS_MASK DesiredAccess,
227  IN POBJECT_ATTRIBUTES ObjectAttributes);
228
229typedef NTSTATUS (WINAPI* NTOPENSYMBOLICLINKOBJECT)(
230  OUT PHANDLE SymbolicLinkHandle,
231  IN ACCESS_MASK DesiredAccess,
232  IN POBJECT_ATTRIBUTES ObjectAttributes);
233
234typedef NTSTATUS (WINAPI* NTOPENTIMER)(
235  OUT PHANDLE TimerHandle,
236  IN ACCESS_MASK DesiredAccess,
237  IN POBJECT_ATTRIBUTES ObjectAttributes);
238
239typedef NTSTATUS (WINAPI* NTOPENFILE)(
240  HANDLE *,
241  DWORD,
242  OBJECT_ATTRIBUTES *,
243  IO_STATUS_BLOCK *,
244  DWORD,
245  DWORD);
246
247typedef NTSTATUS (WINAPI* NTQUERYINFORMATIONFILE)(
248  HANDLE,
249  PIO_STATUS_BLOCK,
250  PVOID,
251  ULONG,
252  FILE_INFORMATION_CLASS);
253
254typedef NTSTATUS (WINAPI* NTQUERYSYSTEMINFORMATION)(
255  SYSTEM_INFORMATION_CLASS SystemInformationClass,
256  PVOID SystemInformation,
257  ULONG SystemInformationLength,
258  PULONG ReturnLength);
259
260typedef NTSTATUS (WINAPI* NTQUERYOBJECT)(
261  HANDLE Handle,
262  OBJECT_INFORMATION_CLASS ObjectInformationClass,
263  PVOID ObjectInformation,
264  ULONG ObjectInformationLength,
265  PULONG ReturnLength);
266
267typedef NTSTATUS (WINAPI* NTCLOSE) (HANDLE);
268
269#define DIRECTORY_QUERY 0x0001
270#define DIRECTORY_TRAVERSE 0x0002
271#define DIRECTORY_CREATE_OBJECT 0x0004
272#define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
273#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
274
275#endif  // SANDBOX_TOOLS_FINDER_NTUNDOC_H__
276