]>
Commit | Line | Data |
---|---|---|
f5c1d231 | 1 | /* ntdll.h. Contains ntdll specific stuff not defined elsewhere. |
8c8d0db4 | 2 | |
165cb245 | 3 | Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, |
f9761297 | 4 | 2009, 2010, 2011 Red Hat, Inc. |
8c8d0db4 CV |
5 | |
6 | This file is part of Cygwin. | |
7 | ||
8 | This software is a copyrighted work licensed under the terms of the | |
9 | Cygwin license. Please consult the file "CYGWIN_LICENSE" for | |
10 | details. */ | |
11 | ||
cef5dfd7 CF |
12 | #ifndef _NTDLL_H |
13 | #define _NTDLL_H 1 | |
f4ad0404 | 14 | #define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS) 0x00000106) |
abbde487 CV |
15 | #define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS) 0x40000000) |
16 | #define STATUS_BUFFER_OVERFLOW ((NTSTATUS) 0x80000005) | |
17 | #define STATUS_NO_MORE_FILES ((NTSTATUS) 0x80000006) | |
a9e36321 CF |
18 | #ifndef STATUS_INVALID_INFO_CLASS |
19 | /* Some w32api header file defines this so we need to conditionalize this | |
20 | define to avoid warnings. */ | |
745c29fe | 21 | #define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xc0000003) |
a9e36321 | 22 | #endif |
3498f76d | 23 | #define STATUS_NOT_IMPLEMENTED ((NTSTATUS) 0xc0000002) |
745c29fe CV |
24 | #define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xc0000004) |
25 | #define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xc000000d) | |
a888c079 | 26 | #define STATUS_NO_SUCH_FILE ((NTSTATUS) 0xc000000f) |
745c29fe | 27 | #define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS) 0xc0000010) |
fc7290fd | 28 | #define STATUS_END_OF_FILE ((NTSTATUS) 0xc0000011) |
d3dd7d36 | 29 | #define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS) 0xc0000013) |
8884a168 | 30 | #define STATUS_ACCESS_DENIED ((NTSTATUS) 0xc0000022) |
745c29fe | 31 | #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xc0000023) |
43f65cdd | 32 | #define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS) 0xc0000024) |
1ceec140 | 33 | #define STATUS_OBJECT_NAME_INVALID ((NTSTATUS) 0xc0000033) |
d3dd7d36 | 34 | #define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS) 0xc0000034) |
61c44b72 | 35 | #define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS) 0xc000003A) |
745c29fe | 36 | #define STATUS_SHARING_VIOLATION ((NTSTATUS) 0xc0000043) |
f4ad0404 | 37 | #define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS) 0xc000004f) |
50450dcc CV |
38 | #define STATUS_EA_TOO_LARGE ((NTSTATUS) 0xc0000050) |
39 | #define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS) 0xc0000051) | |
40 | #define STATUS_NO_EAS_ON_FILE ((NTSTATUS) 0xc0000052) | |
03897d8d | 41 | #define STATUS_LOCK_NOT_GRANTED ((NTSTATUS) 0xc0000055) |
745c29fe | 42 | #define STATUS_DELETE_PENDING ((NTSTATUS) 0xc0000056) |
40afcae3 | 43 | #define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS) 0xc000007a) |
6ce2c241 | 44 | #define STATUS_DISK_FULL ((NTSTATUS) 0xc000007f) |
745c29fe | 45 | #define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xc00000a1) |
43f65cdd CV |
46 | #define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS) 0xc00000ab) |
47 | #define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS) 0xc00000ac) | |
48 | #define STATUS_INVALID_PIPE_STATE ((NTSTATUS) 0xc00000ad) | |
49 | #define STATUS_PIPE_BUSY ((NTSTATUS) 0xc00000ae) | |
4368984a | 50 | #define STATUS_NOT_SUPPORTED ((NTSTATUS) 0xc00000bb) |
fad9568b | 51 | #define STATUS_BAD_NETWORK_PATH ((NTSTATUS) 0xc00000be) |
3432d6f1 | 52 | #define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS) 0xc00000c3) |
fad9568b | 53 | #define STATUS_BAD_NETWORK_NAME ((NTSTATUS) 0xc00000cc) |
ed7ec849 | 54 | #define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS) 0xc0000101) |
f4ad0404 | 55 | #define STATUS_CANNOT_DELETE ((NTSTATUS) 0xc0000121) |
745c29fe | 56 | #define STATUS_INVALID_LEVEL ((NTSTATUS) 0xc0000148) |
abbde487 CV |
57 | #define STATUS_DLL_NOT_FOUND ((NTSTATUS) 0xc0000135) |
58 | #define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xc0000139) | |
59 | #define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS) 0xc0000251) | |
60 | #define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS) 0xc0000269) | |
dc4e4aab CW |
61 | /* custom status code: */ |
62 | #define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269) | |
93d606f6 | 63 | |
9ba913a5 CF |
64 | #define PDI_MODULES 0x01 |
65 | #define PDI_HEAPS 0x04 | |
66 | #define LDRP_IMAGE_DLL 0x00000004 | |
67 | #define WSLE_PAGE_READONLY 0x001 | |
68 | #define WSLE_PAGE_EXECUTE 0x002 | |
69 | #define WSLE_PAGE_EXECUTE_READ 0x003 | |
70 | #define WSLE_PAGE_READWRITE 0x004 | |
71 | #define WSLE_PAGE_WRITECOPY 0x005 | |
72 | #define WSLE_PAGE_EXECUTE_READWRITE 0x006 | |
73 | #define WSLE_PAGE_EXECUTE_WRITECOPY 0x007 | |
74 | #define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0 | |
75 | #define WSLE_PAGE_SHAREABLE 0x100 | |
76 | ||
61c44b72 CV |
77 | #define FILE_SUPERSEDED 0 |
78 | #define FILE_OPENED 1 | |
79 | #define FILE_CREATED 2 | |
80 | #define FILE_OVERWRITTEN 3 | |
81 | #define FILE_EXISTS 4 | |
82 | #define FILE_DOES_NOT_EXIST 5 | |
83 | ||
6ce2c241 CV |
84 | #define FILE_WRITE_TO_END_OF_FILE (-1LL) |
85 | #define FILE_USE_FILE_POINTER_POSITION (-2LL) | |
86 | ||
d3dd7d36 CV |
87 | /* Device Characteristics. */ |
88 | #define FILE_REMOVABLE_MEDIA 0x00000001 | |
89 | #define FILE_READ_ONLY_DEVICE 0x00000002 | |
90 | #define FILE_FLOPPY_DISKETTE 0x00000004 | |
91 | #define FILE_WRITE_ONCE_MEDIA 0x00000008 | |
92 | #define FILE_REMOTE_DEVICE 0x00000010 | |
93 | #define FILE_DEVICE_IS_MOUNTED 0x00000020 | |
94 | #define FILE_VIRTUAL_VOLUME 0x00000040 | |
95 | #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 | |
96 | #define FILE_DEVICE_SECURE_OPEN 0x00000100 | |
97 | ||
4c153b24 CV |
98 | /* Transaction access rights. */ |
99 | #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x3F) | |
100 | ||
742e27be CF |
101 | typedef enum _FILE_INFORMATION_CLASS |
102 | { | |
103 | FileDirectoryInformation = 1, | |
104 | FileFullDirectoryInformation, // 2 | |
105 | FileBothDirectoryInformation, // 3 | |
106 | FileBasicInformation, // 4 wdm | |
107 | FileStandardInformation, // 5 wdm | |
108 | FileInternalInformation, // 6 | |
109 | FileEaInformation, // 7 | |
110 | FileAccessInformation, // 8 | |
111 | FileNameInformation, // 9 | |
112 | FileRenameInformation, // 10 | |
113 | FileLinkInformation, // 11 | |
114 | FileNamesInformation, // 12 | |
115 | FileDispositionInformation, // 13 | |
116 | FilePositionInformation, // 14 wdm | |
117 | FileFullEaInformation, // 15 | |
118 | FileModeInformation, // 16 | |
119 | FileAlignmentInformation, // 17 | |
120 | FileAllInformation, // 18 | |
121 | FileAllocationInformation, // 19 | |
122 | FileEndOfFileInformation, // 20 wdm | |
123 | FileAlternateNameInformation, // 21 | |
124 | FileStreamInformation, // 22 | |
125 | FilePipeInformation, // 23 | |
126 | FilePipeLocalInformation, // 24 | |
127 | FilePipeRemoteInformation, // 25 | |
128 | FileMailslotQueryInformation, // 26 | |
129 | FileMailslotSetInformation, // 27 | |
130 | FileCompressionInformation, // 28 | |
131 | FileObjectIdInformation, // 29 | |
132 | FileCompletionInformation, // 30 | |
133 | FileMoveClusterInformation, // 31 | |
134 | FileQuotaInformation, // 32 | |
135 | FileReparsePointInformation, // 33 | |
136 | FileNetworkOpenInformation, // 34 | |
137 | FileAttributeTagInformation, // 35 | |
138 | FileTrackingInformation, // 36 | |
139 | FileIdBothDirectoryInformation, // 37 | |
140 | FileIdFullDirectoryInformation, // 38 | |
141 | FileValidDataLengthInformation, // 39 | |
142 | FileShortNameInformation, // 40 | |
143 | FileMaximumInformation | |
144 | } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; | |
145 | ||
788e7da1 CV |
146 | typedef struct _FILE_NAMES_INFORMATION |
147 | { | |
148 | ULONG NextEntryOffset; | |
149 | ULONG FileIndex; | |
150 | ULONG FileNameLength; | |
151 | WCHAR FileName[1]; | |
152 | } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION; | |
153 | ||
214c3a11 CV |
154 | typedef struct _FILE_DIRECTORY_INFORMATION { |
155 | ULONG NextEntryOffset; | |
156 | ULONG FileIndex; | |
157 | LARGE_INTEGER CreationTime; | |
158 | LARGE_INTEGER LastAccessTime; | |
159 | LARGE_INTEGER LastWriteTime; | |
160 | LARGE_INTEGER ChangeTime; | |
161 | LARGE_INTEGER EndOfFile; | |
162 | LARGE_INTEGER AllocationSize; | |
163 | ULONG FileAttributes; | |
164 | ULONG FileNameLength; | |
165 | WCHAR FileName[1]; | |
166 | } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; | |
167 | ||
3432d6f1 | 168 | typedef struct _FILE_BOTH_DIRECTORY_INFORMATION |
742e27be CF |
169 | { |
170 | ULONG NextEntryOffset; | |
171 | ULONG FileIndex; | |
172 | LARGE_INTEGER CreationTime; | |
173 | LARGE_INTEGER LastAccessTime; | |
174 | LARGE_INTEGER LastWriteTime; | |
175 | LARGE_INTEGER ChangeTime; | |
176 | LARGE_INTEGER EndOfFile; | |
177 | LARGE_INTEGER AllocationSize; | |
178 | ULONG FileAttributes; | |
179 | ULONG FileNameLength; | |
180 | ULONG EaSize; | |
181 | CCHAR ShortNameLength; | |
182 | WCHAR ShortName[12]; | |
183 | WCHAR FileName[1]; | |
3432d6f1 | 184 | } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION; |
742e27be CF |
185 | |
186 | typedef struct _FILE_ID_BOTH_DIR_INFORMATION | |
187 | { | |
188 | ULONG NextEntryOffset; | |
189 | ULONG FileIndex; | |
190 | LARGE_INTEGER CreationTime; | |
191 | LARGE_INTEGER LastAccessTime; | |
192 | LARGE_INTEGER LastWriteTime; | |
193 | LARGE_INTEGER ChangeTime; | |
194 | LARGE_INTEGER EndOfFile; | |
195 | LARGE_INTEGER AllocationSize; | |
196 | ULONG FileAttributes; | |
197 | ULONG FileNameLength; | |
198 | ULONG EaSize; | |
199 | CCHAR ShortNameLength; | |
200 | WCHAR ShortName[12]; | |
201 | LARGE_INTEGER FileId; | |
202 | WCHAR FileName[1]; | |
203 | } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION; | |
204 | ||
205 | ||
f90e23f2 | 206 | #define AT_EXTENDABLE_FILE 0x00002000 |
5a101414 | 207 | #define AT_ROUND_TO_PAGE 0x40000000 |
6d11044c | 208 | |
1f5c3042 CV |
209 | #define LOCK_VM_IN_WSL 1 |
210 | #define LOCK_VM_IN_RAM 2 | |
211 | ||
e9c8cb31 | 212 | #define DIRECTORY_QUERY 1 |
c46d7be9 CV |
213 | #define DIRECTORY_TRAVERSE 2 |
214 | #define DIRECTORY_CREATE_OBJECT 4 | |
215 | #define DIRECTORY_CREATE_SUBDIRECTORY 8 | |
a998dd70 | 216 | #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x0f) |
e9c8cb31 | 217 | |
43f65cdd CV |
218 | #define SYMBOLIC_LINK_QUERY 1 |
219 | ||
c46d7be9 | 220 | #define EVENT_QUERY_STATE 1 |
abbde487 CV |
221 | #define SEMAPHORE_QUERY_STATE 1 |
222 | ||
223 | /* Specific ACCESS_MASKSs for objects created in Cygwin. */ | |
224 | #define CYG_SHARED_DIR_ACCESS (DIRECTORY_QUERY \ | |
025c1fac CF |
225 | | DIRECTORY_TRAVERSE \ |
226 | | DIRECTORY_CREATE_SUBDIRECTORY \ | |
227 | | DIRECTORY_CREATE_OBJECT \ | |
228 | | READ_CONTROL) | |
abbde487 CV |
229 | |
230 | #define CYG_MUTANT_ACCESS (MUTANT_QUERY_STATE \ | |
231 | | SYNCHRONIZE \ | |
232 | | READ_CONTROL) | |
233 | ||
234 | #define CYG_EVENT_ACCESS (EVENT_QUERY_STATE \ | |
235 | | EVENT_MODIFY_STATE \ | |
236 | | SYNCHRONIZE \ | |
237 | | READ_CONTROL) | |
238 | ||
239 | #define CYG_SEMAPHORE_ACCESS (SEMAPHORE_QUERY_STATE \ | |
240 | | SEMAPHORE_MODIFY_STATE \ | |
241 | | SYNCHRONIZE \ | |
242 | | READ_CONTROL) | |
c46d7be9 | 243 | |
9ba913a5 | 244 | typedef ULONG KAFFINITY; |
6d87f7d7 CF |
245 | |
246 | typedef enum _SYSTEM_INFORMATION_CLASS | |
247 | { | |
248 | SystemBasicInformation = 0, | |
9ba913a5 CF |
249 | SystemPerformanceInformation = 2, |
250 | SystemTimeOfDayInformation = 3, | |
6d87f7d7 | 251 | SystemProcessesAndThreadsInformation = 5, |
9ba913a5 | 252 | SystemProcessorTimes = 8, |
891d1990 | 253 | SystemPagefileInformation = 18, |
6d87f7d7 | 254 | /* There are a lot more of these... */ |
8c8d0db4 CV |
255 | } SYSTEM_INFORMATION_CLASS; |
256 | ||
6d87f7d7 CF |
257 | typedef struct _SYSTEM_BASIC_INFORMATION |
258 | { | |
8c8d0db4 CV |
259 | ULONG Unknown; |
260 | ULONG MaximumIncrement; | |
261 | ULONG PhysicalPageSize; | |
262 | ULONG NumberOfPhysicalPages; | |
263 | ULONG LowestPhysicalPage; | |
264 | ULONG HighestPhysicalPage; | |
265 | ULONG AllocationGranularity; | |
266 | ULONG LowestUserAddress; | |
267 | ULONG HighestUserAddress; | |
268 | ULONG ActiveProcessors; | |
9ba913a5 | 269 | UCHAR NumberProcessors; |
8c8d0db4 CV |
270 | } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; |
271 | ||
891d1990 CV |
272 | typedef struct _SYSTEM_PAGEFILE_INFORMATION |
273 | { | |
274 | ULONG NextEntryOffset; | |
275 | ULONG CurrentSize; | |
276 | ULONG TotalUsed; | |
277 | ULONG PeakUsed; | |
278 | UNICODE_STRING FileName; | |
279 | } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION; | |
280 | ||
91a2f87b | 281 | typedef struct __attribute__ ((aligned (8))) _SYSTEM_PROCESSOR_TIMES |
9ba913a5 CF |
282 | { |
283 | LARGE_INTEGER IdleTime; | |
284 | LARGE_INTEGER KernelTime; | |
285 | LARGE_INTEGER UserTime; | |
286 | LARGE_INTEGER DpcTime; | |
287 | LARGE_INTEGER InterruptTime; | |
288 | ULONG InterruptCount; | |
289 | } SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES; | |
290 | ||
6d87f7d7 CF |
291 | typedef LONG KPRIORITY; |
292 | typedef struct _VM_COUNTERS | |
293 | { | |
294 | ULONG PeakVirtualSize; | |
295 | ULONG VirtualSize; | |
296 | ULONG PageFaultCount; | |
297 | ULONG PeakWorkingSetSize; | |
298 | ULONG WorkingSetSize; | |
299 | ULONG QuotaPeakPagedPoolUsage; | |
300 | ULONG QuotaPagedPoolUsage; | |
301 | ULONG QuotaPeakNonPagedPoolUsage; | |
302 | ULONG QuotaNonPagedPoolUsage; | |
303 | ULONG PagefileUsage; | |
304 | ULONG PeakPagefileUsage; | |
305 | } VM_COUNTERS, *PVM_COUNTERS; | |
306 | ||
6d87f7d7 CF |
307 | typedef struct _CLIENT_ID |
308 | { | |
309 | HANDLE UniqueProcess; | |
310 | HANDLE UniqueThread; | |
311 | } CLIENT_ID, *PCLIENT_ID; | |
312 | ||
313 | typedef enum | |
314 | { | |
315 | StateInitialized, | |
316 | StateReady, | |
317 | StateRunning, | |
318 | StateStandby, | |
319 | StateTerminated, | |
320 | StateWait, | |
321 | StateTransition, | |
322 | StateUnknown, | |
323 | } THREAD_STATE; | |
8c8d0db4 | 324 | |
6d87f7d7 CF |
325 | typedef enum |
326 | { | |
327 | Executive, | |
328 | FreePage, | |
329 | PageIn, | |
330 | PoolAllocation, | |
331 | DelayExecution, | |
332 | Suspended, | |
333 | UserRequest, | |
334 | WrExecutive, | |
335 | WrFreePage, | |
336 | WrPageIn, | |
337 | WrPoolAllocation, | |
338 | WrDelayExecution, | |
339 | WrSuspended, | |
340 | WrUserRequest, | |
341 | WrEventPair, | |
342 | WrQueue, | |
343 | WrLpcReceive, | |
344 | WrLpcReply, | |
345 | WrVirtualMemory, | |
346 | WrPageOut, | |
347 | WrRendezvous, | |
348 | Spare2, | |
349 | Spare3, | |
350 | Spare4, | |
351 | Spare5, | |
352 | Spare6, | |
353 | WrKernel, | |
354 | MaximumWaitReason | |
355 | } KWAIT_REASON; | |
356 | ||
357 | typedef struct _SYSTEM_THREADS | |
358 | { | |
359 | LARGE_INTEGER KernelTime; | |
360 | LARGE_INTEGER UserTime; | |
361 | LARGE_INTEGER CreateTime; | |
362 | ULONG WaitTime; | |
363 | PVOID StartAddress; | |
364 | CLIENT_ID ClientId; | |
365 | KPRIORITY Priority; | |
366 | KPRIORITY BasePriority; | |
367 | ULONG ContextSwitchCount; | |
368 | THREAD_STATE State; | |
369 | KWAIT_REASON WaitReason; | |
9ba913a5 | 370 | DWORD Reserved; |
6d87f7d7 CF |
371 | } SYSTEM_THREADS, *PSYSTEM_THREADS; |
372 | ||
373 | typedef struct _SYSTEM_PROCESSES | |
374 | { | |
375 | ULONG NextEntryDelta; | |
9ba913a5 | 376 | ULONG ThreadCount; |
6d87f7d7 CF |
377 | ULONG Reserved1[6]; |
378 | LARGE_INTEGER CreateTime; | |
379 | LARGE_INTEGER UserTime; | |
380 | LARGE_INTEGER KernelTime; | |
381 | UNICODE_STRING ProcessName; | |
382 | KPRIORITY BasePriority; | |
383 | ULONG ProcessId; | |
384 | ULONG InheritedFromProcessId; | |
385 | ULONG HandleCount; | |
386 | ULONG Reserved2[2]; | |
387 | VM_COUNTERS VmCounters; | |
388 | IO_COUNTERS IoCounters; | |
389 | SYSTEM_THREADS Threads[1]; | |
390 | } SYSTEM_PROCESSES, *PSYSTEM_PROCESSES; | |
391 | ||
99069065 CV |
392 | typedef struct _IO_STATUS_BLOCK |
393 | { | |
394 | NTSTATUS Status; | |
395 | ULONG Information; | |
396 | } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; | |
397 | ||
9ba913a5 CF |
398 | typedef struct _SYSTEM_PERFORMANCE_INFORMATION |
399 | { | |
400 | LARGE_INTEGER IdleTime; | |
401 | LARGE_INTEGER ReadTransferCount; | |
402 | LARGE_INTEGER WriteTransferCount; | |
403 | LARGE_INTEGER OtherTransferCount; | |
404 | ULONG ReadOperationCount; | |
405 | ULONG WriteOperationCount; | |
406 | ULONG OtherOperationCount; | |
407 | ULONG AvailablePages; | |
408 | ULONG TotalCommittedPages; | |
409 | ULONG TotalCommitLimit; | |
410 | ULONG PeakCommitment; | |
411 | ULONG PageFaults; | |
412 | ULONG WriteCopyFaults; | |
413 | ULONG TransitionFaults; | |
414 | ULONG Reserved1; | |
415 | ULONG DemandZeroFaults; | |
416 | ULONG PagesRead; | |
417 | ULONG PageReadIos; | |
418 | ULONG Reserved2[2]; | |
419 | ULONG PagefilePagesWritten; | |
420 | ULONG PagefilePageWriteIos; | |
421 | ULONG MappedFilePagesWritten; | |
422 | ULONG MappedFilePageWriteIos; | |
423 | ULONG PagedPoolUsage; | |
424 | ULONG NonPagedPoolUsage; | |
425 | ULONG PagedPoolAllocs; | |
426 | ULONG PagedPoolFrees; | |
427 | ULONG NonPagedPoolAllocs; | |
428 | ULONG NonPagedPoolFrees; | |
429 | ULONG TotalFreeSystemPtes; | |
430 | ULONG SystemCodePage; | |
431 | ULONG TotalSystemDriverPages; | |
432 | ULONG TotalSystemCodePages; | |
433 | ULONG SmallNonPagedLookasideListAllocateHits; | |
434 | ULONG SmallPagedLookasideListAllocateHits; | |
435 | ULONG Reserved3; | |
436 | ULONG MmSystemCachePage; | |
437 | ULONG PagedPoolPage; | |
438 | ULONG SystemDriverPage; | |
439 | ULONG FastReadNoWait; | |
440 | ULONG FastReadWait; | |
441 | ULONG FastReadResourceMiss; | |
442 | ULONG FastReadNotPossible; | |
443 | ULONG FastMdlReadNoWait; | |
444 | ULONG FastMdlReadWait; | |
445 | ULONG FastMdlReadResourceMiss; | |
446 | ULONG FastMdlReadNotPossible; | |
447 | ULONG MapDataNoWait; | |
448 | ULONG MapDataWait; | |
449 | ULONG MapDataNoWaitMiss; | |
450 | ULONG MapDataWaitMiss; | |
451 | ULONG PinMappedDataCount; | |
452 | ULONG PinReadNoWait; | |
453 | ULONG PinReadWait; | |
454 | ULONG PinReadNoWaitMiss; | |
455 | ULONG PinReadWaitMiss; | |
456 | ULONG CopyReadNoWait; | |
457 | ULONG CopyReadWait; | |
458 | ULONG CopyReadNoWaitMiss; | |
459 | ULONG CopyReadWaitMiss; | |
460 | ULONG MdlReadNoWait; | |
461 | ULONG MdlReadWait; | |
462 | ULONG MdlReadNoWaitMiss; | |
463 | ULONG MdlReadWaitMiss; | |
464 | ULONG ReadAheadIos; | |
465 | ULONG LazyWriteIos; | |
466 | ULONG LazyWritePages; | |
467 | ULONG DataFlushes; | |
468 | ULONG DataPages; | |
469 | ULONG ContextSwitches; | |
470 | ULONG FirstLevelTbFills; | |
471 | ULONG SecondLevelTbFills; | |
472 | ULONG SystemCalls; | |
473 | } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION; | |
474 | ||
91a2f87b | 475 | typedef struct __attribute__ ((aligned(8))) _SYSTEM_TIME_OF_DAY_INFORMATION |
9ba913a5 CF |
476 | { |
477 | LARGE_INTEGER BootTime; | |
478 | LARGE_INTEGER CurrentTime; | |
479 | LARGE_INTEGER TimeZoneBias; | |
480 | ULONG CurrentTimeZoneId; | |
481 | } SYSTEM_TIME_OF_DAY_INFORMATION, *PSYSTEM_TIME_OF_DAY_INFORMATION; | |
482 | ||
483 | typedef enum _PROCESSINFOCLASS | |
484 | { | |
485 | ProcessBasicInformation = 0, | |
486 | ProcessQuotaLimits = 1, | |
487 | ProcessVmCounters = 3, | |
abbde487 CV |
488 | ProcessTimes = 4, |
489 | ProcessSessionInformation = 24, | |
4a42a258 | 490 | ProcessWow64Information = 26 |
9ba913a5 CF |
491 | } PROCESSINFOCLASS; |
492 | ||
493 | typedef struct _DEBUG_BUFFER | |
494 | { | |
495 | HANDLE SectionHandle; | |
496 | PVOID SectionBase; | |
497 | PVOID RemoteSectionBase; | |
498 | ULONG SectionBaseDelta; | |
499 | HANDLE EventPairHandle; | |
500 | ULONG Unknown[2]; | |
501 | HANDLE RemoteThreadHandle; | |
502 | ULONG InfoClassMask; | |
503 | ULONG SizeOfInfo; | |
504 | ULONG AllocatedSize; | |
505 | ULONG SectionSize; | |
506 | PVOID ModuleInformation; | |
507 | PVOID BackTraceInformation; | |
508 | PVOID HeapInformation; | |
509 | PVOID LockInformation; | |
510 | PVOID Reserved[9]; | |
511 | } DEBUG_BUFFER, *PDEBUG_BUFFER; | |
512 | ||
513 | typedef struct _DEBUG_HEAP_INFORMATION | |
514 | { | |
515 | ULONG Base; | |
516 | ULONG Flags; | |
517 | USHORT Granularity; | |
518 | USHORT Unknown; | |
519 | ULONG Allocated; | |
520 | ULONG Committed; | |
521 | ULONG TagCount; | |
522 | ULONG BlockCount; | |
523 | ULONG Reserved[7]; | |
524 | PVOID Tags; | |
525 | PVOID Blocks; | |
526 | } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION; | |
527 | ||
528 | typedef struct _DEBUG_MODULE_INFORMATION | |
529 | { | |
530 | ULONG Reserved[2]; | |
531 | ULONG Base; | |
532 | ULONG Size; | |
533 | ULONG Flags; | |
534 | USHORT Index; | |
535 | USHORT Unknown; | |
536 | USHORT LoadCount; | |
537 | USHORT ModuleNameOffset; | |
538 | CHAR ImageName[256]; | |
539 | } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION; | |
540 | ||
541 | typedef struct _KERNEL_USER_TIMES | |
542 | { | |
543 | LARGE_INTEGER CreateTime; | |
544 | LARGE_INTEGER ExitTime; | |
545 | LARGE_INTEGER KernelTime; | |
546 | LARGE_INTEGER UserTime; | |
547 | } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; | |
548 | ||
cbe2437b CV |
549 | typedef struct _RTL_USER_PROCESS_PARAMETERS |
550 | { | |
551 | ULONG AllocationSize; | |
552 | ULONG Size; | |
553 | ULONG Flags; | |
554 | ULONG DebugFlags; | |
555 | HANDLE hConsole; | |
556 | ULONG ProcessGroup; | |
557 | HANDLE hStdInput; | |
558 | HANDLE hStdOutput; | |
559 | HANDLE hStdError; | |
560 | UNICODE_STRING CurrentDirectoryName; | |
561 | HANDLE CurrentDirectoryHandle; | |
562 | UNICODE_STRING DllPath; | |
563 | UNICODE_STRING ImagePathName; | |
564 | UNICODE_STRING CommandLine; | |
565 | PWSTR Environment; | |
566 | ULONG dwX; | |
567 | ULONG dwY; | |
568 | ULONG dwXSize; | |
569 | ULONG dwYSize; | |
570 | ULONG dwXCountChars; | |
571 | ULONG dwYCountChars; | |
572 | ULONG dwFillAttribute; | |
573 | ULONG dwFlags; | |
574 | ULONG wShowWindow; | |
575 | UNICODE_STRING WindowTitle; | |
576 | UNICODE_STRING DesktopInfo; | |
577 | UNICODE_STRING ShellInfo; | |
578 | UNICODE_STRING RuntimeInfo; | |
579 | } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS; | |
580 | ||
581 | typedef struct _PEB | |
582 | { | |
583 | BYTE Reserved1[2]; | |
584 | BYTE BeingDebugged; | |
585 | BYTE Reserved2[9]; | |
586 | PVOID LoaderData; | |
587 | PRTL_USER_PROCESS_PARAMETERS ProcessParameters; | |
9c154abe CV |
588 | BYTE Reserved3[4]; |
589 | PVOID ProcessHeap; | |
590 | PRTL_CRITICAL_SECTION FastPebLock; | |
591 | BYTE Reserved4[436]; | |
cbe2437b CV |
592 | ULONG SessionId; |
593 | } PEB, *PPEB; | |
9ba913a5 | 594 | |
09ecdc85 CV |
595 | /* Simplifed definition, just to get the PEB pointer. */ |
596 | typedef struct _TEB | |
597 | { | |
598 | PVOID dummy[12]; | |
599 | PPEB Peb; | |
600 | /* A lot more follows... */ | |
601 | } TEB, *PTEB; | |
602 | ||
cd506492 CV |
603 | typedef struct _KSYSTEM_TIME |
604 | { | |
605 | ULONG LowPart; | |
606 | LONG High1Time; | |
607 | LONG High2Time; | |
608 | } KSYSTEM_TIME, *PKSYSTEM_TIME; | |
609 | ||
9c154abe CV |
610 | typedef struct _KUSER_SHARED_DATA |
611 | { | |
cd506492 CV |
612 | BYTE Reserved1[0x08]; |
613 | KSYSTEM_TIME InterruptTime; | |
614 | BYTE Reserved2[0x2c8]; | |
9c154abe CV |
615 | ULONG DismountCount; |
616 | /* A lot more follows... */ | |
617 | } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA; | |
618 | ||
9ba913a5 CF |
619 | typedef struct _PROCESS_BASIC_INFORMATION |
620 | { | |
621 | NTSTATUS ExitStatus; | |
622 | PPEB PebBaseAddress; | |
623 | KAFFINITY AffinityMask; | |
624 | KPRIORITY BasePriority; | |
625 | ULONG UniqueProcessId; | |
626 | ULONG InheritedFromUniqueProcessId; | |
627 | } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION; | |
628 | ||
abbde487 CV |
629 | typedef struct _PROCESS_SESSION_INFORMATION |
630 | { | |
631 | ULONG SessionId; | |
632 | } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION; | |
633 | ||
9ba913a5 CF |
634 | typedef enum _MEMORY_INFORMATION_CLASS |
635 | { | |
636 | MemoryBasicInformation, | |
637 | MemoryWorkingSetList, | |
638 | MemorySectionName, | |
9f0d3f37 | 639 | MemoryBasicVlmInformation |
9ba913a5 CF |
640 | } MEMORY_INFORMATION_CLASS; |
641 | ||
2402700d CF |
642 | typedef struct _MEMORY_WORKING_SET_LIST |
643 | { | |
9ba913a5 CF |
644 | ULONG NumberOfPages; |
645 | ULONG WorkingSetList[1]; | |
646 | } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST; | |
647 | ||
2a24463d CV |
648 | typedef struct _FILE_BASIC_INFORMATION { |
649 | LARGE_INTEGER CreationTime; | |
650 | LARGE_INTEGER LastAccessTime; | |
651 | LARGE_INTEGER LastWriteTime; | |
652 | LARGE_INTEGER ChangeTime; | |
653 | ULONG FileAttributes; | |
654 | } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; | |
655 | ||
656 | typedef struct _FILE_STANDARD_INFORMATION { | |
657 | LARGE_INTEGER AllocationSize; | |
658 | LARGE_INTEGER EndOfFile; | |
659 | ULONG NumberOfLinks; | |
660 | BOOLEAN DeletePending; | |
661 | BOOLEAN Directory; | |
662 | } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; | |
663 | ||
e25b3402 CV |
664 | typedef struct _FILE_NETWORK_OPEN_INFORMATION { |
665 | LARGE_INTEGER CreationTime; | |
666 | LARGE_INTEGER LastAccessTime; | |
667 | LARGE_INTEGER LastWriteTime; | |
668 | LARGE_INTEGER ChangeTime; | |
669 | LARGE_INTEGER AllocationSize; | |
670 | LARGE_INTEGER EndOfFile; | |
671 | ULONG FileAttributes; | |
672 | } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; | |
673 | ||
2a24463d | 674 | typedef struct _FILE_INTERNAL_INFORMATION { |
9e5f45ed | 675 | LARGE_INTEGER FileId; |
2a24463d CV |
676 | } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; |
677 | ||
678 | typedef struct _FILE_EA_INFORMATION { | |
679 | ULONG EaSize; | |
680 | } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; | |
681 | ||
682 | typedef struct _FILE_ACCESS_INFORMATION { | |
683 | ACCESS_MASK AccessFlags; | |
684 | } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; | |
685 | ||
1c9b2968 CV |
686 | typedef struct _FILE_DISPOSITION_INFORMATION { |
687 | BOOLEAN DeleteFile; | |
688 | } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; | |
689 | ||
05726ddd CF |
690 | typedef struct _FILE_POSITION_INFORMATION { |
691 | LARGE_INTEGER CurrentByteOffset; | |
692 | } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; | |
2a24463d | 693 | |
7636b585 CV |
694 | typedef struct _FILE_END_OF_FILE_INFORMATION { |
695 | LARGE_INTEGER EndOfFile; | |
696 | } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; | |
697 | ||
2a24463d CV |
698 | typedef struct _FILE_MODE_INFORMATION { |
699 | ULONG Mode; | |
700 | } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; | |
701 | ||
702 | typedef struct _FILE_ALIGNMENT_INFORMATION { | |
703 | ULONG AlignmentRequirement; | |
704 | } FILE_ALIGNMENT_INFORMATION; | |
705 | ||
05726ddd CF |
706 | typedef struct _FILE_NAME_INFORMATION { |
707 | ULONG FileNameLength; | |
708 | WCHAR FileName[1]; | |
709 | } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; | |
2a24463d | 710 | |
745c29fe CV |
711 | typedef struct _FILE_LINK_INFORMATION { |
712 | BOOLEAN ReplaceIfExists; | |
713 | HANDLE RootDirectory; | |
714 | ULONG FileNameLength; | |
715 | WCHAR FileName[1]; | |
716 | } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; | |
717 | ||
cbfb7b1b CV |
718 | typedef struct _FILE_RENAME_INFORMATION { |
719 | BOOLEAN ReplaceIfExists; | |
720 | HANDLE RootDirectory; | |
721 | ULONG FileNameLength; | |
722 | WCHAR FileName[1]; | |
723 | } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; | |
724 | ||
2a24463d CV |
725 | typedef struct _FILE_ALL_INFORMATION { |
726 | FILE_BASIC_INFORMATION BasicInformation; | |
727 | FILE_STANDARD_INFORMATION StandardInformation; | |
728 | FILE_INTERNAL_INFORMATION InternalInformation; | |
729 | FILE_EA_INFORMATION EaInformation; | |
730 | FILE_ACCESS_INFORMATION AccessInformation; | |
731 | FILE_POSITION_INFORMATION PositionInformation; | |
732 | FILE_MODE_INFORMATION ModeInformation; | |
733 | FILE_ALIGNMENT_INFORMATION AlignmentInformation; | |
734 | FILE_NAME_INFORMATION NameInformation; | |
735 | } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; | |
2402700d | 736 | |
6644c628 CF |
737 | typedef struct _FILE_PIPE_LOCAL_INFORMATION |
738 | { | |
739 | ULONG NamedPipeType; | |
740 | ULONG NamedPipeConfiguration; | |
741 | ULONG MaximumInstances; | |
742 | ULONG CurrentInstances; | |
743 | ULONG InboundQuota; | |
744 | ULONG ReadDataAvailable; | |
745 | ULONG OutboundQuota; | |
746 | ULONG WriteQuotaAvailable; | |
747 | ULONG NamedPipeState; | |
748 | ULONG NamedPipeEnd; | |
749 | } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; | |
750 | ||
b8eac1de CV |
751 | typedef struct _FILE_COMPRESSION_INFORMATION |
752 | { | |
b75971ef | 753 | LARGE_INTEGER CompressedFileSize; |
b8eac1de CV |
754 | USHORT CompressionFormat; |
755 | UCHAR CompressionUnitShift; | |
b75971ef CV |
756 | UCHAR ChunkShift; |
757 | UCHAR ClusterShift; | |
758 | UCHAR Reserved[3]; | |
b8eac1de CV |
759 | } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION; |
760 | ||
d3dd7d36 CV |
761 | typedef struct _FILE_FS_DEVICE_INFORMATION |
762 | { | |
763 | ULONG DeviceType; | |
764 | ULONG Characteristics; | |
765 | } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; | |
766 | ||
3323df7e CV |
767 | typedef struct _FILE_FS_ATTRIBUTE_INFORMATION |
768 | { | |
769 | ULONG FileSystemAttributes; | |
770 | ULONG MaximumComponentNameLength; | |
771 | ULONG FileSystemNameLength; | |
772 | WCHAR FileSystemName[1]; | |
773 | } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; | |
774 | ||
f65c5a0a | 775 | #pragma pack(push,4) |
2a24463d CV |
776 | typedef struct _FILE_FS_VOLUME_INFORMATION |
777 | { | |
778 | LARGE_INTEGER VolumeCreationTime; | |
779 | ULONG VolumeSerialNumber; | |
780 | ULONG VolumeLabelLength; | |
781 | BOOLEAN SupportsObjects; | |
f65c5a0a | 782 | BOOLEAN __dummy; |
2a24463d CV |
783 | WCHAR VolumeLabel[1]; |
784 | } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; | |
f65c5a0a | 785 | #pragma pack(pop) |
2a24463d | 786 | |
3ff1a063 | 787 | typedef struct _FILE_FS_SIZE_INFORMATION |
2a24463d | 788 | { |
3ff1a063 CV |
789 | LARGE_INTEGER TotalAllocationUnits; |
790 | LARGE_INTEGER AvailableAllocationUnits; | |
791 | ULONG SectorsPerAllocationUnit; | |
792 | ULONG BytesPerSector; | |
793 | } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; | |
794 | ||
3323df7e CV |
795 | typedef struct _FILE_FS_FULL_SIZE_INFORMATION |
796 | { | |
797 | LARGE_INTEGER TotalAllocationUnits; | |
798 | LARGE_INTEGER CallerAvailableAllocationUnits; | |
799 | LARGE_INTEGER ActualAvailableAllocationUnits; | |
800 | ULONG SectorsPerAllocationUnit; | |
801 | ULONG BytesPerSector; | |
802 | } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; | |
803 | ||
4a96b0aa CV |
804 | typedef struct _FILE_FS_OBJECTID_INFORMATION { |
805 | UCHAR ObjectId[16]; | |
806 | UCHAR ExtendedInfo[48]; | |
807 | } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; | |
808 | ||
3ff1a063 CV |
809 | typedef enum _FSINFOCLASS { |
810 | FileFsVolumeInformation = 1, | |
811 | FileFsLabelInformation, | |
812 | FileFsSizeInformation, | |
813 | FileFsDeviceInformation, | |
814 | FileFsAttributeInformation, | |
815 | FileFsControlInformation, | |
816 | FileFsFullSizeInformation, | |
817 | FileFsObjectIdInformation, | |
818 | FileFsDriverPathInformation, | |
819 | FileFsMaximumInformation | |
2a24463d CV |
820 | } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; |
821 | ||
2402700d CF |
822 | typedef enum _OBJECT_INFORMATION_CLASS |
823 | { | |
b8eac1de CV |
824 | ObjectBasicInformation = 0, |
825 | ObjectNameInformation = 1, | |
826 | ObjectHandleInformation = 4 | |
2402700d CF |
827 | // and many more |
828 | } OBJECT_INFORMATION_CLASS; | |
829 | ||
a998dd70 CV |
830 | typedef struct _OBJECT_BASIC_INFORMATION |
831 | { | |
832 | ULONG Attributes; | |
833 | ACCESS_MASK GrantedAccess; | |
834 | ULONG HandleCount; | |
835 | ULONG PointerCount; | |
836 | ULONG PagedPoolUsage; | |
837 | ULONG NonPagedPoolUsage; | |
838 | ULONG Reserved[3]; | |
839 | ULONG NameInformationLength; | |
840 | ULONG TypeInformationLength; | |
841 | ULONG SecurityDescriptorLength; | |
842 | LARGE_INTEGER CreateTime; | |
843 | } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION; | |
844 | ||
2402700d CF |
845 | typedef struct _OBJECT_NAME_INFORMATION |
846 | { | |
847 | UNICODE_STRING Name; | |
848 | } OBJECT_NAME_INFORMATION; | |
849 | ||
e9c8cb31 CV |
850 | typedef struct _DIRECTORY_BASIC_INFORMATION |
851 | { | |
852 | UNICODE_STRING ObjectName; | |
853 | UNICODE_STRING ObjectTypeName; | |
854 | } DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION; | |
855 | ||
4635b6eb CV |
856 | typedef struct _FILE_GET_EA_INFORMATION |
857 | { | |
858 | ULONG NextEntryOffset; | |
859 | UCHAR EaNameLength; | |
860 | CHAR EaName[1]; | |
861 | } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION; | |
862 | ||
4635b6eb CV |
863 | typedef struct _FILE_FULL_EA_INFORMATION |
864 | { | |
865 | ULONG NextEntryOffset; | |
866 | UCHAR Flags; | |
867 | UCHAR EaNameLength; | |
868 | USHORT EaValueLength; | |
869 | CHAR EaName[1]; | |
870 | } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; | |
871 | ||
19afaa1a CV |
872 | typedef struct _FILE_MAILSLOT_SET_INFORMATION |
873 | { | |
874 | LARGE_INTEGER ReadTimeout; | |
875 | } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; | |
876 | ||
e17c7745 CV |
877 | #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, \ |
878 | METHOD_BUFFERED, FILE_ANY_ACCESS) | |
879 | ||
61c44b72 CV |
880 | typedef VOID NTAPI (*PIO_APC_ROUTINE)(PVOID, PIO_STATUS_BLOCK, ULONG); |
881 | ||
a998dd70 CV |
882 | typedef enum _EVENT_TYPE |
883 | { | |
884 | NotificationEvent = 0, | |
885 | SynchronizationEvent | |
886 | } EVENT_TYPE, *PEVENT_TYPE; | |
887 | ||
636c94d8 CV |
888 | typedef struct _EVENT_BASIC_INFORMATION |
889 | { | |
890 | EVENT_TYPE EventType; | |
891 | LONG SignalState; | |
892 | } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION; | |
893 | ||
894 | typedef enum _EVENT_INFORMATION_CLASS | |
895 | { | |
896 | EventBasicInformation = 0 | |
897 | } EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS; | |
898 | ||
e17c7745 CV |
899 | typedef enum _THREAD_INFORMATION_CLASS |
900 | { | |
705a187e | 901 | ThreadBasicInformation = 0, |
e17c7745 CV |
902 | ThreadImpersonationToken = 5 |
903 | } THREAD_INFORMATION_CLASS, *PTHREAD_INFORMATION_CLASS; | |
904 | ||
705a187e YS |
905 | typedef struct _THREAD_BASIC_INFORMATION { |
906 | NTSTATUS ExitStatus; | |
907 | PNT_TIB TebBaseAddress; | |
908 | CLIENT_ID ClientId; | |
909 | KAFFINITY AffinityMask; | |
910 | KPRIORITY Priority; | |
911 | KPRIORITY BasePriority; | |
912 | } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION; | |
913 | ||
e17c7745 CV |
914 | #define RTL_QUERY_REGISTRY_SUBKEY 0x01 |
915 | #define RTL_QUERY_REGISTRY_TOPKEY 0x02 | |
916 | #define RTL_QUERY_REGISTRY_REQUIRED 0x04 | |
917 | #define RTL_QUERY_REGISTRY_NOVALUE 0x08 | |
918 | #define RTL_QUERY_REGISTRY_NOEXPAND 0x10 | |
919 | #define RTL_QUERY_REGISTRY_DIRECT 0x20 | |
920 | #define RTL_QUERY_REGISTRY_DELETE 0x40 | |
921 | #define RTL_QUERY_REGISTRY_NOSTRING 0x80 | |
922 | ||
923 | #define RTL_REGISTRY_ABSOLUTE 0 | |
924 | #define RTL_REGISTRY_SERVICES 1 | |
925 | #define RTL_REGISTRY_CONTROL 2 | |
926 | #define RTL_REGISTRY_WINDOWS_NT 3 | |
927 | #define RTL_REGISTRY_DEVICEMAP 4 | |
928 | #define RTL_REGISTRY_USER 5 | |
929 | #define RTL_REGISTRY_HANDLE 0x40000000 | |
930 | #define RTL_REGISTRY_OPTIONAL 0x80000000 | |
931 | ||
932 | typedef NTSTATUS (*PRTL_QUERY_REGISTRY_ROUTINE) | |
933 | (PWSTR, ULONG, PVOID, ULONG, PVOID, PVOID); | |
934 | ||
935 | typedef struct _RTL_QUERY_REGISTRY_TABLE | |
936 | { | |
937 | PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; | |
938 | ULONG Flags; | |
939 | PCWSTR Name; | |
940 | PVOID EntryContext; | |
941 | ULONG DefaultType; | |
942 | PVOID DefaultData; | |
943 | ULONG DefaultLength; | |
944 | } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; | |
945 | ||
946 | typedef enum _KEY_VALUE_INFORMATION_CLASS | |
947 | { | |
948 | KeyValueBasicInformation = 0, | |
949 | KeyValueFullInformation, | |
950 | KeyValuePartialInformation | |
951 | } KEY_VALUE_INFORMATION_CLASS, *PKEY_VALUE_INFORMATION_CLASS; | |
952 | ||
953 | typedef struct _KEY_VALUE_PARTIAL_INFORMATION | |
954 | { | |
955 | ULONG TitleIndex; | |
956 | ULONG Type; | |
957 | ULONG DataLength; | |
958 | UCHAR Data[1]; | |
959 | } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; | |
960 | ||
86bf572e CV |
961 | typedef enum _TIMER_TYPE |
962 | { | |
963 | NotificationTimer, | |
964 | SynchronisationTimer | |
965 | } TIMER_TYPE, *PTIMER_TYPE; | |
966 | ||
967 | typedef VOID (APIENTRY *PTIMER_APC_ROUTINE)(PVOID, ULONG, ULONG); | |
968 | ||
6d87f7d7 CF |
969 | /* Function declarations for ntdll.dll. These don't appear in any |
970 | standard Win32 header. */ | |
f16706de CV |
971 | |
972 | #define NtCurrentProcess() ((HANDLE) 0xffffffff) | |
973 | #define NtCurrentThread() ((HANDLE) 0xfffffffe) | |
974 | ||
e17c7745 | 975 | #ifdef __cplusplus |
cd506492 CV |
976 | /* This is the mapping of the KUSER_SHARED_DATA structure into the 32 bit |
977 | user address space. We need it here to access the current DismountCount. */ | |
978 | static KUSER_SHARED_DATA &SharedUserData | |
979 | = *(volatile PKUSER_SHARED_DATA) 0x7ffe0000; | |
980 | ||
6d87f7d7 CF |
981 | extern "C" |
982 | { | |
e17c7745 CV |
983 | #endif |
984 | NTSTATUS NTAPI NtAccessCheck (PSECURITY_DESCRIPTOR, HANDLE, ACCESS_MASK, | |
985 | PGENERIC_MAPPING, PPRIVILEGE_SET, PULONG, | |
986 | PACCESS_MASK, PNTSTATUS); | |
cce28460 CV |
987 | NTSTATUS NTAPI NtAdjustPrivilegesToken (HANDLE, BOOLEAN, PTOKEN_PRIVILEGES, |
988 | ULONG, PTOKEN_PRIVILEGES, PULONG); | |
e17c7745 | 989 | NTSTATUS NTAPI NtAllocateLocallyUniqueId (PLUID); |
5f660ecf | 990 | NTSTATUS NTAPI NtAllocateUuids (PLARGE_INTEGER, PULONG, PULONG, PUCHAR); |
86bf572e | 991 | NTSTATUS NTAPI NtCancelTimer (HANDLE, PBOOLEAN); |
e9c8cb31 | 992 | NTSTATUS NTAPI NtClose (HANDLE); |
4c153b24 | 993 | NTSTATUS NTAPI NtCommitTransaction (HANDLE, BOOLEAN); |
a998dd70 CV |
994 | NTSTATUS NTAPI NtCreateDirectoryObject (PHANDLE, ACCESS_MASK, |
995 | POBJECT_ATTRIBUTES); | |
e17c7745 CV |
996 | NTSTATUS NTAPI NtCreateKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG, |
997 | PUNICODE_STRING, ULONG, PULONG); | |
a998dd70 | 998 | NTSTATUS NTAPI NtCreateEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
025c1fac | 999 | EVENT_TYPE, BOOLEAN); |
e8597065 CV |
1000 | NTSTATUS NTAPI NtCreateFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1001 | PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG, | |
1002 | ULONG, ULONG, PVOID, ULONG); | |
19afaa1a CV |
1003 | NTSTATUS NTAPI NtCreateMailslotFile(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1004 | PIO_STATUS_BLOCK, ULONG, ULONG, ULONG, | |
1005 | PLARGE_INTEGER); | |
a998dd70 CV |
1006 | NTSTATUS NTAPI NtCreateMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1007 | BOOLEAN); | |
f90e23f2 | 1008 | NTSTATUS NTAPI NtCreateSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
70300fdb | 1009 | PLARGE_INTEGER, ULONG, ULONG, HANDLE); |
abbde487 CV |
1010 | NTSTATUS NTAPI NtCreateSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1011 | LONG, LONG); | |
86bf572e CV |
1012 | NTSTATUS NTAPI NtCreateTimer (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1013 | TIMER_TYPE); | |
1fcc912f | 1014 | NTSTATUS NTAPI NtCreateToken (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1ff9f4b9 CF |
1015 | TOKEN_TYPE, PLUID, PLARGE_INTEGER, PTOKEN_USER, |
1016 | PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_OWNER, | |
1017 | PTOKEN_PRIMARY_GROUP, PTOKEN_DEFAULT_DACL, | |
1018 | PTOKEN_SOURCE); | |
4c153b24 CV |
1019 | NTSTATUS NTAPI NtCreateTransaction (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1020 | LPGUID, HANDLE, ULONG, ULONG, ULONG, | |
1021 | PLARGE_INTEGER, PUNICODE_STRING); | |
e17c7745 CV |
1022 | NTSTATUS NTAPI NtDuplicateToken (HANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1023 | BOOLEAN, TOKEN_TYPE, PHANDLE); | |
61c44b72 | 1024 | NTSTATUS NTAPI NtFsControlFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, |
214c3a11 CV |
1025 | PIO_STATUS_BLOCK, ULONG, PVOID, ULONG, |
1026 | PVOID, ULONG); | |
0d6f2b01 | 1027 | NTSTATUS NTAPI NtFlushBuffersFile (HANDLE, PIO_STATUS_BLOCK); |
e17c7745 | 1028 | NTSTATUS NTAPI NtLoadKey (POBJECT_ATTRIBUTES, POBJECT_ATTRIBUTES); |
1f5c3042 | 1029 | NTSTATUS NTAPI NtLockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG); |
6d87f7d7 CF |
1030 | NTSTATUS NTAPI NtMapViewOfSection (HANDLE, HANDLE, PVOID *, ULONG, ULONG, |
1031 | PLARGE_INTEGER, PULONG, SECTION_INHERIT, | |
1032 | ULONG, ULONG); | |
1b61bf15 | 1033 | NTSTATUS NTAPI NtNotifyChangeDirectoryFile (HANDLE, HANDLE, PIO_APC_ROUTINE, |
70300fdb | 1034 | PVOID, PIO_STATUS_BLOCK, |
1b61bf15 CV |
1035 | PFILE_NOTIFY_INFORMATION, ULONG, |
1036 | ULONG, BOOLEAN); | |
e9c8cb31 | 1037 | NTSTATUS NTAPI NtOpenDirectoryObject (PHANDLE, ACCESS_MASK, |
70300fdb | 1038 | POBJECT_ATTRIBUTES); |
a998dd70 | 1039 | NTSTATUS NTAPI NtOpenEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
99069065 CV |
1040 | NTSTATUS NTAPI NtOpenFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1041 | PIO_STATUS_BLOCK, ULONG, ULONG); | |
e17c7745 | 1042 | NTSTATUS NTAPI NtOpenKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
a998dd70 | 1043 | NTSTATUS NTAPI NtOpenMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
e17c7745 CV |
1044 | NTSTATUS NTAPI NtOpenProcessToken (HANDLE, ACCESS_MASK, PHANDLE); |
1045 | NTSTATUS NTAPI NtOpenThreadToken (HANDLE, ACCESS_MASK, BOOLEAN, PHANDLE); | |
1fcc912f | 1046 | NTSTATUS NTAPI NtOpenSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
abbde487 | 1047 | NTSTATUS NTAPI NtOpenSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
43f65cdd CV |
1048 | NTSTATUS NTAPI NtOpenSymbolicLinkObject (PHANDLE, ACCESS_MASK, |
1049 | POBJECT_ATTRIBUTES); | |
1b61bf15 CV |
1050 | /* WARNING! Don't rely on the timestamp information returned by |
1051 | NtQueryAttributesFile. Only the DOS file attribute info is reliable. */ | |
e17c7745 | 1052 | NTSTATUS NTAPI NtPrivilegeCheck (HANDLE, PPRIVILEGE_SET, PBOOLEAN); |
1b61bf15 CV |
1053 | NTSTATUS NTAPI NtQueryAttributesFile (POBJECT_ATTRIBUTES, |
1054 | PFILE_BASIC_INFORMATION); | |
e9c8cb31 CV |
1055 | NTSTATUS NTAPI NtQueryDirectoryFile(HANDLE, HANDLE, PVOID, PVOID, |
1056 | PIO_STATUS_BLOCK, PVOID, ULONG, | |
1057 | FILE_INFORMATION_CLASS, BOOLEAN, | |
1058 | PUNICODE_STRING, BOOLEAN); | |
1059 | NTSTATUS NTAPI NtQueryDirectoryObject (HANDLE, PVOID, ULONG, BOOLEAN, | |
70300fdb | 1060 | BOOLEAN, PULONG, PULONG); |
4635b6eb CV |
1061 | NTSTATUS NTAPI NtQueryEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, |
1062 | BOOLEAN, PVOID, ULONG, PULONG, BOOLEAN); | |
636c94d8 CV |
1063 | NTSTATUS NTAPI NtQueryEvent (HANDLE, EVENT_INFORMATION_CLASS, PVOID, ULONG, |
1064 | PULONG); | |
e25b3402 CV |
1065 | NTSTATUS NTAPI NtQueryFullAttributesFile (POBJECT_ATTRIBUTES, |
1066 | PFILE_NETWORK_OPEN_INFORMATION); | |
2a24463d | 1067 | NTSTATUS NTAPI NtQueryInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, |
6644c628 | 1068 | ULONG, FILE_INFORMATION_CLASS); |
d74eced5 | 1069 | NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS, |
a113a3c5 | 1070 | PVOID, ULONG, PULONG); |
705a187e YS |
1071 | NTSTATUS NTAPI NtQueryInformationThread (HANDLE, THREAD_INFORMATION_CLASS, |
1072 | PVOID, ULONG, PULONG); | |
e17c7745 CV |
1073 | NTSTATUS NTAPI NtQueryInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, |
1074 | PVOID, ULONG, PULONG); | |
d74eced5 | 1075 | NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, VOID *, |
a113a3c5 | 1076 | ULONG, ULONG *); |
6d87f7d7 CF |
1077 | NTSTATUS NTAPI NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS, |
1078 | PVOID, ULONG, PULONG); | |
cef5dfd7 CF |
1079 | |
1080 | NTSTATUS WINAPI NtQuerySystemTime (PLARGE_INTEGER); | |
1081 | ||
71ffba49 | 1082 | NTSTATUS NTAPI NtQuerySecurityObject (HANDLE, SECURITY_INFORMATION, |
70300fdb | 1083 | PSECURITY_DESCRIPTOR, ULONG, PULONG); |
43f65cdd | 1084 | NTSTATUS NTAPI NtQuerySymbolicLinkObject (HANDLE, PUNICODE_STRING, PULONG); |
cd506492 | 1085 | NTSTATUS NTAPI NtQueryTimerResolution (PULONG, PULONG, PULONG); |
e17c7745 CV |
1086 | NTSTATUS NTAPI NtQueryValueKey (HANDLE, PUNICODE_STRING, |
1087 | KEY_VALUE_INFORMATION_CLASS, PVOID, ULONG, | |
1088 | PULONG); | |
d74eced5 | 1089 | NTSTATUS NTAPI NtQueryVirtualMemory (HANDLE, PVOID, MEMORY_INFORMATION_CLASS, |
a113a3c5 | 1090 | PVOID, ULONG, PULONG); |
2a24463d CV |
1091 | NTSTATUS NTAPI NtQueryVolumeInformationFile (HANDLE, IO_STATUS_BLOCK *, |
1092 | VOID *, ULONG, | |
1093 | FS_INFORMATION_CLASS); | |
d85bcb45 CV |
1094 | NTSTATUS NTAPI NtReadFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, |
1095 | PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER, | |
1096 | PULONG); | |
4c153b24 | 1097 | NTSTATUS NTAPI NtRollbackTransaction (HANDLE, BOOLEAN); |
4635b6eb | 1098 | NTSTATUS NTAPI NtSetEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG); |
7636b585 CV |
1099 | NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, |
1100 | FILE_INFORMATION_CLASS); | |
e17c7745 CV |
1101 | NTSTATUS NTAPI NtSetInformationThread (HANDLE, THREAD_INFORMATION_CLASS, |
1102 | PVOID, ULONG); | |
1103 | NTSTATUS NTAPI NtSetInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, PVOID, | |
1104 | ULONG); | |
f4ae6dc6 CV |
1105 | NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION, |
1106 | PSECURITY_DESCRIPTOR); | |
86bf572e CV |
1107 | NTSTATUS NTAPI NtSetTimer (HANDLE, PLARGE_INTEGER, PTIMER_APC_ROUTINE, PVOID, |
1108 | BOOLEAN, LONG, PBOOLEAN); | |
cd506492 | 1109 | NTSTATUS NTAPI NtSetTimerResolution (ULONG, BOOLEAN, PULONG); |
e17c7745 CV |
1110 | NTSTATUS NTAPI NtSetValueKey (HANDLE, PUNICODE_STRING, ULONG, ULONG, PVOID, |
1111 | ULONG); | |
1f5c3042 | 1112 | NTSTATUS NTAPI NtUnlockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG); |
6d87f7d7 | 1113 | NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID); |
61c44b72 CV |
1114 | NTSTATUS NTAPI NtWriteFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, |
1115 | PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER, | |
1116 | PULONG); | |
e17c7745 CV |
1117 | NTSTATUS NTAPI RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR, |
1118 | PSECURITY_DESCRIPTOR, PULONG); | |
9c154abe | 1119 | VOID NTAPI RtlAcquirePebLock (); |
e17c7745 CV |
1120 | NTSTATUS NTAPI RtlAddAccessAllowedAce (PACL, ULONG, ACCESS_MASK, PSID); |
1121 | NTSTATUS NTAPI RtlAddAccessDeniedAce (PACL, ULONG, ACCESS_MASK, PSID); | |
1122 | NTSTATUS NTAPI RtlAddAce (PACL, ULONG, ULONG, PVOID, ULONG); | |
9c154abe | 1123 | PVOID NTAPI RtlAllocateHeap (PVOID, ULONG, SIZE_T); |
214c3a11 CV |
1124 | NTSTATUS NTAPI RtlAppendUnicodeToString (PUNICODE_STRING, PCWSTR); |
1125 | NTSTATUS NTAPI RtlAppendUnicodeStringToString (PUNICODE_STRING, | |
1126 | PUNICODE_STRING); | |
cbe2437b CV |
1127 | NTSTATUS NTAPI RtlAnsiStringToUnicodeString (PUNICODE_STRING, PANSI_STRING, |
1128 | BOOLEAN); | |
e17c7745 | 1129 | NTSTATUS NTAPI RtlCheckRegistryKey (ULONG, PCWSTR); |
214c3a11 CV |
1130 | LONG NTAPI RtlCompareUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1131 | BOOLEAN); | |
7d5f6c18 | 1132 | NTSTATUS NTAPI RtlConvertSidToUnicodeString (PUNICODE_STRING, PSID, BOOLEAN); |
f9761297 CV |
1133 | NTSTATUS NTAPI RtlConvertToAutoInheritSecurityObject (PSECURITY_DESCRIPTOR, |
1134 | PSECURITY_DESCRIPTOR, | |
1135 | PSECURITY_DESCRIPTOR *, | |
1136 | GUID *, BOOLEAN, | |
1137 | PGENERIC_MAPPING); | |
e17c7745 | 1138 | NTSTATUS NTAPI RtlCopySid (ULONG, PSID, PSID); |
f9761297 | 1139 | VOID NTAPI RtlCopyUnicodeString (PUNICODE_STRING, PUNICODE_STRING); |
e17c7745 CV |
1140 | NTSTATUS NTAPI RtlCreateAcl (PACL, ULONG, ULONG); |
1141 | NTSTATUS NTAPI RtlCreateRegistryKey (ULONG, PCWSTR); | |
1142 | NTSTATUS NTAPI RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR, ULONG); | |
855e63eb | 1143 | BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING, PCSTR); |
f9761297 | 1144 | NTSTATUS NTAPI RtlDeleteSecurityObject (PSECURITY_DESCRIPTOR *); |
1feea0bf CV |
1145 | NTSTATUS NTAPI RtlDowncaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1146 | BOOLEAN); | |
9c154abe | 1147 | NTSTATUS NTAPI RtlEnterCriticalSection (PRTL_CRITICAL_SECTION); |
e17c7745 CV |
1148 | BOOLEAN NTAPI RtlEqualPrefixSid (PSID, PSID); |
1149 | BOOLEAN NTAPI RtlEqualSid (PSID, PSID); | |
214c3a11 CV |
1150 | BOOLEAN NTAPI RtlEqualUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1151 | BOOLEAN); | |
8b5fa210 | 1152 | VOID NTAPI RtlFreeAnsiString (PANSI_STRING); |
9c154abe | 1153 | BOOLEAN NTAPI RtlFreeHeap (PVOID, ULONG, PVOID); |
8b5fa210 | 1154 | VOID NTAPI RtlFreeOemString (POEM_STRING); |
214c3a11 | 1155 | VOID NTAPI RtlFreeUnicodeString (PUNICODE_STRING); |
e17c7745 CV |
1156 | BOOLEAN NTAPI RtlFirstFreeAce (PACL, PVOID *); |
1157 | NTSTATUS NTAPI RtlGetAce (PACL, ULONG, PVOID); | |
f9761297 CV |
1158 | NTSTATUS NTAPI RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR, |
1159 | PSECURITY_DESCRIPTOR_CONTROL, | |
1160 | PULONG); | |
4c153b24 | 1161 | HANDLE NTAPI RtlGetCurrentTransaction (); |
e17c7745 CV |
1162 | NTSTATUS NTAPI RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, PBOOLEAN, |
1163 | PACL *, PBOOLEAN); | |
1164 | NTSTATUS NTAPI RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *, | |
1165 | PBOOLEAN); | |
1166 | NTSTATUS NTAPI RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *, | |
1167 | PBOOLEAN); | |
1168 | PSID_IDENTIFIER_AUTHORITY NTAPI RtlIdentifierAuthoritySid (PSID); | |
214c3a11 | 1169 | VOID NTAPI RtlInitEmptyUnicodeString (PUNICODE_STRING, PCWSTR, USHORT); |
e17c7745 | 1170 | NTSTATUS NTAPI RtlInitializeSid (PSID, PSID_IDENTIFIER_AUTHORITY, UCHAR); |
6d87f7d7 | 1171 | VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR); |
7d5f6c18 | 1172 | NTSTATUS NTAPI RtlIntegerToUnicodeString (ULONG, ULONG, PUNICODE_STRING); |
e9c8cb31 | 1173 | ULONG NTAPI RtlIsDosDeviceName_U (PCWSTR); |
9c154abe | 1174 | NTSTATUS NTAPI RtlLeaveCriticalSection (PRTL_CRITICAL_SECTION); |
f9761297 | 1175 | ULONG NTAPI RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR); |
e17c7745 | 1176 | ULONG NTAPI RtlLengthSid (PSID); |
6d87f7d7 | 1177 | ULONG NTAPI RtlNtStatusToDosError (NTSTATUS); |
cbe2437b CV |
1178 | NTSTATUS NTAPI RtlOemStringToUnicodeString (PUNICODE_STRING, POEM_STRING, |
1179 | BOOLEAN); | |
9235f3ea CV |
1180 | BOOLEAN NTAPI RtlPrefixUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1181 | BOOLEAN); | |
e17c7745 CV |
1182 | NTSTATUS NTAPI RtlQueryRegistryValues (ULONG, PCWSTR, |
1183 | PRTL_QUERY_REGISTRY_TABLE, PVOID, | |
1184 | PVOID); | |
dec9daad | 1185 | VOID NTAPI RtlReleasePebLock (); |
214c3a11 | 1186 | VOID NTAPI RtlSecondsSince1970ToTime (ULONG, PLARGE_INTEGER); |
1121c57f | 1187 | NTSTATUS NTAPI RtlSetCurrentDirectory_U (PUNICODE_STRING); |
4c153b24 | 1188 | BOOLEAN NTAPI RtlSetCurrentTransaction (HANDLE); |
e17c7745 CV |
1189 | NTSTATUS NTAPI RtlSetControlSecurityDescriptor (PSECURITY_DESCRIPTOR, |
1190 | SECURITY_DESCRIPTOR_CONTROL, | |
1191 | SECURITY_DESCRIPTOR_CONTROL); | |
1192 | NTSTATUS NTAPI RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, BOOLEAN, | |
1193 | PACL, BOOLEAN); | |
1194 | NTSTATUS NTAPI RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID, | |
1195 | BOOLEAN); | |
1196 | NTSTATUS NTAPI RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID, | |
1197 | BOOLEAN); | |
1198 | PUCHAR NTAPI RtlSubAuthorityCountSid (PSID); | |
1199 | PULONG NTAPI RtlSubAuthoritySid (PSID, ULONG); | |
8b5fa210 CV |
1200 | NTSTATUS NTAPI RtlUnicodeStringToAnsiString (PANSI_STRING, PUNICODE_STRING, |
1201 | BOOLEAN); | |
1202 | NTSTATUS NTAPI RtlUnicodeStringToOemString (PANSI_STRING, PUNICODE_STRING, | |
1203 | BOOLEAN); | |
855e63eb | 1204 | WCHAR NTAPI RtlUpcaseUnicodeChar (WCHAR); |
1feea0bf CV |
1205 | NTSTATUS NTAPI RtlUpcaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1206 | BOOLEAN); | |
e17c7745 CV |
1207 | NTSTATUS NTAPI RtlWriteRegistryValue (ULONG, PCWSTR, PCWSTR, ULONG, PVOID, |
1208 | ULONG); | |
214c3a11 | 1209 | |
e17c7745 | 1210 | #ifdef __cplusplus |
214c3a11 | 1211 | /* A few Rtl functions are either actually macros, or they just don't |
61c44b72 CV |
1212 | exist even though they would be a big help. We implement them here, |
1213 | partly as inline functions. */ | |
1214 | ||
1215 | /* RtlInitEmptyUnicodeString is defined as a macro in wdm.h, but that file | |
1216 | is missing entirely in w32api. */ | |
214c3a11 CV |
1217 | inline |
1218 | VOID NTAPI RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf, | |
1219 | USHORT len) | |
1220 | { | |
1221 | dest->Length = 0; | |
1222 | dest->MaximumLength = len; | |
1223 | dest->Buffer = (PWSTR) buf; | |
1224 | } | |
61c44b72 CV |
1225 | /* Like RtlInitEmptyUnicodeString, but initialize Length to len, too. |
1226 | This is for instance useful when creating a UNICODE_STRING from an | |
1227 | NtQueryInformationFile info buffer, where the length of the filename | |
1228 | is known, but you can't rely on the string being 0-terminated. | |
1229 | If you know it's 0-terminated, just use RtlInitUnicodeString(). */ | |
214c3a11 | 1230 | inline |
74c5e8c7 | 1231 | VOID NTAPI RtlInitCountedUnicodeString (PUNICODE_STRING dest, PCWSTR buf, |
70300fdb | 1232 | USHORT len) |
214c3a11 CV |
1233 | { |
1234 | dest->Length = dest->MaximumLength = len; | |
1235 | dest->Buffer = (PWSTR) buf; | |
1236 | } | |
61c44b72 CV |
1237 | /* Split path into dirname and basename part. This function does not |
1238 | copy anything! It just initializes the dirname and basename | |
1239 | UNICODE_STRINGs so that their Buffer members point to the right spot | |
70300fdb | 1240 | into path's Buffer, and the Length (and MaximumLength) members are set |
61c44b72 CV |
1241 | to match the dirname part and the basename part. |
1242 | Note that dirname's Length is set so that it also includes the trailing | |
1243 | backslash. If you don't need it, just subtract sizeof(WCHAR) from | |
1244 | dirname.Length. */ | |
ceaf31f4 | 1245 | inline |
61c44b72 CV |
1246 | VOID NTAPI RtlSplitUnicodePath (PUNICODE_STRING path, PUNICODE_STRING dirname, |
1247 | PUNICODE_STRING basename) | |
ceaf31f4 CV |
1248 | { |
1249 | USHORT len = path->Length / sizeof (WCHAR); | |
1250 | while (len > 0 && path->Buffer[--len] != L'\\') | |
1251 | ; | |
1252 | ++len; | |
61c44b72 CV |
1253 | if (dirname) |
1254 | RtlInitCountedUnicodeString (dirname, path->Buffer, len * sizeof (WCHAR)); | |
1255 | if (basename) | |
1256 | RtlInitCountedUnicodeString (basename, &path->Buffer[len], | |
74c5e8c7 CV |
1257 | path->Length - len * sizeof (WCHAR)); |
1258 | } | |
61c44b72 | 1259 | /* Check if prefix is a prefix of path. */ |
74c5e8c7 | 1260 | inline |
8deb4118 CV |
1261 | BOOLEAN NTAPI RtlEqualUnicodePathPrefix (PUNICODE_STRING path, |
1262 | PUNICODE_STRING prefix, | |
81e98baf | 1263 | BOOLEAN caseinsensitive) |
74c5e8c7 | 1264 | { |
8deb4118 | 1265 | UNICODE_STRING p; |
74c5e8c7 | 1266 | |
74c5e8c7 | 1267 | RtlInitCountedUnicodeString (&p, path->Buffer, |
8deb4118 CV |
1268 | prefix->Length < path->Length |
1269 | ? prefix->Length : path->Length); | |
1270 | return RtlEqualUnicodeString (&p, prefix, caseinsensitive); | |
74c5e8c7 | 1271 | } |
61c44b72 | 1272 | /* Check if sufffix is a sufffix of path. */ |
74c5e8c7 | 1273 | inline |
8deb4118 CV |
1274 | BOOL NTAPI RtlEqualUnicodePathSuffix (PUNICODE_STRING path, |
1275 | PUNICODE_STRING suffix, | |
81e98baf | 1276 | BOOLEAN caseinsensitive) |
74c5e8c7 | 1277 | { |
8deb4118 | 1278 | UNICODE_STRING p; |
74c5e8c7 | 1279 | |
8deb4118 | 1280 | if (suffix->Length < path->Length) |
74c5e8c7 | 1281 | RtlInitCountedUnicodeString (&p, (PWCHAR) ((PBYTE) path->Buffer |
8deb4118 CV |
1282 | + path->Length - suffix->Length), |
1283 | suffix->Length); | |
74c5e8c7 CV |
1284 | else |
1285 | RtlInitCountedUnicodeString (&p, path->Buffer, path->Length); | |
8deb4118 | 1286 | return RtlEqualUnicodeString (&p, suffix, caseinsensitive); |
ceaf31f4 | 1287 | } |
61c44b72 CV |
1288 | /* Implemented in strfuncs.cc. Create a Hex UNICODE_STRING from a given |
1289 | 64 bit integer value. If append is TRUE, append the hex string, | |
1feea0bf | 1290 | otherwise overwrite dest. Returns either STATUS_SUCCESS, or |
61c44b72 CV |
1291 | STATUS_BUFFER_OVERFLOW, if the unicode buffer is too small (hasn't |
1292 | room for 16 WCHARs). */ | |
1293 | NTSTATUS NTAPI RtlInt64ToHexUnicodeString (ULONGLONG value, | |
1294 | PUNICODE_STRING dest, | |
1295 | BOOLEAN append); | |
669bdeb8 CV |
1296 | /* Set file attributes. Don't change file times. */ |
1297 | inline | |
1298 | NTSTATUS NTAPI NtSetAttributesFile (HANDLE h, ULONG attr) | |
1299 | { | |
1300 | IO_STATUS_BLOCK io; | |
1301 | FILE_BASIC_INFORMATION fbi; | |
1302 | fbi.CreationTime.QuadPart = fbi.LastAccessTime.QuadPart = | |
1303 | fbi.LastWriteTime.QuadPart = fbi.ChangeTime.QuadPart = 0LL; | |
1304 | fbi.FileAttributes = attr ?: FILE_ATTRIBUTE_NORMAL; | |
1305 | return NtSetInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation); | |
1306 | } | |
bd139e52 CV |
1307 | |
1308 | /* This test for a signalled event is twice as fast as calling | |
1309 | WaitForSingleObject (event, 0). */ | |
1310 | inline | |
1311 | BOOL NTAPI IsEventSignalled (HANDLE event) | |
1312 | { | |
1313 | EVENT_BASIC_INFORMATION ebi; | |
1314 | return NT_SUCCESS (NtQueryEvent (event, EventBasicInformation, | |
1315 | &ebi, sizeof ebi, NULL)) | |
1316 | && ebi.SignalState != 0; | |
1317 | ||
1318 | } | |
6d87f7d7 | 1319 | } |
e17c7745 | 1320 | #endif |
cef5dfd7 | 1321 | #endif /*_NTDLL_H*/ |