]>
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, |
3432d6f1 | 4 | 2009, 2010 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) |
6ce2c241 | 43 | #define STATUS_DISK_FULL ((NTSTATUS) 0xc000007f) |
745c29fe | 44 | #define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xc00000a1) |
43f65cdd CV |
45 | #define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS) 0xc00000ab) |
46 | #define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS) 0xc00000ac) | |
47 | #define STATUS_INVALID_PIPE_STATE ((NTSTATUS) 0xc00000ad) | |
48 | #define STATUS_PIPE_BUSY ((NTSTATUS) 0xc00000ae) | |
4368984a | 49 | #define STATUS_NOT_SUPPORTED ((NTSTATUS) 0xc00000bb) |
fad9568b | 50 | #define STATUS_BAD_NETWORK_PATH ((NTSTATUS) 0xc00000be) |
3432d6f1 | 51 | #define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS) 0xc00000c3) |
fad9568b | 52 | #define STATUS_BAD_NETWORK_NAME ((NTSTATUS) 0xc00000cc) |
ed7ec849 | 53 | #define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS) 0xc0000101) |
f4ad0404 | 54 | #define STATUS_CANNOT_DELETE ((NTSTATUS) 0xc0000121) |
745c29fe | 55 | #define STATUS_INVALID_LEVEL ((NTSTATUS) 0xc0000148) |
abbde487 CV |
56 | #define STATUS_DLL_NOT_FOUND ((NTSTATUS) 0xc0000135) |
57 | #define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xc0000139) | |
58 | #define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS) 0xc0000251) | |
59 | #define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS) 0xc0000269) | |
dc4e4aab CW |
60 | /* custom status code: */ |
61 | #define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269) | |
93d606f6 | 62 | |
9ba913a5 CF |
63 | #define PDI_MODULES 0x01 |
64 | #define PDI_HEAPS 0x04 | |
65 | #define LDRP_IMAGE_DLL 0x00000004 | |
66 | #define WSLE_PAGE_READONLY 0x001 | |
67 | #define WSLE_PAGE_EXECUTE 0x002 | |
68 | #define WSLE_PAGE_EXECUTE_READ 0x003 | |
69 | #define WSLE_PAGE_READWRITE 0x004 | |
70 | #define WSLE_PAGE_WRITECOPY 0x005 | |
71 | #define WSLE_PAGE_EXECUTE_READWRITE 0x006 | |
72 | #define WSLE_PAGE_EXECUTE_WRITECOPY 0x007 | |
73 | #define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0 | |
74 | #define WSLE_PAGE_SHAREABLE 0x100 | |
75 | ||
61c44b72 CV |
76 | #define FILE_SUPERSEDED 0 |
77 | #define FILE_OPENED 1 | |
78 | #define FILE_CREATED 2 | |
79 | #define FILE_OVERWRITTEN 3 | |
80 | #define FILE_EXISTS 4 | |
81 | #define FILE_DOES_NOT_EXIST 5 | |
82 | ||
6ce2c241 CV |
83 | #define FILE_WRITE_TO_END_OF_FILE (-1LL) |
84 | #define FILE_USE_FILE_POINTER_POSITION (-2LL) | |
85 | ||
d3dd7d36 CV |
86 | /* Device Characteristics. */ |
87 | #define FILE_REMOVABLE_MEDIA 0x00000001 | |
88 | #define FILE_READ_ONLY_DEVICE 0x00000002 | |
89 | #define FILE_FLOPPY_DISKETTE 0x00000004 | |
90 | #define FILE_WRITE_ONCE_MEDIA 0x00000008 | |
91 | #define FILE_REMOTE_DEVICE 0x00000010 | |
92 | #define FILE_DEVICE_IS_MOUNTED 0x00000020 | |
93 | #define FILE_VIRTUAL_VOLUME 0x00000040 | |
94 | #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 | |
95 | #define FILE_DEVICE_SECURE_OPEN 0x00000100 | |
96 | ||
4c153b24 CV |
97 | /* Transaction access rights. */ |
98 | #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x3F) | |
99 | ||
742e27be CF |
100 | typedef enum _FILE_INFORMATION_CLASS |
101 | { | |
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 | FileIdBothDirectoryInformation, // 37 | |
139 | FileIdFullDirectoryInformation, // 38 | |
140 | FileValidDataLengthInformation, // 39 | |
141 | FileShortNameInformation, // 40 | |
142 | FileMaximumInformation | |
143 | } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; | |
144 | ||
788e7da1 CV |
145 | typedef struct _FILE_NAMES_INFORMATION |
146 | { | |
147 | ULONG NextEntryOffset; | |
148 | ULONG FileIndex; | |
149 | ULONG FileNameLength; | |
150 | WCHAR FileName[1]; | |
151 | } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION; | |
152 | ||
214c3a11 CV |
153 | typedef struct _FILE_DIRECTORY_INFORMATION { |
154 | ULONG NextEntryOffset; | |
155 | ULONG FileIndex; | |
156 | LARGE_INTEGER CreationTime; | |
157 | LARGE_INTEGER LastAccessTime; | |
158 | LARGE_INTEGER LastWriteTime; | |
159 | LARGE_INTEGER ChangeTime; | |
160 | LARGE_INTEGER EndOfFile; | |
161 | LARGE_INTEGER AllocationSize; | |
162 | ULONG FileAttributes; | |
163 | ULONG FileNameLength; | |
164 | WCHAR FileName[1]; | |
165 | } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; | |
166 | ||
3432d6f1 | 167 | typedef struct _FILE_BOTH_DIRECTORY_INFORMATION |
742e27be CF |
168 | { |
169 | ULONG NextEntryOffset; | |
170 | ULONG FileIndex; | |
171 | LARGE_INTEGER CreationTime; | |
172 | LARGE_INTEGER LastAccessTime; | |
173 | LARGE_INTEGER LastWriteTime; | |
174 | LARGE_INTEGER ChangeTime; | |
175 | LARGE_INTEGER EndOfFile; | |
176 | LARGE_INTEGER AllocationSize; | |
177 | ULONG FileAttributes; | |
178 | ULONG FileNameLength; | |
179 | ULONG EaSize; | |
180 | CCHAR ShortNameLength; | |
181 | WCHAR ShortName[12]; | |
182 | WCHAR FileName[1]; | |
3432d6f1 | 183 | } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION; |
742e27be CF |
184 | |
185 | typedef struct _FILE_ID_BOTH_DIR_INFORMATION | |
186 | { | |
187 | ULONG NextEntryOffset; | |
188 | ULONG FileIndex; | |
189 | LARGE_INTEGER CreationTime; | |
190 | LARGE_INTEGER LastAccessTime; | |
191 | LARGE_INTEGER LastWriteTime; | |
192 | LARGE_INTEGER ChangeTime; | |
193 | LARGE_INTEGER EndOfFile; | |
194 | LARGE_INTEGER AllocationSize; | |
195 | ULONG FileAttributes; | |
196 | ULONG FileNameLength; | |
197 | ULONG EaSize; | |
198 | CCHAR ShortNameLength; | |
199 | WCHAR ShortName[12]; | |
200 | LARGE_INTEGER FileId; | |
201 | WCHAR FileName[1]; | |
202 | } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION; | |
203 | ||
204 | ||
f90e23f2 | 205 | #define AT_EXTENDABLE_FILE 0x00002000 |
5a101414 | 206 | #define AT_ROUND_TO_PAGE 0x40000000 |
6d11044c | 207 | |
1f5c3042 CV |
208 | #define LOCK_VM_IN_WSL 1 |
209 | #define LOCK_VM_IN_RAM 2 | |
210 | ||
e9c8cb31 | 211 | #define DIRECTORY_QUERY 1 |
c46d7be9 CV |
212 | #define DIRECTORY_TRAVERSE 2 |
213 | #define DIRECTORY_CREATE_OBJECT 4 | |
214 | #define DIRECTORY_CREATE_SUBDIRECTORY 8 | |
a998dd70 | 215 | #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x0f) |
e9c8cb31 | 216 | |
43f65cdd CV |
217 | #define SYMBOLIC_LINK_QUERY 1 |
218 | ||
c46d7be9 | 219 | #define EVENT_QUERY_STATE 1 |
abbde487 CV |
220 | #define SEMAPHORE_QUERY_STATE 1 |
221 | ||
222 | /* Specific ACCESS_MASKSs for objects created in Cygwin. */ | |
223 | #define CYG_SHARED_DIR_ACCESS (DIRECTORY_QUERY \ | |
025c1fac CF |
224 | | DIRECTORY_TRAVERSE \ |
225 | | DIRECTORY_CREATE_SUBDIRECTORY \ | |
226 | | DIRECTORY_CREATE_OBJECT \ | |
227 | | READ_CONTROL) | |
abbde487 CV |
228 | |
229 | #define CYG_MUTANT_ACCESS (MUTANT_QUERY_STATE \ | |
230 | | SYNCHRONIZE \ | |
231 | | READ_CONTROL) | |
232 | ||
233 | #define CYG_EVENT_ACCESS (EVENT_QUERY_STATE \ | |
234 | | EVENT_MODIFY_STATE \ | |
235 | | SYNCHRONIZE \ | |
236 | | READ_CONTROL) | |
237 | ||
238 | #define CYG_SEMAPHORE_ACCESS (SEMAPHORE_QUERY_STATE \ | |
239 | | SEMAPHORE_MODIFY_STATE \ | |
240 | | SYNCHRONIZE \ | |
241 | | READ_CONTROL) | |
c46d7be9 | 242 | |
9ba913a5 | 243 | typedef ULONG KAFFINITY; |
6d87f7d7 CF |
244 | |
245 | typedef enum _SYSTEM_INFORMATION_CLASS | |
246 | { | |
247 | SystemBasicInformation = 0, | |
9ba913a5 CF |
248 | SystemPerformanceInformation = 2, |
249 | SystemTimeOfDayInformation = 3, | |
6d87f7d7 | 250 | SystemProcessesAndThreadsInformation = 5, |
9ba913a5 | 251 | SystemProcessorTimes = 8, |
891d1990 | 252 | SystemPagefileInformation = 18, |
6d87f7d7 | 253 | /* There are a lot more of these... */ |
8c8d0db4 CV |
254 | } SYSTEM_INFORMATION_CLASS; |
255 | ||
6d87f7d7 CF |
256 | typedef struct _SYSTEM_BASIC_INFORMATION |
257 | { | |
8c8d0db4 CV |
258 | ULONG Unknown; |
259 | ULONG MaximumIncrement; | |
260 | ULONG PhysicalPageSize; | |
261 | ULONG NumberOfPhysicalPages; | |
262 | ULONG LowestPhysicalPage; | |
263 | ULONG HighestPhysicalPage; | |
264 | ULONG AllocationGranularity; | |
265 | ULONG LowestUserAddress; | |
266 | ULONG HighestUserAddress; | |
267 | ULONG ActiveProcessors; | |
9ba913a5 | 268 | UCHAR NumberProcessors; |
8c8d0db4 CV |
269 | } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; |
270 | ||
891d1990 CV |
271 | typedef struct _SYSTEM_PAGEFILE_INFORMATION |
272 | { | |
273 | ULONG NextEntryOffset; | |
274 | ULONG CurrentSize; | |
275 | ULONG TotalUsed; | |
276 | ULONG PeakUsed; | |
277 | UNICODE_STRING FileName; | |
278 | } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION; | |
279 | ||
91a2f87b | 280 | typedef struct __attribute__ ((aligned (8))) _SYSTEM_PROCESSOR_TIMES |
9ba913a5 CF |
281 | { |
282 | LARGE_INTEGER IdleTime; | |
283 | LARGE_INTEGER KernelTime; | |
284 | LARGE_INTEGER UserTime; | |
285 | LARGE_INTEGER DpcTime; | |
286 | LARGE_INTEGER InterruptTime; | |
287 | ULONG InterruptCount; | |
288 | } SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES; | |
289 | ||
6d87f7d7 CF |
290 | typedef LONG KPRIORITY; |
291 | typedef struct _VM_COUNTERS | |
292 | { | |
293 | ULONG PeakVirtualSize; | |
294 | ULONG VirtualSize; | |
295 | ULONG PageFaultCount; | |
296 | ULONG PeakWorkingSetSize; | |
297 | ULONG WorkingSetSize; | |
298 | ULONG QuotaPeakPagedPoolUsage; | |
299 | ULONG QuotaPagedPoolUsage; | |
300 | ULONG QuotaPeakNonPagedPoolUsage; | |
301 | ULONG QuotaNonPagedPoolUsage; | |
302 | ULONG PagefileUsage; | |
303 | ULONG PeakPagefileUsage; | |
304 | } VM_COUNTERS, *PVM_COUNTERS; | |
305 | ||
6d87f7d7 CF |
306 | typedef struct _CLIENT_ID |
307 | { | |
308 | HANDLE UniqueProcess; | |
309 | HANDLE UniqueThread; | |
310 | } CLIENT_ID, *PCLIENT_ID; | |
311 | ||
312 | typedef enum | |
313 | { | |
314 | StateInitialized, | |
315 | StateReady, | |
316 | StateRunning, | |
317 | StateStandby, | |
318 | StateTerminated, | |
319 | StateWait, | |
320 | StateTransition, | |
321 | StateUnknown, | |
322 | } THREAD_STATE; | |
8c8d0db4 | 323 | |
6d87f7d7 CF |
324 | typedef enum |
325 | { | |
326 | Executive, | |
327 | FreePage, | |
328 | PageIn, | |
329 | PoolAllocation, | |
330 | DelayExecution, | |
331 | Suspended, | |
332 | UserRequest, | |
333 | WrExecutive, | |
334 | WrFreePage, | |
335 | WrPageIn, | |
336 | WrPoolAllocation, | |
337 | WrDelayExecution, | |
338 | WrSuspended, | |
339 | WrUserRequest, | |
340 | WrEventPair, | |
341 | WrQueue, | |
342 | WrLpcReceive, | |
343 | WrLpcReply, | |
344 | WrVirtualMemory, | |
345 | WrPageOut, | |
346 | WrRendezvous, | |
347 | Spare2, | |
348 | Spare3, | |
349 | Spare4, | |
350 | Spare5, | |
351 | Spare6, | |
352 | WrKernel, | |
353 | MaximumWaitReason | |
354 | } KWAIT_REASON; | |
355 | ||
356 | typedef struct _SYSTEM_THREADS | |
357 | { | |
358 | LARGE_INTEGER KernelTime; | |
359 | LARGE_INTEGER UserTime; | |
360 | LARGE_INTEGER CreateTime; | |
361 | ULONG WaitTime; | |
362 | PVOID StartAddress; | |
363 | CLIENT_ID ClientId; | |
364 | KPRIORITY Priority; | |
365 | KPRIORITY BasePriority; | |
366 | ULONG ContextSwitchCount; | |
367 | THREAD_STATE State; | |
368 | KWAIT_REASON WaitReason; | |
9ba913a5 | 369 | DWORD Reserved; |
6d87f7d7 CF |
370 | } SYSTEM_THREADS, *PSYSTEM_THREADS; |
371 | ||
372 | typedef struct _SYSTEM_PROCESSES | |
373 | { | |
374 | ULONG NextEntryDelta; | |
9ba913a5 | 375 | ULONG ThreadCount; |
6d87f7d7 CF |
376 | ULONG Reserved1[6]; |
377 | LARGE_INTEGER CreateTime; | |
378 | LARGE_INTEGER UserTime; | |
379 | LARGE_INTEGER KernelTime; | |
380 | UNICODE_STRING ProcessName; | |
381 | KPRIORITY BasePriority; | |
382 | ULONG ProcessId; | |
383 | ULONG InheritedFromProcessId; | |
384 | ULONG HandleCount; | |
385 | ULONG Reserved2[2]; | |
386 | VM_COUNTERS VmCounters; | |
387 | IO_COUNTERS IoCounters; | |
388 | SYSTEM_THREADS Threads[1]; | |
389 | } SYSTEM_PROCESSES, *PSYSTEM_PROCESSES; | |
390 | ||
99069065 CV |
391 | typedef struct _IO_STATUS_BLOCK |
392 | { | |
393 | NTSTATUS Status; | |
394 | ULONG Information; | |
395 | } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; | |
396 | ||
9ba913a5 CF |
397 | typedef struct _SYSTEM_PERFORMANCE_INFORMATION |
398 | { | |
399 | LARGE_INTEGER IdleTime; | |
400 | LARGE_INTEGER ReadTransferCount; | |
401 | LARGE_INTEGER WriteTransferCount; | |
402 | LARGE_INTEGER OtherTransferCount; | |
403 | ULONG ReadOperationCount; | |
404 | ULONG WriteOperationCount; | |
405 | ULONG OtherOperationCount; | |
406 | ULONG AvailablePages; | |
407 | ULONG TotalCommittedPages; | |
408 | ULONG TotalCommitLimit; | |
409 | ULONG PeakCommitment; | |
410 | ULONG PageFaults; | |
411 | ULONG WriteCopyFaults; | |
412 | ULONG TransitionFaults; | |
413 | ULONG Reserved1; | |
414 | ULONG DemandZeroFaults; | |
415 | ULONG PagesRead; | |
416 | ULONG PageReadIos; | |
417 | ULONG Reserved2[2]; | |
418 | ULONG PagefilePagesWritten; | |
419 | ULONG PagefilePageWriteIos; | |
420 | ULONG MappedFilePagesWritten; | |
421 | ULONG MappedFilePageWriteIos; | |
422 | ULONG PagedPoolUsage; | |
423 | ULONG NonPagedPoolUsage; | |
424 | ULONG PagedPoolAllocs; | |
425 | ULONG PagedPoolFrees; | |
426 | ULONG NonPagedPoolAllocs; | |
427 | ULONG NonPagedPoolFrees; | |
428 | ULONG TotalFreeSystemPtes; | |
429 | ULONG SystemCodePage; | |
430 | ULONG TotalSystemDriverPages; | |
431 | ULONG TotalSystemCodePages; | |
432 | ULONG SmallNonPagedLookasideListAllocateHits; | |
433 | ULONG SmallPagedLookasideListAllocateHits; | |
434 | ULONG Reserved3; | |
435 | ULONG MmSystemCachePage; | |
436 | ULONG PagedPoolPage; | |
437 | ULONG SystemDriverPage; | |
438 | ULONG FastReadNoWait; | |
439 | ULONG FastReadWait; | |
440 | ULONG FastReadResourceMiss; | |
441 | ULONG FastReadNotPossible; | |
442 | ULONG FastMdlReadNoWait; | |
443 | ULONG FastMdlReadWait; | |
444 | ULONG FastMdlReadResourceMiss; | |
445 | ULONG FastMdlReadNotPossible; | |
446 | ULONG MapDataNoWait; | |
447 | ULONG MapDataWait; | |
448 | ULONG MapDataNoWaitMiss; | |
449 | ULONG MapDataWaitMiss; | |
450 | ULONG PinMappedDataCount; | |
451 | ULONG PinReadNoWait; | |
452 | ULONG PinReadWait; | |
453 | ULONG PinReadNoWaitMiss; | |
454 | ULONG PinReadWaitMiss; | |
455 | ULONG CopyReadNoWait; | |
456 | ULONG CopyReadWait; | |
457 | ULONG CopyReadNoWaitMiss; | |
458 | ULONG CopyReadWaitMiss; | |
459 | ULONG MdlReadNoWait; | |
460 | ULONG MdlReadWait; | |
461 | ULONG MdlReadNoWaitMiss; | |
462 | ULONG MdlReadWaitMiss; | |
463 | ULONG ReadAheadIos; | |
464 | ULONG LazyWriteIos; | |
465 | ULONG LazyWritePages; | |
466 | ULONG DataFlushes; | |
467 | ULONG DataPages; | |
468 | ULONG ContextSwitches; | |
469 | ULONG FirstLevelTbFills; | |
470 | ULONG SecondLevelTbFills; | |
471 | ULONG SystemCalls; | |
472 | } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION; | |
473 | ||
91a2f87b | 474 | typedef struct __attribute__ ((aligned(8))) _SYSTEM_TIME_OF_DAY_INFORMATION |
9ba913a5 CF |
475 | { |
476 | LARGE_INTEGER BootTime; | |
477 | LARGE_INTEGER CurrentTime; | |
478 | LARGE_INTEGER TimeZoneBias; | |
479 | ULONG CurrentTimeZoneId; | |
480 | } SYSTEM_TIME_OF_DAY_INFORMATION, *PSYSTEM_TIME_OF_DAY_INFORMATION; | |
481 | ||
482 | typedef enum _PROCESSINFOCLASS | |
483 | { | |
484 | ProcessBasicInformation = 0, | |
485 | ProcessQuotaLimits = 1, | |
486 | ProcessVmCounters = 3, | |
abbde487 CV |
487 | ProcessTimes = 4, |
488 | ProcessSessionInformation = 24, | |
4a42a258 | 489 | ProcessWow64Information = 26 |
9ba913a5 CF |
490 | } PROCESSINFOCLASS; |
491 | ||
492 | typedef struct _DEBUG_BUFFER | |
493 | { | |
494 | HANDLE SectionHandle; | |
495 | PVOID SectionBase; | |
496 | PVOID RemoteSectionBase; | |
497 | ULONG SectionBaseDelta; | |
498 | HANDLE EventPairHandle; | |
499 | ULONG Unknown[2]; | |
500 | HANDLE RemoteThreadHandle; | |
501 | ULONG InfoClassMask; | |
502 | ULONG SizeOfInfo; | |
503 | ULONG AllocatedSize; | |
504 | ULONG SectionSize; | |
505 | PVOID ModuleInformation; | |
506 | PVOID BackTraceInformation; | |
507 | PVOID HeapInformation; | |
508 | PVOID LockInformation; | |
509 | PVOID Reserved[9]; | |
510 | } DEBUG_BUFFER, *PDEBUG_BUFFER; | |
511 | ||
512 | typedef struct _DEBUG_HEAP_INFORMATION | |
513 | { | |
514 | ULONG Base; | |
515 | ULONG Flags; | |
516 | USHORT Granularity; | |
517 | USHORT Unknown; | |
518 | ULONG Allocated; | |
519 | ULONG Committed; | |
520 | ULONG TagCount; | |
521 | ULONG BlockCount; | |
522 | ULONG Reserved[7]; | |
523 | PVOID Tags; | |
524 | PVOID Blocks; | |
525 | } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION; | |
526 | ||
527 | typedef struct _DEBUG_MODULE_INFORMATION | |
528 | { | |
529 | ULONG Reserved[2]; | |
530 | ULONG Base; | |
531 | ULONG Size; | |
532 | ULONG Flags; | |
533 | USHORT Index; | |
534 | USHORT Unknown; | |
535 | USHORT LoadCount; | |
536 | USHORT ModuleNameOffset; | |
537 | CHAR ImageName[256]; | |
538 | } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION; | |
539 | ||
540 | typedef struct _KERNEL_USER_TIMES | |
541 | { | |
542 | LARGE_INTEGER CreateTime; | |
543 | LARGE_INTEGER ExitTime; | |
544 | LARGE_INTEGER KernelTime; | |
545 | LARGE_INTEGER UserTime; | |
546 | } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; | |
547 | ||
cbe2437b CV |
548 | typedef struct _RTL_USER_PROCESS_PARAMETERS |
549 | { | |
550 | ULONG AllocationSize; | |
551 | ULONG Size; | |
552 | ULONG Flags; | |
553 | ULONG DebugFlags; | |
554 | HANDLE hConsole; | |
555 | ULONG ProcessGroup; | |
556 | HANDLE hStdInput; | |
557 | HANDLE hStdOutput; | |
558 | HANDLE hStdError; | |
559 | UNICODE_STRING CurrentDirectoryName; | |
560 | HANDLE CurrentDirectoryHandle; | |
561 | UNICODE_STRING DllPath; | |
562 | UNICODE_STRING ImagePathName; | |
563 | UNICODE_STRING CommandLine; | |
564 | PWSTR Environment; | |
565 | ULONG dwX; | |
566 | ULONG dwY; | |
567 | ULONG dwXSize; | |
568 | ULONG dwYSize; | |
569 | ULONG dwXCountChars; | |
570 | ULONG dwYCountChars; | |
571 | ULONG dwFillAttribute; | |
572 | ULONG dwFlags; | |
573 | ULONG wShowWindow; | |
574 | UNICODE_STRING WindowTitle; | |
575 | UNICODE_STRING DesktopInfo; | |
576 | UNICODE_STRING ShellInfo; | |
577 | UNICODE_STRING RuntimeInfo; | |
578 | } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS; | |
579 | ||
580 | typedef struct _PEB | |
581 | { | |
582 | BYTE Reserved1[2]; | |
583 | BYTE BeingDebugged; | |
584 | BYTE Reserved2[9]; | |
585 | PVOID LoaderData; | |
586 | PRTL_USER_PROCESS_PARAMETERS ProcessParameters; | |
9c154abe CV |
587 | BYTE Reserved3[4]; |
588 | PVOID ProcessHeap; | |
589 | PRTL_CRITICAL_SECTION FastPebLock; | |
590 | BYTE Reserved4[436]; | |
cbe2437b CV |
591 | ULONG SessionId; |
592 | } PEB, *PPEB; | |
9ba913a5 | 593 | |
09ecdc85 CV |
594 | /* Simplifed definition, just to get the PEB pointer. */ |
595 | typedef struct _TEB | |
596 | { | |
597 | PVOID dummy[12]; | |
598 | PPEB Peb; | |
599 | /* A lot more follows... */ | |
600 | } TEB, *PTEB; | |
601 | ||
9c154abe CV |
602 | typedef struct _KUSER_SHARED_DATA |
603 | { | |
604 | BYTE Reserved1[0x2dc]; | |
605 | ULONG DismountCount; | |
606 | /* A lot more follows... */ | |
607 | } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA; | |
608 | ||
9ba913a5 CF |
609 | typedef struct _PROCESS_BASIC_INFORMATION |
610 | { | |
611 | NTSTATUS ExitStatus; | |
612 | PPEB PebBaseAddress; | |
613 | KAFFINITY AffinityMask; | |
614 | KPRIORITY BasePriority; | |
615 | ULONG UniqueProcessId; | |
616 | ULONG InheritedFromUniqueProcessId; | |
617 | } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION; | |
618 | ||
abbde487 CV |
619 | typedef struct _PROCESS_SESSION_INFORMATION |
620 | { | |
621 | ULONG SessionId; | |
622 | } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION; | |
623 | ||
9ba913a5 CF |
624 | typedef enum _MEMORY_INFORMATION_CLASS |
625 | { | |
626 | MemoryBasicInformation, | |
627 | MemoryWorkingSetList, | |
628 | MemorySectionName, | |
9f0d3f37 | 629 | MemoryBasicVlmInformation |
9ba913a5 CF |
630 | } MEMORY_INFORMATION_CLASS; |
631 | ||
2402700d CF |
632 | typedef struct _MEMORY_WORKING_SET_LIST |
633 | { | |
9ba913a5 CF |
634 | ULONG NumberOfPages; |
635 | ULONG WorkingSetList[1]; | |
636 | } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST; | |
637 | ||
2a24463d CV |
638 | typedef struct _FILE_BASIC_INFORMATION { |
639 | LARGE_INTEGER CreationTime; | |
640 | LARGE_INTEGER LastAccessTime; | |
641 | LARGE_INTEGER LastWriteTime; | |
642 | LARGE_INTEGER ChangeTime; | |
643 | ULONG FileAttributes; | |
644 | } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; | |
645 | ||
646 | typedef struct _FILE_STANDARD_INFORMATION { | |
647 | LARGE_INTEGER AllocationSize; | |
648 | LARGE_INTEGER EndOfFile; | |
649 | ULONG NumberOfLinks; | |
650 | BOOLEAN DeletePending; | |
651 | BOOLEAN Directory; | |
652 | } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; | |
653 | ||
e25b3402 CV |
654 | typedef struct _FILE_NETWORK_OPEN_INFORMATION { |
655 | LARGE_INTEGER CreationTime; | |
656 | LARGE_INTEGER LastAccessTime; | |
657 | LARGE_INTEGER LastWriteTime; | |
658 | LARGE_INTEGER ChangeTime; | |
659 | LARGE_INTEGER AllocationSize; | |
660 | LARGE_INTEGER EndOfFile; | |
661 | ULONG FileAttributes; | |
662 | } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; | |
663 | ||
2a24463d | 664 | typedef struct _FILE_INTERNAL_INFORMATION { |
9e5f45ed | 665 | LARGE_INTEGER FileId; |
2a24463d CV |
666 | } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; |
667 | ||
668 | typedef struct _FILE_EA_INFORMATION { | |
669 | ULONG EaSize; | |
670 | } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; | |
671 | ||
672 | typedef struct _FILE_ACCESS_INFORMATION { | |
673 | ACCESS_MASK AccessFlags; | |
674 | } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; | |
675 | ||
1c9b2968 CV |
676 | typedef struct _FILE_DISPOSITION_INFORMATION { |
677 | BOOLEAN DeleteFile; | |
678 | } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; | |
679 | ||
05726ddd CF |
680 | typedef struct _FILE_POSITION_INFORMATION { |
681 | LARGE_INTEGER CurrentByteOffset; | |
682 | } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; | |
2a24463d | 683 | |
7636b585 CV |
684 | typedef struct _FILE_END_OF_FILE_INFORMATION { |
685 | LARGE_INTEGER EndOfFile; | |
686 | } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; | |
687 | ||
2a24463d CV |
688 | typedef struct _FILE_MODE_INFORMATION { |
689 | ULONG Mode; | |
690 | } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; | |
691 | ||
692 | typedef struct _FILE_ALIGNMENT_INFORMATION { | |
693 | ULONG AlignmentRequirement; | |
694 | } FILE_ALIGNMENT_INFORMATION; | |
695 | ||
05726ddd CF |
696 | typedef struct _FILE_NAME_INFORMATION { |
697 | ULONG FileNameLength; | |
698 | WCHAR FileName[1]; | |
699 | } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; | |
2a24463d | 700 | |
745c29fe CV |
701 | typedef struct _FILE_LINK_INFORMATION { |
702 | BOOLEAN ReplaceIfExists; | |
703 | HANDLE RootDirectory; | |
704 | ULONG FileNameLength; | |
705 | WCHAR FileName[1]; | |
706 | } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; | |
707 | ||
cbfb7b1b CV |
708 | typedef struct _FILE_RENAME_INFORMATION { |
709 | BOOLEAN ReplaceIfExists; | |
710 | HANDLE RootDirectory; | |
711 | ULONG FileNameLength; | |
712 | WCHAR FileName[1]; | |
713 | } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; | |
714 | ||
2a24463d CV |
715 | typedef struct _FILE_ALL_INFORMATION { |
716 | FILE_BASIC_INFORMATION BasicInformation; | |
717 | FILE_STANDARD_INFORMATION StandardInformation; | |
718 | FILE_INTERNAL_INFORMATION InternalInformation; | |
719 | FILE_EA_INFORMATION EaInformation; | |
720 | FILE_ACCESS_INFORMATION AccessInformation; | |
721 | FILE_POSITION_INFORMATION PositionInformation; | |
722 | FILE_MODE_INFORMATION ModeInformation; | |
723 | FILE_ALIGNMENT_INFORMATION AlignmentInformation; | |
724 | FILE_NAME_INFORMATION NameInformation; | |
725 | } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; | |
2402700d | 726 | |
6644c628 CF |
727 | typedef struct _FILE_PIPE_LOCAL_INFORMATION |
728 | { | |
729 | ULONG NamedPipeType; | |
730 | ULONG NamedPipeConfiguration; | |
731 | ULONG MaximumInstances; | |
732 | ULONG CurrentInstances; | |
733 | ULONG InboundQuota; | |
734 | ULONG ReadDataAvailable; | |
735 | ULONG OutboundQuota; | |
736 | ULONG WriteQuotaAvailable; | |
737 | ULONG NamedPipeState; | |
738 | ULONG NamedPipeEnd; | |
739 | } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; | |
740 | ||
b8eac1de CV |
741 | typedef struct _FILE_COMPRESSION_INFORMATION |
742 | { | |
b75971ef | 743 | LARGE_INTEGER CompressedFileSize; |
b8eac1de CV |
744 | USHORT CompressionFormat; |
745 | UCHAR CompressionUnitShift; | |
b75971ef CV |
746 | UCHAR ChunkShift; |
747 | UCHAR ClusterShift; | |
748 | UCHAR Reserved[3]; | |
b8eac1de CV |
749 | } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION; |
750 | ||
d3dd7d36 CV |
751 | typedef struct _FILE_FS_DEVICE_INFORMATION |
752 | { | |
753 | ULONG DeviceType; | |
754 | ULONG Characteristics; | |
755 | } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; | |
756 | ||
3323df7e CV |
757 | typedef struct _FILE_FS_ATTRIBUTE_INFORMATION |
758 | { | |
759 | ULONG FileSystemAttributes; | |
760 | ULONG MaximumComponentNameLength; | |
761 | ULONG FileSystemNameLength; | |
762 | WCHAR FileSystemName[1]; | |
763 | } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; | |
764 | ||
f65c5a0a | 765 | #pragma pack(push,4) |
2a24463d CV |
766 | typedef struct _FILE_FS_VOLUME_INFORMATION |
767 | { | |
768 | LARGE_INTEGER VolumeCreationTime; | |
769 | ULONG VolumeSerialNumber; | |
770 | ULONG VolumeLabelLength; | |
771 | BOOLEAN SupportsObjects; | |
f65c5a0a | 772 | BOOLEAN __dummy; |
2a24463d CV |
773 | WCHAR VolumeLabel[1]; |
774 | } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; | |
f65c5a0a | 775 | #pragma pack(pop) |
2a24463d | 776 | |
3ff1a063 | 777 | typedef struct _FILE_FS_SIZE_INFORMATION |
2a24463d | 778 | { |
3ff1a063 CV |
779 | LARGE_INTEGER TotalAllocationUnits; |
780 | LARGE_INTEGER AvailableAllocationUnits; | |
781 | ULONG SectorsPerAllocationUnit; | |
782 | ULONG BytesPerSector; | |
783 | } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; | |
784 | ||
3323df7e CV |
785 | typedef struct _FILE_FS_FULL_SIZE_INFORMATION |
786 | { | |
787 | LARGE_INTEGER TotalAllocationUnits; | |
788 | LARGE_INTEGER CallerAvailableAllocationUnits; | |
789 | LARGE_INTEGER ActualAvailableAllocationUnits; | |
790 | ULONG SectorsPerAllocationUnit; | |
791 | ULONG BytesPerSector; | |
792 | } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; | |
793 | ||
4a96b0aa CV |
794 | typedef struct _FILE_FS_OBJECTID_INFORMATION { |
795 | UCHAR ObjectId[16]; | |
796 | UCHAR ExtendedInfo[48]; | |
797 | } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; | |
798 | ||
3ff1a063 CV |
799 | typedef enum _FSINFOCLASS { |
800 | FileFsVolumeInformation = 1, | |
801 | FileFsLabelInformation, | |
802 | FileFsSizeInformation, | |
803 | FileFsDeviceInformation, | |
804 | FileFsAttributeInformation, | |
805 | FileFsControlInformation, | |
806 | FileFsFullSizeInformation, | |
807 | FileFsObjectIdInformation, | |
808 | FileFsDriverPathInformation, | |
809 | FileFsMaximumInformation | |
2a24463d CV |
810 | } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; |
811 | ||
2402700d CF |
812 | typedef enum _OBJECT_INFORMATION_CLASS |
813 | { | |
b8eac1de CV |
814 | ObjectBasicInformation = 0, |
815 | ObjectNameInformation = 1, | |
816 | ObjectHandleInformation = 4 | |
2402700d CF |
817 | // and many more |
818 | } OBJECT_INFORMATION_CLASS; | |
819 | ||
a998dd70 CV |
820 | typedef struct _OBJECT_BASIC_INFORMATION |
821 | { | |
822 | ULONG Attributes; | |
823 | ACCESS_MASK GrantedAccess; | |
824 | ULONG HandleCount; | |
825 | ULONG PointerCount; | |
826 | ULONG PagedPoolUsage; | |
827 | ULONG NonPagedPoolUsage; | |
828 | ULONG Reserved[3]; | |
829 | ULONG NameInformationLength; | |
830 | ULONG TypeInformationLength; | |
831 | ULONG SecurityDescriptorLength; | |
832 | LARGE_INTEGER CreateTime; | |
833 | } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION; | |
834 | ||
2402700d CF |
835 | typedef struct _OBJECT_NAME_INFORMATION |
836 | { | |
837 | UNICODE_STRING Name; | |
838 | } OBJECT_NAME_INFORMATION; | |
839 | ||
e9c8cb31 CV |
840 | typedef struct _DIRECTORY_BASIC_INFORMATION |
841 | { | |
842 | UNICODE_STRING ObjectName; | |
843 | UNICODE_STRING ObjectTypeName; | |
844 | } DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION; | |
845 | ||
4635b6eb CV |
846 | typedef struct _FILE_GET_EA_INFORMATION |
847 | { | |
848 | ULONG NextEntryOffset; | |
849 | UCHAR EaNameLength; | |
850 | CHAR EaName[1]; | |
851 | } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION; | |
852 | ||
4635b6eb CV |
853 | typedef struct _FILE_FULL_EA_INFORMATION |
854 | { | |
855 | ULONG NextEntryOffset; | |
856 | UCHAR Flags; | |
857 | UCHAR EaNameLength; | |
858 | USHORT EaValueLength; | |
859 | CHAR EaName[1]; | |
860 | } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; | |
861 | ||
19afaa1a CV |
862 | typedef struct _FILE_MAILSLOT_SET_INFORMATION |
863 | { | |
864 | LARGE_INTEGER ReadTimeout; | |
865 | } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; | |
866 | ||
61c44b72 CV |
867 | typedef VOID NTAPI (*PIO_APC_ROUTINE)(PVOID, PIO_STATUS_BLOCK, ULONG); |
868 | ||
a998dd70 CV |
869 | typedef enum _EVENT_TYPE |
870 | { | |
871 | NotificationEvent = 0, | |
872 | SynchronizationEvent | |
873 | } EVENT_TYPE, *PEVENT_TYPE; | |
874 | ||
636c94d8 CV |
875 | typedef struct _EVENT_BASIC_INFORMATION |
876 | { | |
877 | EVENT_TYPE EventType; | |
878 | LONG SignalState; | |
879 | } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION; | |
880 | ||
881 | typedef enum _EVENT_INFORMATION_CLASS | |
882 | { | |
883 | EventBasicInformation = 0 | |
884 | } EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS; | |
885 | ||
6d87f7d7 CF |
886 | /* Function declarations for ntdll.dll. These don't appear in any |
887 | standard Win32 header. */ | |
f16706de CV |
888 | |
889 | #define NtCurrentProcess() ((HANDLE) 0xffffffff) | |
890 | #define NtCurrentThread() ((HANDLE) 0xfffffffe) | |
891 | ||
6d87f7d7 CF |
892 | extern "C" |
893 | { | |
cce28460 CV |
894 | NTSTATUS NTAPI NtAdjustPrivilegesToken (HANDLE, BOOLEAN, PTOKEN_PRIVILEGES, |
895 | ULONG, PTOKEN_PRIVILEGES, PULONG); | |
e9c8cb31 | 896 | NTSTATUS NTAPI NtClose (HANDLE); |
4c153b24 | 897 | NTSTATUS NTAPI NtCommitTransaction (HANDLE, BOOLEAN); |
a998dd70 CV |
898 | NTSTATUS NTAPI NtCreateDirectoryObject (PHANDLE, ACCESS_MASK, |
899 | POBJECT_ATTRIBUTES); | |
900 | NTSTATUS NTAPI NtCreateEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, | |
025c1fac | 901 | EVENT_TYPE, BOOLEAN); |
e8597065 CV |
902 | NTSTATUS NTAPI NtCreateFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
903 | PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG, | |
904 | ULONG, ULONG, PVOID, ULONG); | |
19afaa1a CV |
905 | NTSTATUS NTAPI NtCreateMailslotFile(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
906 | PIO_STATUS_BLOCK, ULONG, ULONG, ULONG, | |
907 | PLARGE_INTEGER); | |
a998dd70 CV |
908 | NTSTATUS NTAPI NtCreateMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
909 | BOOLEAN); | |
f90e23f2 | 910 | NTSTATUS NTAPI NtCreateSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
70300fdb | 911 | PLARGE_INTEGER, ULONG, ULONG, HANDLE); |
abbde487 CV |
912 | NTSTATUS NTAPI NtCreateSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
913 | LONG, LONG); | |
1fcc912f | 914 | NTSTATUS NTAPI NtCreateToken (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1ff9f4b9 CF |
915 | TOKEN_TYPE, PLUID, PLARGE_INTEGER, PTOKEN_USER, |
916 | PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_OWNER, | |
917 | PTOKEN_PRIMARY_GROUP, PTOKEN_DEFAULT_DACL, | |
918 | PTOKEN_SOURCE); | |
4c153b24 CV |
919 | NTSTATUS NTAPI NtCreateTransaction (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
920 | LPGUID, HANDLE, ULONG, ULONG, ULONG, | |
921 | PLARGE_INTEGER, PUNICODE_STRING); | |
61c44b72 | 922 | NTSTATUS NTAPI NtFsControlFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, |
214c3a11 CV |
923 | PIO_STATUS_BLOCK, ULONG, PVOID, ULONG, |
924 | PVOID, ULONG); | |
1f5c3042 | 925 | NTSTATUS NTAPI NtLockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG); |
6d87f7d7 CF |
926 | NTSTATUS NTAPI NtMapViewOfSection (HANDLE, HANDLE, PVOID *, ULONG, ULONG, |
927 | PLARGE_INTEGER, PULONG, SECTION_INHERIT, | |
928 | ULONG, ULONG); | |
1b61bf15 | 929 | NTSTATUS NTAPI NtNotifyChangeDirectoryFile (HANDLE, HANDLE, PIO_APC_ROUTINE, |
70300fdb | 930 | PVOID, PIO_STATUS_BLOCK, |
1b61bf15 CV |
931 | PFILE_NOTIFY_INFORMATION, ULONG, |
932 | ULONG, BOOLEAN); | |
e9c8cb31 | 933 | NTSTATUS NTAPI NtOpenDirectoryObject (PHANDLE, ACCESS_MASK, |
70300fdb | 934 | POBJECT_ATTRIBUTES); |
a998dd70 | 935 | NTSTATUS NTAPI NtOpenEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
99069065 CV |
936 | NTSTATUS NTAPI NtOpenFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
937 | PIO_STATUS_BLOCK, ULONG, ULONG); | |
a998dd70 | 938 | NTSTATUS NTAPI NtOpenMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
1fcc912f | 939 | NTSTATUS NTAPI NtOpenSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
abbde487 | 940 | NTSTATUS NTAPI NtOpenSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
43f65cdd CV |
941 | NTSTATUS NTAPI NtOpenSymbolicLinkObject (PHANDLE, ACCESS_MASK, |
942 | POBJECT_ATTRIBUTES); | |
1b61bf15 CV |
943 | /* WARNING! Don't rely on the timestamp information returned by |
944 | NtQueryAttributesFile. Only the DOS file attribute info is reliable. */ | |
945 | NTSTATUS NTAPI NtQueryAttributesFile (POBJECT_ATTRIBUTES, | |
946 | PFILE_BASIC_INFORMATION); | |
e9c8cb31 CV |
947 | NTSTATUS NTAPI NtQueryDirectoryFile(HANDLE, HANDLE, PVOID, PVOID, |
948 | PIO_STATUS_BLOCK, PVOID, ULONG, | |
949 | FILE_INFORMATION_CLASS, BOOLEAN, | |
950 | PUNICODE_STRING, BOOLEAN); | |
951 | NTSTATUS NTAPI NtQueryDirectoryObject (HANDLE, PVOID, ULONG, BOOLEAN, | |
70300fdb | 952 | BOOLEAN, PULONG, PULONG); |
4635b6eb CV |
953 | NTSTATUS NTAPI NtQueryEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, |
954 | BOOLEAN, PVOID, ULONG, PULONG, BOOLEAN); | |
636c94d8 CV |
955 | NTSTATUS NTAPI NtQueryEvent (HANDLE, EVENT_INFORMATION_CLASS, PVOID, ULONG, |
956 | PULONG); | |
e25b3402 CV |
957 | NTSTATUS NTAPI NtQueryFullAttributesFile (POBJECT_ATTRIBUTES, |
958 | PFILE_NETWORK_OPEN_INFORMATION); | |
2a24463d | 959 | NTSTATUS NTAPI NtQueryInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, |
6644c628 | 960 | ULONG, FILE_INFORMATION_CLASS); |
d74eced5 | 961 | NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS, |
a113a3c5 | 962 | PVOID, ULONG, PULONG); |
d74eced5 | 963 | NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, VOID *, |
a113a3c5 | 964 | ULONG, ULONG *); |
6d87f7d7 CF |
965 | NTSTATUS NTAPI NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS, |
966 | PVOID, ULONG, PULONG); | |
cef5dfd7 CF |
967 | |
968 | NTSTATUS WINAPI NtQuerySystemTime (PLARGE_INTEGER); | |
969 | ||
71ffba49 | 970 | NTSTATUS NTAPI NtQuerySecurityObject (HANDLE, SECURITY_INFORMATION, |
70300fdb | 971 | PSECURITY_DESCRIPTOR, ULONG, PULONG); |
43f65cdd | 972 | NTSTATUS NTAPI NtQuerySymbolicLinkObject (HANDLE, PUNICODE_STRING, PULONG); |
d74eced5 | 973 | NTSTATUS NTAPI NtQueryVirtualMemory (HANDLE, PVOID, MEMORY_INFORMATION_CLASS, |
a113a3c5 | 974 | PVOID, ULONG, PULONG); |
2a24463d CV |
975 | NTSTATUS NTAPI NtQueryVolumeInformationFile (HANDLE, IO_STATUS_BLOCK *, |
976 | VOID *, ULONG, | |
977 | FS_INFORMATION_CLASS); | |
d85bcb45 CV |
978 | NTSTATUS NTAPI NtReadFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, |
979 | PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER, | |
980 | PULONG); | |
4c153b24 | 981 | NTSTATUS NTAPI NtRollbackTransaction (HANDLE, BOOLEAN); |
4635b6eb | 982 | NTSTATUS NTAPI NtSetEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG); |
7636b585 CV |
983 | NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, |
984 | FILE_INFORMATION_CLASS); | |
f4ae6dc6 CV |
985 | NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION, |
986 | PSECURITY_DESCRIPTOR); | |
1f5c3042 | 987 | NTSTATUS NTAPI NtUnlockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG); |
6d87f7d7 | 988 | NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID); |
61c44b72 CV |
989 | NTSTATUS NTAPI NtWriteFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, |
990 | PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER, | |
991 | PULONG); | |
9c154abe CV |
992 | VOID NTAPI RtlAcquirePebLock (); |
993 | PVOID NTAPI RtlAllocateHeap (PVOID, ULONG, SIZE_T); | |
214c3a11 CV |
994 | NTSTATUS NTAPI RtlAppendUnicodeToString (PUNICODE_STRING, PCWSTR); |
995 | NTSTATUS NTAPI RtlAppendUnicodeStringToString (PUNICODE_STRING, | |
996 | PUNICODE_STRING); | |
cbe2437b CV |
997 | NTSTATUS NTAPI RtlAnsiStringToUnicodeString (PUNICODE_STRING, PANSI_STRING, |
998 | BOOLEAN); | |
214c3a11 CV |
999 | LONG NTAPI RtlCompareUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1000 | BOOLEAN); | |
7d5f6c18 | 1001 | NTSTATUS NTAPI RtlConvertSidToUnicodeString (PUNICODE_STRING, PSID, BOOLEAN); |
214c3a11 | 1002 | VOID NTAPI RtlCopyUnicodeString (PUNICODE_STRING, PUNICODE_STRING); |
855e63eb | 1003 | BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING, PCSTR); |
1feea0bf CV |
1004 | NTSTATUS NTAPI RtlDowncaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1005 | BOOLEAN); | |
9c154abe | 1006 | NTSTATUS NTAPI RtlEnterCriticalSection (PRTL_CRITICAL_SECTION); |
214c3a11 CV |
1007 | BOOLEAN NTAPI RtlEqualUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1008 | BOOLEAN); | |
8b5fa210 | 1009 | VOID NTAPI RtlFreeAnsiString (PANSI_STRING); |
9c154abe | 1010 | BOOLEAN NTAPI RtlFreeHeap (PVOID, ULONG, PVOID); |
8b5fa210 | 1011 | VOID NTAPI RtlFreeOemString (POEM_STRING); |
214c3a11 | 1012 | VOID NTAPI RtlFreeUnicodeString (PUNICODE_STRING); |
4c153b24 | 1013 | HANDLE NTAPI RtlGetCurrentTransaction (); |
214c3a11 | 1014 | VOID NTAPI RtlInitEmptyUnicodeString (PUNICODE_STRING, PCWSTR, USHORT); |
6d87f7d7 | 1015 | VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR); |
7d5f6c18 | 1016 | NTSTATUS NTAPI RtlIntegerToUnicodeString (ULONG, ULONG, PUNICODE_STRING); |
e9c8cb31 | 1017 | ULONG NTAPI RtlIsDosDeviceName_U (PCWSTR); |
9c154abe | 1018 | NTSTATUS NTAPI RtlLeaveCriticalSection (PRTL_CRITICAL_SECTION); |
6d87f7d7 | 1019 | ULONG NTAPI RtlNtStatusToDosError (NTSTATUS); |
cbe2437b CV |
1020 | NTSTATUS NTAPI RtlOemStringToUnicodeString (PUNICODE_STRING, POEM_STRING, |
1021 | BOOLEAN); | |
9235f3ea CV |
1022 | BOOLEAN NTAPI RtlPrefixUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1023 | BOOLEAN); | |
dec9daad | 1024 | VOID NTAPI RtlReleasePebLock (); |
214c3a11 | 1025 | VOID NTAPI RtlSecondsSince1970ToTime (ULONG, PLARGE_INTEGER); |
1121c57f | 1026 | NTSTATUS NTAPI RtlSetCurrentDirectory_U (PUNICODE_STRING); |
4c153b24 | 1027 | BOOLEAN NTAPI RtlSetCurrentTransaction (HANDLE); |
8b5fa210 CV |
1028 | NTSTATUS NTAPI RtlUnicodeStringToAnsiString (PANSI_STRING, PUNICODE_STRING, |
1029 | BOOLEAN); | |
1030 | NTSTATUS NTAPI RtlUnicodeStringToOemString (PANSI_STRING, PUNICODE_STRING, | |
1031 | BOOLEAN); | |
855e63eb | 1032 | WCHAR NTAPI RtlUpcaseUnicodeChar (WCHAR); |
1feea0bf CV |
1033 | NTSTATUS NTAPI RtlUpcaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1034 | BOOLEAN); | |
214c3a11 CV |
1035 | |
1036 | /* A few Rtl functions are either actually macros, or they just don't | |
61c44b72 CV |
1037 | exist even though they would be a big help. We implement them here, |
1038 | partly as inline functions. */ | |
1039 | ||
1040 | /* RtlInitEmptyUnicodeString is defined as a macro in wdm.h, but that file | |
1041 | is missing entirely in w32api. */ | |
214c3a11 CV |
1042 | inline |
1043 | VOID NTAPI RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf, | |
1044 | USHORT len) | |
1045 | { | |
1046 | dest->Length = 0; | |
1047 | dest->MaximumLength = len; | |
1048 | dest->Buffer = (PWSTR) buf; | |
1049 | } | |
61c44b72 CV |
1050 | /* Like RtlInitEmptyUnicodeString, but initialize Length to len, too. |
1051 | This is for instance useful when creating a UNICODE_STRING from an | |
1052 | NtQueryInformationFile info buffer, where the length of the filename | |
1053 | is known, but you can't rely on the string being 0-terminated. | |
1054 | If you know it's 0-terminated, just use RtlInitUnicodeString(). */ | |
214c3a11 | 1055 | inline |
74c5e8c7 | 1056 | VOID NTAPI RtlInitCountedUnicodeString (PUNICODE_STRING dest, PCWSTR buf, |
70300fdb | 1057 | USHORT len) |
214c3a11 CV |
1058 | { |
1059 | dest->Length = dest->MaximumLength = len; | |
1060 | dest->Buffer = (PWSTR) buf; | |
1061 | } | |
61c44b72 CV |
1062 | /* Split path into dirname and basename part. This function does not |
1063 | copy anything! It just initializes the dirname and basename | |
1064 | UNICODE_STRINGs so that their Buffer members point to the right spot | |
70300fdb | 1065 | into path's Buffer, and the Length (and MaximumLength) members are set |
61c44b72 CV |
1066 | to match the dirname part and the basename part. |
1067 | Note that dirname's Length is set so that it also includes the trailing | |
1068 | backslash. If you don't need it, just subtract sizeof(WCHAR) from | |
1069 | dirname.Length. */ | |
ceaf31f4 | 1070 | inline |
61c44b72 CV |
1071 | VOID NTAPI RtlSplitUnicodePath (PUNICODE_STRING path, PUNICODE_STRING dirname, |
1072 | PUNICODE_STRING basename) | |
ceaf31f4 CV |
1073 | { |
1074 | USHORT len = path->Length / sizeof (WCHAR); | |
1075 | while (len > 0 && path->Buffer[--len] != L'\\') | |
1076 | ; | |
1077 | ++len; | |
61c44b72 CV |
1078 | if (dirname) |
1079 | RtlInitCountedUnicodeString (dirname, path->Buffer, len * sizeof (WCHAR)); | |
1080 | if (basename) | |
1081 | RtlInitCountedUnicodeString (basename, &path->Buffer[len], | |
74c5e8c7 CV |
1082 | path->Length - len * sizeof (WCHAR)); |
1083 | } | |
61c44b72 | 1084 | /* Check if prefix is a prefix of path. */ |
74c5e8c7 | 1085 | inline |
8deb4118 CV |
1086 | BOOLEAN NTAPI RtlEqualUnicodePathPrefix (PUNICODE_STRING path, |
1087 | PUNICODE_STRING prefix, | |
81e98baf | 1088 | BOOLEAN caseinsensitive) |
74c5e8c7 | 1089 | { |
8deb4118 | 1090 | UNICODE_STRING p; |
74c5e8c7 | 1091 | |
74c5e8c7 | 1092 | RtlInitCountedUnicodeString (&p, path->Buffer, |
8deb4118 CV |
1093 | prefix->Length < path->Length |
1094 | ? prefix->Length : path->Length); | |
1095 | return RtlEqualUnicodeString (&p, prefix, caseinsensitive); | |
74c5e8c7 | 1096 | } |
61c44b72 | 1097 | /* Check if sufffix is a sufffix of path. */ |
74c5e8c7 | 1098 | inline |
8deb4118 CV |
1099 | BOOL NTAPI RtlEqualUnicodePathSuffix (PUNICODE_STRING path, |
1100 | PUNICODE_STRING suffix, | |
81e98baf | 1101 | BOOLEAN caseinsensitive) |
74c5e8c7 | 1102 | { |
8deb4118 | 1103 | UNICODE_STRING p; |
74c5e8c7 | 1104 | |
8deb4118 | 1105 | if (suffix->Length < path->Length) |
74c5e8c7 | 1106 | RtlInitCountedUnicodeString (&p, (PWCHAR) ((PBYTE) path->Buffer |
8deb4118 CV |
1107 | + path->Length - suffix->Length), |
1108 | suffix->Length); | |
74c5e8c7 CV |
1109 | else |
1110 | RtlInitCountedUnicodeString (&p, path->Buffer, path->Length); | |
8deb4118 | 1111 | return RtlEqualUnicodeString (&p, suffix, caseinsensitive); |
ceaf31f4 | 1112 | } |
61c44b72 CV |
1113 | /* Implemented in strfuncs.cc. Create a Hex UNICODE_STRING from a given |
1114 | 64 bit integer value. If append is TRUE, append the hex string, | |
1feea0bf | 1115 | otherwise overwrite dest. Returns either STATUS_SUCCESS, or |
61c44b72 CV |
1116 | STATUS_BUFFER_OVERFLOW, if the unicode buffer is too small (hasn't |
1117 | room for 16 WCHARs). */ | |
1118 | NTSTATUS NTAPI RtlInt64ToHexUnicodeString (ULONGLONG value, | |
1119 | PUNICODE_STRING dest, | |
1120 | BOOLEAN append); | |
669bdeb8 CV |
1121 | /* Set file attributes. Don't change file times. */ |
1122 | inline | |
1123 | NTSTATUS NTAPI NtSetAttributesFile (HANDLE h, ULONG attr) | |
1124 | { | |
1125 | IO_STATUS_BLOCK io; | |
1126 | FILE_BASIC_INFORMATION fbi; | |
1127 | fbi.CreationTime.QuadPart = fbi.LastAccessTime.QuadPart = | |
1128 | fbi.LastWriteTime.QuadPart = fbi.ChangeTime.QuadPart = 0LL; | |
1129 | fbi.FileAttributes = attr ?: FILE_ATTRIBUTE_NORMAL; | |
1130 | return NtSetInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation); | |
1131 | } | |
6d87f7d7 | 1132 | } |
cef5dfd7 | 1133 | #endif /*_NTDLL_H*/ |