]>
Commit | Line | Data |
---|---|---|
f5c1d231 | 1 | /* ntdll.h. Contains ntdll specific stuff not defined elsewhere. |
8c8d0db4 | 2 | |
bc837d22 CF |
3 | Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, |
4 | 2011, 2012 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 | ||
962f9a2c | 12 | #pragma once |
8912b2e5 | 13 | |
5ab123f4 CV |
14 | #include <ntstatus.h> |
15 | ||
dc4e4aab CW |
16 | /* custom status code: */ |
17 | #define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269) | |
93d606f6 | 18 | |
8912b2e5 CV |
19 | #define NtCurrentProcess() ((HANDLE) 0xffffffff) |
20 | #define NtCurrentThread() ((HANDLE) 0xfffffffe) | |
9ba913a5 | 21 | |
06e429fd | 22 | /* Creation information returned in IO_STATUS_BLOCK. */ |
61c44b72 CV |
23 | #define FILE_SUPERSEDED 0 |
24 | #define FILE_OPENED 1 | |
25 | #define FILE_CREATED 2 | |
26 | #define FILE_OVERWRITTEN 3 | |
27 | #define FILE_EXISTS 4 | |
28 | #define FILE_DOES_NOT_EXIST 5 | |
29 | ||
8912b2e5 | 30 | /* Relative file position values in NtWriteFile call. */ |
6ce2c241 CV |
31 | #define FILE_WRITE_TO_END_OF_FILE (-1LL) |
32 | #define FILE_USE_FILE_POINTER_POSITION (-2LL) | |
33 | ||
d3dd7d36 CV |
34 | /* Device Characteristics. */ |
35 | #define FILE_REMOVABLE_MEDIA 0x00000001 | |
36 | #define FILE_READ_ONLY_DEVICE 0x00000002 | |
37 | #define FILE_FLOPPY_DISKETTE 0x00000004 | |
38 | #define FILE_WRITE_ONCE_MEDIA 0x00000008 | |
39 | #define FILE_REMOTE_DEVICE 0x00000010 | |
40 | #define FILE_DEVICE_IS_MOUNTED 0x00000020 | |
41 | #define FILE_VIRTUAL_VOLUME 0x00000040 | |
42 | #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 | |
43 | #define FILE_DEVICE_SECURE_OPEN 0x00000100 | |
44 | ||
8912b2e5 CV |
45 | /* Allocation type values in NtMapViewOfSection call. */ |
46 | #define AT_EXTENDABLE_FILE 0x00002000 | |
47 | #define AT_ROUND_TO_PAGE 0x40000000 | |
48 | ||
49 | /* Lock type in NtLockVirtualMemory/NtUnlockVirtualMemory call. */ | |
50 | #define MAP_PROCESS 1 | |
51 | #define MAP_SYSTEM 2 | |
52 | ||
53 | /* Directory access rights (only in NT namespace). */ | |
54 | #define DIRECTORY_QUERY 1 | |
55 | #define DIRECTORY_TRAVERSE 2 | |
56 | #define DIRECTORY_CREATE_OBJECT 4 | |
57 | #define DIRECTORY_CREATE_SUBDIRECTORY 8 | |
58 | #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x0f) | |
59 | ||
60 | /* Symbolic link access rights (only in NT namespace). */ | |
61 | #define SYMBOLIC_LINK_QUERY 1 | |
62 | ||
4c153b24 CV |
63 | /* Transaction access rights. */ |
64 | #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x3F) | |
65 | ||
8912b2e5 CV |
66 | /* Event object access rights. */ |
67 | #define EVENT_QUERY_STATE 1 | |
68 | ||
69 | /* Semaphore access rights. */ | |
70 | #define SEMAPHORE_QUERY_STATE 1 | |
71 | ||
72 | /* Specific ACCESS_MASKSs for objects created in Cygwin. */ | |
73 | #define CYG_SHARED_DIR_ACCESS (DIRECTORY_QUERY \ | |
74 | | DIRECTORY_TRAVERSE \ | |
75 | | DIRECTORY_CREATE_SUBDIRECTORY \ | |
76 | | DIRECTORY_CREATE_OBJECT \ | |
77 | | READ_CONTROL) | |
78 | #define CYG_MUTANT_ACCESS (MUTANT_QUERY_STATE \ | |
79 | | SYNCHRONIZE \ | |
80 | | READ_CONTROL) | |
81 | #define CYG_EVENT_ACCESS (EVENT_QUERY_STATE \ | |
82 | | EVENT_MODIFY_STATE \ | |
83 | | SYNCHRONIZE \ | |
84 | | READ_CONTROL) | |
85 | #define CYG_SEMAPHORE_ACCESS (SEMAPHORE_QUERY_STATE \ | |
86 | | SEMAPHORE_MODIFY_STATE \ | |
87 | | SYNCHRONIZE \ | |
88 | | READ_CONTROL) | |
89 | ||
90 | /* Definitions for first parameter of RtlQueryRegistryValues. */ | |
91 | #define RTL_REGISTRY_ABSOLUTE 0 | |
92 | #define RTL_REGISTRY_SERVICES 1 | |
93 | #define RTL_REGISTRY_CONTROL 2 | |
94 | #define RTL_REGISTRY_WINDOWS_NT 3 | |
95 | #define RTL_REGISTRY_DEVICEMAP 4 | |
96 | #define RTL_REGISTRY_USER 5 | |
97 | #define RTL_REGISTRY_HANDLE 0x40000000 | |
98 | #define RTL_REGISTRY_OPTIONAL 0x80000000 | |
99 | ||
100 | /* Flags values for QueryTable parameter of RtlQueryRegistryValues. */ | |
101 | #define RTL_QUERY_REGISTRY_SUBKEY 0x01 | |
102 | #define RTL_QUERY_REGISTRY_TOPKEY 0x02 | |
103 | #define RTL_QUERY_REGISTRY_REQUIRED 0x04 | |
104 | #define RTL_QUERY_REGISTRY_NOVALUE 0x08 | |
105 | #define RTL_QUERY_REGISTRY_NOEXPAND 0x10 | |
106 | #define RTL_QUERY_REGISTRY_DIRECT 0x20 | |
107 | #define RTL_QUERY_REGISTRY_DELETE 0x40 | |
108 | #define RTL_QUERY_REGISTRY_NOSTRING 0x80 | |
109 | ||
110 | /* What RtlQueryProcessDebugInformation shall return. */ | |
111 | #define PDI_MODULES 0x01 | |
112 | #define PDI_HEAPS 0x04 | |
113 | #define PDI_HEAP_BLOCKS 0x10 | |
114 | ||
115 | /* VM working set list protection values. Returned by NtQueryVirtualMemory. */ | |
116 | #define WSLE_PAGE_READONLY 0x001 | |
117 | #define WSLE_PAGE_EXECUTE 0x002 | |
118 | #define WSLE_PAGE_EXECUTE_READ 0x003 | |
119 | #define WSLE_PAGE_READWRITE 0x004 | |
120 | #define WSLE_PAGE_WRITECOPY 0x005 | |
121 | #define WSLE_PAGE_EXECUTE_READWRITE 0x006 | |
122 | #define WSLE_PAGE_EXECUTE_WRITECOPY 0x007 | |
123 | #define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0 | |
124 | #define WSLE_PAGE_SHAREABLE 0x100 | |
125 | ||
126 | /* Known debug heap flags */ | |
127 | #define HEAP_FLAG_NOSERIALIZE 0x1 | |
128 | #define HEAP_FLAG_GROWABLE 0x2 | |
129 | #define HEAP_FLAG_EXCEPTIONS 0x4 | |
130 | #define HEAP_FLAG_NONDEFAULT 0x1000 | |
131 | #define HEAP_FLAG_SHAREABLE 0x8000 | |
132 | #define HEAP_FLAG_EXECUTABLE 0x40000 | |
133 | #define HEAP_FLAG_DEBUGGED 0x40000000 | |
134 | ||
135 | /* IOCTL code to impersonate client of named pipe. */ | |
136 | #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, \ | |
137 | METHOD_BUFFERED, FILE_ANY_ACCESS) | |
138 | ||
742e27be CF |
139 | typedef enum _FILE_INFORMATION_CLASS |
140 | { | |
141 | FileDirectoryInformation = 1, | |
142 | FileFullDirectoryInformation, // 2 | |
143 | FileBothDirectoryInformation, // 3 | |
144 | FileBasicInformation, // 4 wdm | |
145 | FileStandardInformation, // 5 wdm | |
146 | FileInternalInformation, // 6 | |
147 | FileEaInformation, // 7 | |
148 | FileAccessInformation, // 8 | |
149 | FileNameInformation, // 9 | |
150 | FileRenameInformation, // 10 | |
151 | FileLinkInformation, // 11 | |
152 | FileNamesInformation, // 12 | |
153 | FileDispositionInformation, // 13 | |
154 | FilePositionInformation, // 14 wdm | |
155 | FileFullEaInformation, // 15 | |
156 | FileModeInformation, // 16 | |
157 | FileAlignmentInformation, // 17 | |
158 | FileAllInformation, // 18 | |
159 | FileAllocationInformation, // 19 | |
160 | FileEndOfFileInformation, // 20 wdm | |
161 | FileAlternateNameInformation, // 21 | |
162 | FileStreamInformation, // 22 | |
163 | FilePipeInformation, // 23 | |
164 | FilePipeLocalInformation, // 24 | |
165 | FilePipeRemoteInformation, // 25 | |
166 | FileMailslotQueryInformation, // 26 | |
167 | FileMailslotSetInformation, // 27 | |
168 | FileCompressionInformation, // 28 | |
169 | FileObjectIdInformation, // 29 | |
170 | FileCompletionInformation, // 30 | |
171 | FileMoveClusterInformation, // 31 | |
172 | FileQuotaInformation, // 32 | |
173 | FileReparsePointInformation, // 33 | |
174 | FileNetworkOpenInformation, // 34 | |
175 | FileAttributeTagInformation, // 35 | |
176 | FileTrackingInformation, // 36 | |
177 | FileIdBothDirectoryInformation, // 37 | |
178 | FileIdFullDirectoryInformation, // 38 | |
179 | FileValidDataLengthInformation, // 39 | |
180 | FileShortNameInformation, // 40 | |
181 | FileMaximumInformation | |
182 | } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; | |
183 | ||
788e7da1 CV |
184 | typedef struct _FILE_NAMES_INFORMATION |
185 | { | |
186 | ULONG NextEntryOffset; | |
187 | ULONG FileIndex; | |
188 | ULONG FileNameLength; | |
189 | WCHAR FileName[1]; | |
190 | } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION; | |
191 | ||
214c3a11 CV |
192 | typedef struct _FILE_DIRECTORY_INFORMATION { |
193 | ULONG NextEntryOffset; | |
194 | ULONG FileIndex; | |
195 | LARGE_INTEGER CreationTime; | |
196 | LARGE_INTEGER LastAccessTime; | |
197 | LARGE_INTEGER LastWriteTime; | |
198 | LARGE_INTEGER ChangeTime; | |
199 | LARGE_INTEGER EndOfFile; | |
200 | LARGE_INTEGER AllocationSize; | |
201 | ULONG FileAttributes; | |
202 | ULONG FileNameLength; | |
203 | WCHAR FileName[1]; | |
204 | } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; | |
205 | ||
3432d6f1 | 206 | typedef struct _FILE_BOTH_DIRECTORY_INFORMATION |
742e27be CF |
207 | { |
208 | ULONG NextEntryOffset; | |
209 | ULONG FileIndex; | |
210 | LARGE_INTEGER CreationTime; | |
211 | LARGE_INTEGER LastAccessTime; | |
212 | LARGE_INTEGER LastWriteTime; | |
213 | LARGE_INTEGER ChangeTime; | |
214 | LARGE_INTEGER EndOfFile; | |
215 | LARGE_INTEGER AllocationSize; | |
216 | ULONG FileAttributes; | |
217 | ULONG FileNameLength; | |
218 | ULONG EaSize; | |
219 | CCHAR ShortNameLength; | |
220 | WCHAR ShortName[12]; | |
221 | WCHAR FileName[1]; | |
3432d6f1 | 222 | } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION; |
742e27be CF |
223 | |
224 | typedef struct _FILE_ID_BOTH_DIR_INFORMATION | |
225 | { | |
226 | ULONG NextEntryOffset; | |
227 | ULONG FileIndex; | |
228 | LARGE_INTEGER CreationTime; | |
229 | LARGE_INTEGER LastAccessTime; | |
230 | LARGE_INTEGER LastWriteTime; | |
231 | LARGE_INTEGER ChangeTime; | |
232 | LARGE_INTEGER EndOfFile; | |
233 | LARGE_INTEGER AllocationSize; | |
234 | ULONG FileAttributes; | |
235 | ULONG FileNameLength; | |
236 | ULONG EaSize; | |
237 | CCHAR ShortNameLength; | |
238 | WCHAR ShortName[12]; | |
239 | LARGE_INTEGER FileId; | |
240 | WCHAR FileName[1]; | |
241 | } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION; | |
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, |
44d2fc0a | 252 | SystemHandleInformation = 16, |
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, | |
6f94526c CV |
490 | ProcessWow64Information = 26, |
491 | ProcessImageFileName = 27 | |
9ba913a5 CF |
492 | } PROCESSINFOCLASS; |
493 | ||
494 | typedef struct _DEBUG_BUFFER | |
495 | { | |
496 | HANDLE SectionHandle; | |
497 | PVOID SectionBase; | |
498 | PVOID RemoteSectionBase; | |
499 | ULONG SectionBaseDelta; | |
500 | HANDLE EventPairHandle; | |
501 | ULONG Unknown[2]; | |
502 | HANDLE RemoteThreadHandle; | |
503 | ULONG InfoClassMask; | |
504 | ULONG SizeOfInfo; | |
505 | ULONG AllocatedSize; | |
506 | ULONG SectionSize; | |
507 | PVOID ModuleInformation; | |
508 | PVOID BackTraceInformation; | |
509 | PVOID HeapInformation; | |
510 | PVOID LockInformation; | |
511 | PVOID Reserved[9]; | |
512 | } DEBUG_BUFFER, *PDEBUG_BUFFER; | |
513 | ||
514 | typedef struct _DEBUG_HEAP_INFORMATION | |
515 | { | |
516 | ULONG Base; | |
517 | ULONG Flags; | |
518 | USHORT Granularity; | |
519 | USHORT Unknown; | |
520 | ULONG Allocated; | |
521 | ULONG Committed; | |
522 | ULONG TagCount; | |
523 | ULONG BlockCount; | |
524 | ULONG Reserved[7]; | |
525 | PVOID Tags; | |
526 | PVOID Blocks; | |
527 | } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION; | |
528 | ||
b4966f91 CV |
529 | typedef struct _DEBUG_HEAP_ARRAY |
530 | { | |
531 | ULONG Count; | |
532 | DEBUG_HEAP_INFORMATION Heaps[1]; | |
533 | } DEBUG_HEAP_ARRAY, *PDEBUG_HEAP_ARRAY; | |
534 | ||
535 | typedef struct _DEBUG_HEAP_BLOCK | |
536 | { | |
537 | ULONG Size; | |
538 | ULONG Flags; | |
539 | ULONG Committed; | |
540 | ULONG Address; | |
541 | } DEBUG_HEAP_BLOCK, *PDEBUG_HEAP_BLOCK; | |
542 | ||
9ba913a5 CF |
543 | typedef struct _DEBUG_MODULE_INFORMATION |
544 | { | |
545 | ULONG Reserved[2]; | |
546 | ULONG Base; | |
547 | ULONG Size; | |
548 | ULONG Flags; | |
549 | USHORT Index; | |
550 | USHORT Unknown; | |
551 | USHORT LoadCount; | |
552 | USHORT ModuleNameOffset; | |
553 | CHAR ImageName[256]; | |
554 | } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION; | |
555 | ||
31ddf45d CV |
556 | typedef struct _DEBUG_MODULE_ARRAY |
557 | { | |
558 | ULONG Count; | |
559 | DEBUG_MODULE_INFORMATION Modules[1]; | |
560 | } DEBUG_MODULE_ARRAY, *PDEBUG_MODULE_ARRAY; | |
561 | ||
9ba913a5 CF |
562 | typedef struct _KERNEL_USER_TIMES |
563 | { | |
564 | LARGE_INTEGER CreateTime; | |
565 | LARGE_INTEGER ExitTime; | |
566 | LARGE_INTEGER KernelTime; | |
567 | LARGE_INTEGER UserTime; | |
568 | } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; | |
569 | ||
833db548 CV |
570 | typedef struct _LDR_DATA_TABLE_ENTRY |
571 | { | |
572 | LIST_ENTRY InLoadOrderLinks; | |
573 | LIST_ENTRY InMemoryOrderLinks; | |
574 | LIST_ENTRY InInitializationOrderLinks; | |
575 | PVOID DllBase; | |
576 | PVOID EntryPoint; | |
577 | ULONG SizeOfImage; | |
578 | UNICODE_STRING FullDllName; | |
579 | UNICODE_STRING BaseDllName; | |
580 | ULONG Flags; | |
581 | WORD LoadCount; | |
582 | /* More follows. Left out since it's just not used. The aforementioned | |
583 | part of the structure is stable from at least NT4 up to Windows 7, | |
584 | including WOW64. */ | |
585 | } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; | |
586 | ||
587 | typedef struct _PEB_LDR_DATA | |
588 | { | |
589 | ULONG Length; | |
590 | UCHAR Initialized; | |
591 | PVOID SsHandle; | |
592 | LIST_ENTRY InLoadOrderModuleList; | |
593 | LIST_ENTRY InMemoryOrderModuleList; | |
594 | LIST_ENTRY InInitializationOrderModuleList; | |
595 | PVOID EntryInProgress; | |
596 | } PEB_LDR_DATA, *PPEB_LDR_DATA; | |
597 | ||
cbe2437b CV |
598 | typedef struct _RTL_USER_PROCESS_PARAMETERS |
599 | { | |
600 | ULONG AllocationSize; | |
601 | ULONG Size; | |
602 | ULONG Flags; | |
603 | ULONG DebugFlags; | |
604 | HANDLE hConsole; | |
605 | ULONG ProcessGroup; | |
606 | HANDLE hStdInput; | |
607 | HANDLE hStdOutput; | |
608 | HANDLE hStdError; | |
609 | UNICODE_STRING CurrentDirectoryName; | |
610 | HANDLE CurrentDirectoryHandle; | |
611 | UNICODE_STRING DllPath; | |
612 | UNICODE_STRING ImagePathName; | |
613 | UNICODE_STRING CommandLine; | |
614 | PWSTR Environment; | |
615 | ULONG dwX; | |
616 | ULONG dwY; | |
617 | ULONG dwXSize; | |
618 | ULONG dwYSize; | |
619 | ULONG dwXCountChars; | |
620 | ULONG dwYCountChars; | |
621 | ULONG dwFillAttribute; | |
622 | ULONG dwFlags; | |
623 | ULONG wShowWindow; | |
624 | UNICODE_STRING WindowTitle; | |
625 | UNICODE_STRING DesktopInfo; | |
626 | UNICODE_STRING ShellInfo; | |
627 | UNICODE_STRING RuntimeInfo; | |
628 | } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS; | |
629 | ||
630 | typedef struct _PEB | |
631 | { | |
632 | BYTE Reserved1[2]; | |
633 | BYTE BeingDebugged; | |
634 | BYTE Reserved2[9]; | |
833db548 | 635 | PPEB_LDR_DATA Ldr; |
cbe2437b | 636 | PRTL_USER_PROCESS_PARAMETERS ProcessParameters; |
9c154abe CV |
637 | BYTE Reserved3[4]; |
638 | PVOID ProcessHeap; | |
639 | PRTL_CRITICAL_SECTION FastPebLock; | |
1cb14724 CV |
640 | BYTE Reserved4[8]; |
641 | ULONG EnvironmentUpdateCount; | |
642 | BYTE Reserved5[424]; | |
cbe2437b CV |
643 | ULONG SessionId; |
644 | } PEB, *PPEB; | |
9ba913a5 | 645 | |
89d3c72d | 646 | /* Simplified definition, just to get stuff we're interested in. */ |
09ecdc85 CV |
647 | typedef struct _TEB |
648 | { | |
cdb42313 CV |
649 | NT_TIB Tib; |
650 | PVOID EnvironmentPointer; | |
651 | CLIENT_ID ClientId; | |
652 | PVOID ActiveRpcHandle; | |
653 | PVOID ThreadLocalStoragePointer; | |
654 | PPEB Peb; | |
89d3c72d CV |
655 | ULONG LastErrorValue; |
656 | ULONG CountOfOwnedCriticalSections; | |
657 | PVOID _reserved1[2]; | |
658 | ULONG _reserved2[31]; | |
659 | PVOID WOW32Reserved; | |
660 | ULONG CurrentLocale; | |
661 | ULONG FpSoftwareStatusRegister; | |
662 | PVOID SystemReserved1[54]; | |
663 | LONG ExceptionCode; | |
664 | PVOID ActivationContextStackPointer; | |
665 | UCHAR SpareBytes1[36]; | |
666 | ULONG TxFsContext; | |
667 | ULONG GdiTebBatch[312]; | |
668 | CLIENT_ID RealClientId; | |
669 | PVOID GdiCachedProcessHandle; | |
670 | ULONG GdiClientPID; | |
671 | ULONG GdiClientTID; | |
672 | PVOID GdiThreadLocalInfo; | |
673 | ULONG Win32ClientInfo[62]; | |
674 | PVOID glDispatchTable[233]; | |
675 | ULONG glReserved1[29]; | |
676 | PVOID glReserved2[6]; | |
677 | ULONG LastStatusValue; | |
678 | UNICODE_STRING StaticUnicodeString; | |
679 | WCHAR StaticUnicodeBuffer[261]; | |
680 | PVOID DeallocationStack; | |
09ecdc85 CV |
681 | /* A lot more follows... */ |
682 | } TEB, *PTEB; | |
683 | ||
cd506492 CV |
684 | typedef struct _KSYSTEM_TIME |
685 | { | |
686 | ULONG LowPart; | |
687 | LONG High1Time; | |
688 | LONG High2Time; | |
689 | } KSYSTEM_TIME, *PKSYSTEM_TIME; | |
690 | ||
9c154abe CV |
691 | typedef struct _KUSER_SHARED_DATA |
692 | { | |
cd506492 CV |
693 | BYTE Reserved1[0x08]; |
694 | KSYSTEM_TIME InterruptTime; | |
695 | BYTE Reserved2[0x2c8]; | |
9c154abe CV |
696 | ULONG DismountCount; |
697 | /* A lot more follows... */ | |
698 | } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA; | |
699 | ||
9ba913a5 CF |
700 | typedef struct _PROCESS_BASIC_INFORMATION |
701 | { | |
702 | NTSTATUS ExitStatus; | |
703 | PPEB PebBaseAddress; | |
704 | KAFFINITY AffinityMask; | |
705 | KPRIORITY BasePriority; | |
706 | ULONG UniqueProcessId; | |
707 | ULONG InheritedFromUniqueProcessId; | |
708 | } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION; | |
709 | ||
abbde487 CV |
710 | typedef struct _PROCESS_SESSION_INFORMATION |
711 | { | |
712 | ULONG SessionId; | |
713 | } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION; | |
714 | ||
9ba913a5 CF |
715 | typedef enum _MEMORY_INFORMATION_CLASS |
716 | { | |
717 | MemoryBasicInformation, | |
718 | MemoryWorkingSetList, | |
719 | MemorySectionName, | |
9f0d3f37 | 720 | MemoryBasicVlmInformation |
9ba913a5 CF |
721 | } MEMORY_INFORMATION_CLASS; |
722 | ||
2402700d CF |
723 | typedef struct _MEMORY_WORKING_SET_LIST |
724 | { | |
9ba913a5 CF |
725 | ULONG NumberOfPages; |
726 | ULONG WorkingSetList[1]; | |
727 | } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST; | |
728 | ||
8285dae5 CV |
729 | typedef struct _MEMORY_SECTION_NAME |
730 | { | |
731 | UNICODE_STRING SectionFileName; | |
732 | } MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME; | |
733 | ||
2a24463d CV |
734 | typedef struct _FILE_BASIC_INFORMATION { |
735 | LARGE_INTEGER CreationTime; | |
736 | LARGE_INTEGER LastAccessTime; | |
737 | LARGE_INTEGER LastWriteTime; | |
738 | LARGE_INTEGER ChangeTime; | |
739 | ULONG FileAttributes; | |
740 | } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; | |
741 | ||
742 | typedef struct _FILE_STANDARD_INFORMATION { | |
743 | LARGE_INTEGER AllocationSize; | |
744 | LARGE_INTEGER EndOfFile; | |
745 | ULONG NumberOfLinks; | |
746 | BOOLEAN DeletePending; | |
747 | BOOLEAN Directory; | |
748 | } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; | |
749 | ||
e25b3402 CV |
750 | typedef struct _FILE_NETWORK_OPEN_INFORMATION { |
751 | LARGE_INTEGER CreationTime; | |
752 | LARGE_INTEGER LastAccessTime; | |
753 | LARGE_INTEGER LastWriteTime; | |
754 | LARGE_INTEGER ChangeTime; | |
755 | LARGE_INTEGER AllocationSize; | |
756 | LARGE_INTEGER EndOfFile; | |
757 | ULONG FileAttributes; | |
758 | } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; | |
759 | ||
2a24463d | 760 | typedef struct _FILE_INTERNAL_INFORMATION { |
9e5f45ed | 761 | LARGE_INTEGER FileId; |
2a24463d CV |
762 | } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; |
763 | ||
764 | typedef struct _FILE_EA_INFORMATION { | |
765 | ULONG EaSize; | |
766 | } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; | |
767 | ||
768 | typedef struct _FILE_ACCESS_INFORMATION { | |
769 | ACCESS_MASK AccessFlags; | |
770 | } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; | |
771 | ||
1c9b2968 CV |
772 | typedef struct _FILE_DISPOSITION_INFORMATION { |
773 | BOOLEAN DeleteFile; | |
774 | } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; | |
775 | ||
05726ddd CF |
776 | typedef struct _FILE_POSITION_INFORMATION { |
777 | LARGE_INTEGER CurrentByteOffset; | |
778 | } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; | |
2a24463d | 779 | |
7636b585 CV |
780 | typedef struct _FILE_END_OF_FILE_INFORMATION { |
781 | LARGE_INTEGER EndOfFile; | |
782 | } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; | |
783 | ||
2a24463d CV |
784 | typedef struct _FILE_MODE_INFORMATION { |
785 | ULONG Mode; | |
786 | } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; | |
787 | ||
788 | typedef struct _FILE_ALIGNMENT_INFORMATION { | |
789 | ULONG AlignmentRequirement; | |
790 | } FILE_ALIGNMENT_INFORMATION; | |
791 | ||
05726ddd CF |
792 | typedef struct _FILE_NAME_INFORMATION { |
793 | ULONG FileNameLength; | |
794 | WCHAR FileName[1]; | |
795 | } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; | |
2a24463d | 796 | |
745c29fe CV |
797 | typedef struct _FILE_LINK_INFORMATION { |
798 | BOOLEAN ReplaceIfExists; | |
799 | HANDLE RootDirectory; | |
800 | ULONG FileNameLength; | |
801 | WCHAR FileName[1]; | |
802 | } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; | |
803 | ||
cbfb7b1b CV |
804 | typedef struct _FILE_RENAME_INFORMATION { |
805 | BOOLEAN ReplaceIfExists; | |
806 | HANDLE RootDirectory; | |
807 | ULONG FileNameLength; | |
808 | WCHAR FileName[1]; | |
809 | } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; | |
810 | ||
2a24463d CV |
811 | typedef struct _FILE_ALL_INFORMATION { |
812 | FILE_BASIC_INFORMATION BasicInformation; | |
813 | FILE_STANDARD_INFORMATION StandardInformation; | |
814 | FILE_INTERNAL_INFORMATION InternalInformation; | |
815 | FILE_EA_INFORMATION EaInformation; | |
816 | FILE_ACCESS_INFORMATION AccessInformation; | |
817 | FILE_POSITION_INFORMATION PositionInformation; | |
818 | FILE_MODE_INFORMATION ModeInformation; | |
819 | FILE_ALIGNMENT_INFORMATION AlignmentInformation; | |
820 | FILE_NAME_INFORMATION NameInformation; | |
821 | } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; | |
2402700d | 822 | |
665f9a59 CF |
823 | enum |
824 | { | |
825 | FILE_PIPE_DISCONNECTED_STATE = 1, | |
826 | FILE_PIPE_LISTENING_STATE = 2, | |
827 | FILE_PIPE_CONNECTED_STATE = 3, | |
828 | FILE_PIPE_CLOSING_STATE = 4 | |
829 | }; | |
830 | ||
6644c628 CF |
831 | typedef struct _FILE_PIPE_LOCAL_INFORMATION |
832 | { | |
833 | ULONG NamedPipeType; | |
834 | ULONG NamedPipeConfiguration; | |
835 | ULONG MaximumInstances; | |
836 | ULONG CurrentInstances; | |
837 | ULONG InboundQuota; | |
838 | ULONG ReadDataAvailable; | |
839 | ULONG OutboundQuota; | |
840 | ULONG WriteQuotaAvailable; | |
841 | ULONG NamedPipeState; | |
842 | ULONG NamedPipeEnd; | |
843 | } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; | |
844 | ||
b8eac1de CV |
845 | typedef struct _FILE_COMPRESSION_INFORMATION |
846 | { | |
b75971ef | 847 | LARGE_INTEGER CompressedFileSize; |
b8eac1de CV |
848 | USHORT CompressionFormat; |
849 | UCHAR CompressionUnitShift; | |
b75971ef CV |
850 | UCHAR ChunkShift; |
851 | UCHAR ClusterShift; | |
852 | UCHAR Reserved[3]; | |
b8eac1de CV |
853 | } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION; |
854 | ||
d3dd7d36 CV |
855 | typedef struct _FILE_FS_DEVICE_INFORMATION |
856 | { | |
857 | ULONG DeviceType; | |
858 | ULONG Characteristics; | |
859 | } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; | |
860 | ||
3323df7e CV |
861 | typedef struct _FILE_FS_ATTRIBUTE_INFORMATION |
862 | { | |
863 | ULONG FileSystemAttributes; | |
864 | ULONG MaximumComponentNameLength; | |
865 | ULONG FileSystemNameLength; | |
866 | WCHAR FileSystemName[1]; | |
867 | } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; | |
868 | ||
f65c5a0a | 869 | #pragma pack(push,4) |
2a24463d CV |
870 | typedef struct _FILE_FS_VOLUME_INFORMATION |
871 | { | |
872 | LARGE_INTEGER VolumeCreationTime; | |
873 | ULONG VolumeSerialNumber; | |
874 | ULONG VolumeLabelLength; | |
875 | BOOLEAN SupportsObjects; | |
f65c5a0a | 876 | BOOLEAN __dummy; |
2a24463d CV |
877 | WCHAR VolumeLabel[1]; |
878 | } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; | |
f65c5a0a | 879 | #pragma pack(pop) |
2a24463d | 880 | |
3ff1a063 | 881 | typedef struct _FILE_FS_SIZE_INFORMATION |
2a24463d | 882 | { |
3ff1a063 CV |
883 | LARGE_INTEGER TotalAllocationUnits; |
884 | LARGE_INTEGER AvailableAllocationUnits; | |
885 | ULONG SectorsPerAllocationUnit; | |
886 | ULONG BytesPerSector; | |
887 | } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; | |
888 | ||
3323df7e CV |
889 | typedef struct _FILE_FS_FULL_SIZE_INFORMATION |
890 | { | |
891 | LARGE_INTEGER TotalAllocationUnits; | |
892 | LARGE_INTEGER CallerAvailableAllocationUnits; | |
893 | LARGE_INTEGER ActualAvailableAllocationUnits; | |
894 | ULONG SectorsPerAllocationUnit; | |
895 | ULONG BytesPerSector; | |
896 | } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; | |
897 | ||
4a96b0aa CV |
898 | typedef struct _FILE_FS_OBJECTID_INFORMATION { |
899 | UCHAR ObjectId[16]; | |
900 | UCHAR ExtendedInfo[48]; | |
901 | } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; | |
902 | ||
3ff1a063 CV |
903 | typedef enum _FSINFOCLASS { |
904 | FileFsVolumeInformation = 1, | |
905 | FileFsLabelInformation, | |
906 | FileFsSizeInformation, | |
907 | FileFsDeviceInformation, | |
908 | FileFsAttributeInformation, | |
909 | FileFsControlInformation, | |
910 | FileFsFullSizeInformation, | |
911 | FileFsObjectIdInformation, | |
912 | FileFsDriverPathInformation, | |
913 | FileFsMaximumInformation | |
2a24463d CV |
914 | } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; |
915 | ||
2402700d CF |
916 | typedef enum _OBJECT_INFORMATION_CLASS |
917 | { | |
b8eac1de CV |
918 | ObjectBasicInformation = 0, |
919 | ObjectNameInformation = 1, | |
920 | ObjectHandleInformation = 4 | |
2402700d CF |
921 | // and many more |
922 | } OBJECT_INFORMATION_CLASS; | |
923 | ||
a998dd70 CV |
924 | typedef struct _OBJECT_BASIC_INFORMATION |
925 | { | |
926 | ULONG Attributes; | |
927 | ACCESS_MASK GrantedAccess; | |
928 | ULONG HandleCount; | |
929 | ULONG PointerCount; | |
930 | ULONG PagedPoolUsage; | |
931 | ULONG NonPagedPoolUsage; | |
932 | ULONG Reserved[3]; | |
933 | ULONG NameInformationLength; | |
934 | ULONG TypeInformationLength; | |
935 | ULONG SecurityDescriptorLength; | |
936 | LARGE_INTEGER CreateTime; | |
937 | } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION; | |
938 | ||
2402700d CF |
939 | typedef struct _OBJECT_NAME_INFORMATION |
940 | { | |
941 | UNICODE_STRING Name; | |
942 | } OBJECT_NAME_INFORMATION; | |
943 | ||
e9c8cb31 CV |
944 | typedef struct _DIRECTORY_BASIC_INFORMATION |
945 | { | |
946 | UNICODE_STRING ObjectName; | |
947 | UNICODE_STRING ObjectTypeName; | |
948 | } DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION; | |
949 | ||
4635b6eb CV |
950 | typedef struct _FILE_GET_EA_INFORMATION |
951 | { | |
952 | ULONG NextEntryOffset; | |
953 | UCHAR EaNameLength; | |
954 | CHAR EaName[1]; | |
955 | } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION; | |
956 | ||
4635b6eb CV |
957 | typedef struct _FILE_FULL_EA_INFORMATION |
958 | { | |
959 | ULONG NextEntryOffset; | |
960 | UCHAR Flags; | |
961 | UCHAR EaNameLength; | |
962 | USHORT EaValueLength; | |
963 | CHAR EaName[1]; | |
964 | } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; | |
965 | ||
19afaa1a CV |
966 | typedef struct _FILE_MAILSLOT_SET_INFORMATION |
967 | { | |
968 | LARGE_INTEGER ReadTimeout; | |
969 | } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; | |
970 | ||
61c44b72 CV |
971 | typedef VOID NTAPI (*PIO_APC_ROUTINE)(PVOID, PIO_STATUS_BLOCK, ULONG); |
972 | ||
636c94d8 CV |
973 | typedef struct _EVENT_BASIC_INFORMATION |
974 | { | |
975 | EVENT_TYPE EventType; | |
976 | LONG SignalState; | |
977 | } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION; | |
978 | ||
979 | typedef enum _EVENT_INFORMATION_CLASS | |
980 | { | |
981 | EventBasicInformation = 0 | |
982 | } EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS; | |
983 | ||
e17c7745 CV |
984 | typedef enum _THREAD_INFORMATION_CLASS |
985 | { | |
705a187e | 986 | ThreadBasicInformation = 0, |
c8ce5429 | 987 | ThreadTimes = 1, |
e17c7745 CV |
988 | ThreadImpersonationToken = 5 |
989 | } THREAD_INFORMATION_CLASS, *PTHREAD_INFORMATION_CLASS; | |
990 | ||
705a187e YS |
991 | typedef struct _THREAD_BASIC_INFORMATION { |
992 | NTSTATUS ExitStatus; | |
993 | PNT_TIB TebBaseAddress; | |
994 | CLIENT_ID ClientId; | |
995 | KAFFINITY AffinityMask; | |
996 | KPRIORITY Priority; | |
997 | KPRIORITY BasePriority; | |
998 | } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION; | |
999 | ||
f0968c1e YS |
1000 | typedef enum _TIMER_INFORMATION_CLASS { |
1001 | TimerBasicInformation = 0 | |
1002 | } TIMER_INFORMATION_CLASS, *PTIMER_INFORMATION_CLASS; | |
1003 | ||
1004 | typedef struct _TIMER_BASIC_INFORMATION { | |
1005 | LARGE_INTEGER TimeRemaining; | |
1006 | BOOLEAN SignalState; | |
1007 | } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION; | |
1008 | ||
e17c7745 CV |
1009 | typedef NTSTATUS (*PRTL_QUERY_REGISTRY_ROUTINE) |
1010 | (PWSTR, ULONG, PVOID, ULONG, PVOID, PVOID); | |
1011 | ||
1012 | typedef struct _RTL_QUERY_REGISTRY_TABLE | |
1013 | { | |
1014 | PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; | |
1015 | ULONG Flags; | |
1016 | PCWSTR Name; | |
1017 | PVOID EntryContext; | |
1018 | ULONG DefaultType; | |
1019 | PVOID DefaultData; | |
1020 | ULONG DefaultLength; | |
1021 | } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; | |
1022 | ||
1023 | typedef enum _KEY_VALUE_INFORMATION_CLASS | |
1024 | { | |
1025 | KeyValueBasicInformation = 0, | |
1026 | KeyValueFullInformation, | |
1027 | KeyValuePartialInformation | |
1028 | } KEY_VALUE_INFORMATION_CLASS, *PKEY_VALUE_INFORMATION_CLASS; | |
b86f999a | 1029 | |
e17c7745 CV |
1030 | typedef struct _KEY_VALUE_PARTIAL_INFORMATION |
1031 | { | |
1032 | ULONG TitleIndex; | |
1033 | ULONG Type; | |
1034 | ULONG DataLength; | |
1035 | UCHAR Data[1]; | |
1036 | } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; | |
1037 | ||
25f3ea84 CV |
1038 | typedef enum _SECTION_INHERIT |
1039 | { | |
1040 | ViewShare = 1, | |
1041 | ViewUnmap = 2 | |
1042 | } SECTION_INHERIT; | |
86bf572e CV |
1043 | |
1044 | typedef VOID (APIENTRY *PTIMER_APC_ROUTINE)(PVOID, ULONG, ULONG); | |
1045 | ||
6d87f7d7 CF |
1046 | /* Function declarations for ntdll.dll. These don't appear in any |
1047 | standard Win32 header. */ | |
f16706de | 1048 | |
e17c7745 | 1049 | #ifdef __cplusplus |
cd506492 | 1050 | /* This is the mapping of the KUSER_SHARED_DATA structure into the 32 bit |
8ea72215 CV |
1051 | user address space. We need it here to access the current DismountCount |
1052 | and InterruptTime. */ | |
1053 | static volatile KUSER_SHARED_DATA &SharedUserData | |
1054 | = *(volatile KUSER_SHARED_DATA *) 0x7ffe0000; | |
cd506492 | 1055 | |
6d87f7d7 CF |
1056 | extern "C" |
1057 | { | |
e17c7745 CV |
1058 | #endif |
1059 | NTSTATUS NTAPI NtAccessCheck (PSECURITY_DESCRIPTOR, HANDLE, ACCESS_MASK, | |
1060 | PGENERIC_MAPPING, PPRIVILEGE_SET, PULONG, | |
1061 | PACCESS_MASK, PNTSTATUS); | |
cce28460 CV |
1062 | NTSTATUS NTAPI NtAdjustPrivilegesToken (HANDLE, BOOLEAN, PTOKEN_PRIVILEGES, |
1063 | ULONG, PTOKEN_PRIVILEGES, PULONG); | |
e17c7745 | 1064 | NTSTATUS NTAPI NtAllocateLocallyUniqueId (PLUID); |
5f660ecf | 1065 | NTSTATUS NTAPI NtAllocateUuids (PLARGE_INTEGER, PULONG, PULONG, PUCHAR); |
86bf572e | 1066 | NTSTATUS NTAPI NtCancelTimer (HANDLE, PBOOLEAN); |
e9c8cb31 | 1067 | NTSTATUS NTAPI NtClose (HANDLE); |
4c153b24 | 1068 | NTSTATUS NTAPI NtCommitTransaction (HANDLE, BOOLEAN); |
a998dd70 CV |
1069 | NTSTATUS NTAPI NtCreateDirectoryObject (PHANDLE, ACCESS_MASK, |
1070 | POBJECT_ATTRIBUTES); | |
e17c7745 CV |
1071 | NTSTATUS NTAPI NtCreateKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG, |
1072 | PUNICODE_STRING, ULONG, PULONG); | |
a998dd70 | 1073 | NTSTATUS NTAPI NtCreateEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
025c1fac | 1074 | EVENT_TYPE, BOOLEAN); |
e8597065 CV |
1075 | NTSTATUS NTAPI NtCreateFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1076 | PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG, | |
1077 | ULONG, ULONG, PVOID, ULONG); | |
19afaa1a CV |
1078 | NTSTATUS NTAPI NtCreateMailslotFile(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1079 | PIO_STATUS_BLOCK, ULONG, ULONG, ULONG, | |
1080 | PLARGE_INTEGER); | |
a998dd70 CV |
1081 | NTSTATUS NTAPI NtCreateMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1082 | BOOLEAN); | |
f90e23f2 | 1083 | NTSTATUS NTAPI NtCreateSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
70300fdb | 1084 | PLARGE_INTEGER, ULONG, ULONG, HANDLE); |
abbde487 CV |
1085 | NTSTATUS NTAPI NtCreateSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1086 | LONG, LONG); | |
86bf572e CV |
1087 | NTSTATUS NTAPI NtCreateTimer (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1088 | TIMER_TYPE); | |
1fcc912f | 1089 | NTSTATUS NTAPI NtCreateToken (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1ff9f4b9 CF |
1090 | TOKEN_TYPE, PLUID, PLARGE_INTEGER, PTOKEN_USER, |
1091 | PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_OWNER, | |
1092 | PTOKEN_PRIMARY_GROUP, PTOKEN_DEFAULT_DACL, | |
1093 | PTOKEN_SOURCE); | |
4c153b24 CV |
1094 | NTSTATUS NTAPI NtCreateTransaction (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1095 | LPGUID, HANDLE, ULONG, ULONG, ULONG, | |
1096 | PLARGE_INTEGER, PUNICODE_STRING); | |
e17c7745 CV |
1097 | NTSTATUS NTAPI NtDuplicateToken (HANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1098 | BOOLEAN, TOKEN_TYPE, PHANDLE); | |
61c44b72 | 1099 | NTSTATUS NTAPI NtFsControlFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, |
214c3a11 CV |
1100 | PIO_STATUS_BLOCK, ULONG, PVOID, ULONG, |
1101 | PVOID, ULONG); | |
0d6f2b01 | 1102 | NTSTATUS NTAPI NtFlushBuffersFile (HANDLE, PIO_STATUS_BLOCK); |
e17c7745 | 1103 | NTSTATUS NTAPI NtLoadKey (POBJECT_ATTRIBUTES, POBJECT_ATTRIBUTES); |
1f5c3042 | 1104 | NTSTATUS NTAPI NtLockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG); |
6d87f7d7 CF |
1105 | NTSTATUS NTAPI NtMapViewOfSection (HANDLE, HANDLE, PVOID *, ULONG, ULONG, |
1106 | PLARGE_INTEGER, PULONG, SECTION_INHERIT, | |
1107 | ULONG, ULONG); | |
1b61bf15 | 1108 | NTSTATUS NTAPI NtNotifyChangeDirectoryFile (HANDLE, HANDLE, PIO_APC_ROUTINE, |
70300fdb | 1109 | PVOID, PIO_STATUS_BLOCK, |
1b61bf15 CV |
1110 | PFILE_NOTIFY_INFORMATION, ULONG, |
1111 | ULONG, BOOLEAN); | |
e9c8cb31 | 1112 | NTSTATUS NTAPI NtOpenDirectoryObject (PHANDLE, ACCESS_MASK, |
70300fdb | 1113 | POBJECT_ATTRIBUTES); |
a998dd70 | 1114 | NTSTATUS NTAPI NtOpenEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
99069065 CV |
1115 | NTSTATUS NTAPI NtOpenFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, |
1116 | PIO_STATUS_BLOCK, ULONG, ULONG); | |
e17c7745 | 1117 | NTSTATUS NTAPI NtOpenKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
a998dd70 | 1118 | NTSTATUS NTAPI NtOpenMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
e17c7745 CV |
1119 | NTSTATUS NTAPI NtOpenProcessToken (HANDLE, ACCESS_MASK, PHANDLE); |
1120 | NTSTATUS NTAPI NtOpenThreadToken (HANDLE, ACCESS_MASK, BOOLEAN, PHANDLE); | |
1fcc912f | 1121 | NTSTATUS NTAPI NtOpenSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
abbde487 | 1122 | NTSTATUS NTAPI NtOpenSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); |
43f65cdd CV |
1123 | NTSTATUS NTAPI NtOpenSymbolicLinkObject (PHANDLE, ACCESS_MASK, |
1124 | POBJECT_ATTRIBUTES); | |
1b61bf15 CV |
1125 | /* WARNING! Don't rely on the timestamp information returned by |
1126 | NtQueryAttributesFile. Only the DOS file attribute info is reliable. */ | |
e17c7745 | 1127 | NTSTATUS NTAPI NtPrivilegeCheck (HANDLE, PPRIVILEGE_SET, PBOOLEAN); |
1b61bf15 CV |
1128 | NTSTATUS NTAPI NtQueryAttributesFile (POBJECT_ATTRIBUTES, |
1129 | PFILE_BASIC_INFORMATION); | |
e9c8cb31 CV |
1130 | NTSTATUS NTAPI NtQueryDirectoryFile(HANDLE, HANDLE, PVOID, PVOID, |
1131 | PIO_STATUS_BLOCK, PVOID, ULONG, | |
1132 | FILE_INFORMATION_CLASS, BOOLEAN, | |
1133 | PUNICODE_STRING, BOOLEAN); | |
1134 | NTSTATUS NTAPI NtQueryDirectoryObject (HANDLE, PVOID, ULONG, BOOLEAN, | |
70300fdb | 1135 | BOOLEAN, PULONG, PULONG); |
4635b6eb CV |
1136 | NTSTATUS NTAPI NtQueryEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, |
1137 | BOOLEAN, PVOID, ULONG, PULONG, BOOLEAN); | |
636c94d8 CV |
1138 | NTSTATUS NTAPI NtQueryEvent (HANDLE, EVENT_INFORMATION_CLASS, PVOID, ULONG, |
1139 | PULONG); | |
e25b3402 CV |
1140 | NTSTATUS NTAPI NtQueryFullAttributesFile (POBJECT_ATTRIBUTES, |
1141 | PFILE_NETWORK_OPEN_INFORMATION); | |
2a24463d | 1142 | NTSTATUS NTAPI NtQueryInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, |
6644c628 | 1143 | ULONG, FILE_INFORMATION_CLASS); |
d74eced5 | 1144 | NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS, |
a113a3c5 | 1145 | PVOID, ULONG, PULONG); |
705a187e YS |
1146 | NTSTATUS NTAPI NtQueryInformationThread (HANDLE, THREAD_INFORMATION_CLASS, |
1147 | PVOID, ULONG, PULONG); | |
e17c7745 CV |
1148 | NTSTATUS NTAPI NtQueryInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, |
1149 | PVOID, ULONG, PULONG); | |
d74eced5 | 1150 | NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, VOID *, |
a113a3c5 | 1151 | ULONG, ULONG *); |
6d87f7d7 CF |
1152 | NTSTATUS NTAPI NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS, |
1153 | PVOID, ULONG, PULONG); | |
cef5dfd7 | 1154 | NTSTATUS WINAPI NtQuerySystemTime (PLARGE_INTEGER); |
71ffba49 | 1155 | NTSTATUS NTAPI NtQuerySecurityObject (HANDLE, SECURITY_INFORMATION, |
70300fdb | 1156 | PSECURITY_DESCRIPTOR, ULONG, PULONG); |
43f65cdd | 1157 | NTSTATUS NTAPI NtQuerySymbolicLinkObject (HANDLE, PUNICODE_STRING, PULONG); |
f0968c1e YS |
1158 | NTSTATUS NTAPI NtQueryTimer (HANDLE, TIMER_INFORMATION_CLASS, PVOID, |
1159 | ULONG, PULONG); | |
cd506492 | 1160 | NTSTATUS NTAPI NtQueryTimerResolution (PULONG, PULONG, PULONG); |
e17c7745 CV |
1161 | NTSTATUS NTAPI NtQueryValueKey (HANDLE, PUNICODE_STRING, |
1162 | KEY_VALUE_INFORMATION_CLASS, PVOID, ULONG, | |
1163 | PULONG); | |
d74eced5 | 1164 | NTSTATUS NTAPI NtQueryVirtualMemory (HANDLE, PVOID, MEMORY_INFORMATION_CLASS, |
a113a3c5 | 1165 | PVOID, ULONG, PULONG); |
2a24463d CV |
1166 | NTSTATUS NTAPI NtQueryVolumeInformationFile (HANDLE, IO_STATUS_BLOCK *, |
1167 | VOID *, ULONG, | |
1168 | FS_INFORMATION_CLASS); | |
d85bcb45 CV |
1169 | NTSTATUS NTAPI NtReadFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, |
1170 | PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER, | |
1171 | PULONG); | |
4c153b24 | 1172 | NTSTATUS NTAPI NtRollbackTransaction (HANDLE, BOOLEAN); |
4635b6eb | 1173 | NTSTATUS NTAPI NtSetEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG); |
f4ec8743 | 1174 | NTSTATUS NTAPI NtSetEvent (HANDLE, PULONG); |
7636b585 CV |
1175 | NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, |
1176 | FILE_INFORMATION_CLASS); | |
e17c7745 CV |
1177 | NTSTATUS NTAPI NtSetInformationThread (HANDLE, THREAD_INFORMATION_CLASS, |
1178 | PVOID, ULONG); | |
1179 | NTSTATUS NTAPI NtSetInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, PVOID, | |
1180 | ULONG); | |
f4ae6dc6 CV |
1181 | NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION, |
1182 | PSECURITY_DESCRIPTOR); | |
86bf572e CV |
1183 | NTSTATUS NTAPI NtSetTimer (HANDLE, PLARGE_INTEGER, PTIMER_APC_ROUTINE, PVOID, |
1184 | BOOLEAN, LONG, PBOOLEAN); | |
cd506492 | 1185 | NTSTATUS NTAPI NtSetTimerResolution (ULONG, BOOLEAN, PULONG); |
e17c7745 CV |
1186 | NTSTATUS NTAPI NtSetValueKey (HANDLE, PUNICODE_STRING, ULONG, ULONG, PVOID, |
1187 | ULONG); | |
1f5c3042 | 1188 | NTSTATUS NTAPI NtUnlockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG); |
6d87f7d7 | 1189 | NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID); |
61c44b72 CV |
1190 | NTSTATUS NTAPI NtWriteFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, |
1191 | PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER, | |
1192 | PULONG); | |
e17c7745 CV |
1193 | NTSTATUS NTAPI RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR, |
1194 | PSECURITY_DESCRIPTOR, PULONG); | |
9c154abe | 1195 | VOID NTAPI RtlAcquirePebLock (); |
e17c7745 | 1196 | NTSTATUS NTAPI RtlAddAccessAllowedAce (PACL, ULONG, ACCESS_MASK, PSID); |
115d74b9 CV |
1197 | NTSTATUS NTAPI RtlAddAccessAllowedAceEx (PACL, ULONG, ULONG, ACCESS_MASK, |
1198 | PSID); | |
e17c7745 | 1199 | NTSTATUS NTAPI RtlAddAccessDeniedAce (PACL, ULONG, ACCESS_MASK, PSID); |
115d74b9 CV |
1200 | NTSTATUS NTAPI RtlAddAccessDeniedAceEx (PACL, ULONG, ULONG, ACCESS_MASK, |
1201 | PSID); | |
e17c7745 | 1202 | NTSTATUS NTAPI RtlAddAce (PACL, ULONG, ULONG, PVOID, ULONG); |
9c154abe | 1203 | PVOID NTAPI RtlAllocateHeap (PVOID, ULONG, SIZE_T); |
214c3a11 CV |
1204 | NTSTATUS NTAPI RtlAppendUnicodeToString (PUNICODE_STRING, PCWSTR); |
1205 | NTSTATUS NTAPI RtlAppendUnicodeStringToString (PUNICODE_STRING, | |
1206 | PUNICODE_STRING); | |
cbe2437b CV |
1207 | NTSTATUS NTAPI RtlAnsiStringToUnicodeString (PUNICODE_STRING, PANSI_STRING, |
1208 | BOOLEAN); | |
e17c7745 | 1209 | NTSTATUS NTAPI RtlCheckRegistryKey (ULONG, PCWSTR); |
214c3a11 CV |
1210 | LONG NTAPI RtlCompareUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1211 | BOOLEAN); | |
7d5f6c18 | 1212 | NTSTATUS NTAPI RtlConvertSidToUnicodeString (PUNICODE_STRING, PSID, BOOLEAN); |
f9761297 | 1213 | NTSTATUS NTAPI RtlConvertToAutoInheritSecurityObject (PSECURITY_DESCRIPTOR, |
b86f999a | 1214 | PSECURITY_DESCRIPTOR, |
f9761297 CV |
1215 | PSECURITY_DESCRIPTOR *, |
1216 | GUID *, BOOLEAN, | |
1217 | PGENERIC_MAPPING); | |
e17c7745 | 1218 | NTSTATUS NTAPI RtlCopySid (ULONG, PSID, PSID); |
f9761297 | 1219 | VOID NTAPI RtlCopyUnicodeString (PUNICODE_STRING, PUNICODE_STRING); |
e17c7745 | 1220 | NTSTATUS NTAPI RtlCreateAcl (PACL, ULONG, ULONG); |
31ddf45d | 1221 | PDEBUG_BUFFER NTAPI RtlCreateQueryDebugBuffer (ULONG, BOOLEAN); |
e17c7745 CV |
1222 | NTSTATUS NTAPI RtlCreateRegistryKey (ULONG, PCWSTR); |
1223 | NTSTATUS NTAPI RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR, ULONG); | |
855e63eb | 1224 | BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING, PCSTR); |
f9761297 | 1225 | NTSTATUS NTAPI RtlDeleteSecurityObject (PSECURITY_DESCRIPTOR *); |
31ddf45d | 1226 | NTSTATUS NTAPI RtlDestroyQueryDebugBuffer (PDEBUG_BUFFER); |
1feea0bf CV |
1227 | NTSTATUS NTAPI RtlDowncaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1228 | BOOLEAN); | |
9c154abe | 1229 | NTSTATUS NTAPI RtlEnterCriticalSection (PRTL_CRITICAL_SECTION); |
e17c7745 CV |
1230 | BOOLEAN NTAPI RtlEqualPrefixSid (PSID, PSID); |
1231 | BOOLEAN NTAPI RtlEqualSid (PSID, PSID); | |
214c3a11 CV |
1232 | BOOLEAN NTAPI RtlEqualUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1233 | BOOLEAN); | |
8b5fa210 | 1234 | VOID NTAPI RtlFreeAnsiString (PANSI_STRING); |
9c154abe | 1235 | BOOLEAN NTAPI RtlFreeHeap (PVOID, ULONG, PVOID); |
8b5fa210 | 1236 | VOID NTAPI RtlFreeOemString (POEM_STRING); |
214c3a11 | 1237 | VOID NTAPI RtlFreeUnicodeString (PUNICODE_STRING); |
e17c7745 CV |
1238 | BOOLEAN NTAPI RtlFirstFreeAce (PACL, PVOID *); |
1239 | NTSTATUS NTAPI RtlGetAce (PACL, ULONG, PVOID); | |
f9761297 CV |
1240 | NTSTATUS NTAPI RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR, |
1241 | PSECURITY_DESCRIPTOR_CONTROL, | |
1242 | PULONG); | |
4c153b24 | 1243 | HANDLE NTAPI RtlGetCurrentTransaction (); |
e17c7745 CV |
1244 | NTSTATUS NTAPI RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, PBOOLEAN, |
1245 | PACL *, PBOOLEAN); | |
1246 | NTSTATUS NTAPI RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *, | |
b86f999a | 1247 | PBOOLEAN); |
e17c7745 | 1248 | NTSTATUS NTAPI RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *, |
b86f999a | 1249 | PBOOLEAN); |
e17c7745 | 1250 | PSID_IDENTIFIER_AUTHORITY NTAPI RtlIdentifierAuthoritySid (PSID); |
214c3a11 | 1251 | VOID NTAPI RtlInitEmptyUnicodeString (PUNICODE_STRING, PCWSTR, USHORT); |
6f94526c | 1252 | VOID NTAPI RtlInitAnsiString (PANSI_STRING, PCSTR); |
e17c7745 | 1253 | NTSTATUS NTAPI RtlInitializeSid (PSID, PSID_IDENTIFIER_AUTHORITY, UCHAR); |
6d87f7d7 | 1254 | VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR); |
7d5f6c18 | 1255 | NTSTATUS NTAPI RtlIntegerToUnicodeString (ULONG, ULONG, PUNICODE_STRING); |
e9c8cb31 | 1256 | ULONG NTAPI RtlIsDosDeviceName_U (PCWSTR); |
9c154abe | 1257 | NTSTATUS NTAPI RtlLeaveCriticalSection (PRTL_CRITICAL_SECTION); |
f9761297 | 1258 | ULONG NTAPI RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR); |
e17c7745 | 1259 | ULONG NTAPI RtlLengthSid (PSID); |
6d87f7d7 | 1260 | ULONG NTAPI RtlNtStatusToDosError (NTSTATUS); |
cbe2437b CV |
1261 | NTSTATUS NTAPI RtlOemStringToUnicodeString (PUNICODE_STRING, POEM_STRING, |
1262 | BOOLEAN); | |
9235f3ea CV |
1263 | BOOLEAN NTAPI RtlPrefixUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1264 | BOOLEAN); | |
31ddf45d | 1265 | NTSTATUS NTAPI RtlQueryProcessDebugInformation (ULONG, ULONG, PDEBUG_BUFFER); |
e17c7745 CV |
1266 | NTSTATUS NTAPI RtlQueryRegistryValues (ULONG, PCWSTR, |
1267 | PRTL_QUERY_REGISTRY_TABLE, PVOID, | |
1268 | PVOID); | |
dec9daad | 1269 | VOID NTAPI RtlReleasePebLock (); |
214c3a11 | 1270 | VOID NTAPI RtlSecondsSince1970ToTime (ULONG, PLARGE_INTEGER); |
1121c57f | 1271 | NTSTATUS NTAPI RtlSetCurrentDirectory_U (PUNICODE_STRING); |
4c153b24 | 1272 | BOOLEAN NTAPI RtlSetCurrentTransaction (HANDLE); |
e17c7745 CV |
1273 | NTSTATUS NTAPI RtlSetControlSecurityDescriptor (PSECURITY_DESCRIPTOR, |
1274 | SECURITY_DESCRIPTOR_CONTROL, | |
1275 | SECURITY_DESCRIPTOR_CONTROL); | |
1276 | NTSTATUS NTAPI RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, BOOLEAN, | |
1277 | PACL, BOOLEAN); | |
1278 | NTSTATUS NTAPI RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID, | |
b86f999a | 1279 | BOOLEAN); |
e17c7745 | 1280 | NTSTATUS NTAPI RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID, |
b86f999a | 1281 | BOOLEAN); |
e17c7745 CV |
1282 | PUCHAR NTAPI RtlSubAuthorityCountSid (PSID); |
1283 | PULONG NTAPI RtlSubAuthoritySid (PSID, ULONG); | |
6f94526c | 1284 | ULONG NTAPI RtlUnicodeStringToAnsiSize (PUNICODE_STRING); |
8b5fa210 CV |
1285 | NTSTATUS NTAPI RtlUnicodeStringToAnsiString (PANSI_STRING, PUNICODE_STRING, |
1286 | BOOLEAN); | |
1287 | NTSTATUS NTAPI RtlUnicodeStringToOemString (PANSI_STRING, PUNICODE_STRING, | |
1288 | BOOLEAN); | |
855e63eb | 1289 | WCHAR NTAPI RtlUpcaseUnicodeChar (WCHAR); |
1feea0bf CV |
1290 | NTSTATUS NTAPI RtlUpcaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING, |
1291 | BOOLEAN); | |
e17c7745 CV |
1292 | NTSTATUS NTAPI RtlWriteRegistryValue (ULONG, PCWSTR, PCWSTR, ULONG, PVOID, |
1293 | ULONG); | |
214c3a11 | 1294 | |
e17c7745 | 1295 | #ifdef __cplusplus |
214c3a11 | 1296 | /* A few Rtl functions are either actually macros, or they just don't |
61c44b72 CV |
1297 | exist even though they would be a big help. We implement them here, |
1298 | partly as inline functions. */ | |
1299 | ||
1300 | /* RtlInitEmptyUnicodeString is defined as a macro in wdm.h, but that file | |
1301 | is missing entirely in w32api. */ | |
214c3a11 CV |
1302 | inline |
1303 | VOID NTAPI RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf, | |
1304 | USHORT len) | |
1305 | { | |
1306 | dest->Length = 0; | |
1307 | dest->MaximumLength = len; | |
1308 | dest->Buffer = (PWSTR) buf; | |
1309 | } | |
61c44b72 CV |
1310 | /* Like RtlInitEmptyUnicodeString, but initialize Length to len, too. |
1311 | This is for instance useful when creating a UNICODE_STRING from an | |
1312 | NtQueryInformationFile info buffer, where the length of the filename | |
1313 | is known, but you can't rely on the string being 0-terminated. | |
1314 | If you know it's 0-terminated, just use RtlInitUnicodeString(). */ | |
214c3a11 | 1315 | inline |
74c5e8c7 | 1316 | VOID NTAPI RtlInitCountedUnicodeString (PUNICODE_STRING dest, PCWSTR buf, |
70300fdb | 1317 | USHORT len) |
214c3a11 CV |
1318 | { |
1319 | dest->Length = dest->MaximumLength = len; | |
1320 | dest->Buffer = (PWSTR) buf; | |
1321 | } | |
61c44b72 CV |
1322 | /* Split path into dirname and basename part. This function does not |
1323 | copy anything! It just initializes the dirname and basename | |
1324 | UNICODE_STRINGs so that their Buffer members point to the right spot | |
70300fdb | 1325 | into path's Buffer, and the Length (and MaximumLength) members are set |
61c44b72 CV |
1326 | to match the dirname part and the basename part. |
1327 | Note that dirname's Length is set so that it also includes the trailing | |
1328 | backslash. If you don't need it, just subtract sizeof(WCHAR) from | |
1329 | dirname.Length. */ | |
ceaf31f4 | 1330 | inline |
61c44b72 CV |
1331 | VOID NTAPI RtlSplitUnicodePath (PUNICODE_STRING path, PUNICODE_STRING dirname, |
1332 | PUNICODE_STRING basename) | |
ceaf31f4 CV |
1333 | { |
1334 | USHORT len = path->Length / sizeof (WCHAR); | |
1335 | while (len > 0 && path->Buffer[--len] != L'\\') | |
1336 | ; | |
1337 | ++len; | |
61c44b72 CV |
1338 | if (dirname) |
1339 | RtlInitCountedUnicodeString (dirname, path->Buffer, len * sizeof (WCHAR)); | |
1340 | if (basename) | |
1341 | RtlInitCountedUnicodeString (basename, &path->Buffer[len], | |
74c5e8c7 CV |
1342 | path->Length - len * sizeof (WCHAR)); |
1343 | } | |
61c44b72 | 1344 | /* Check if prefix is a prefix of path. */ |
74c5e8c7 | 1345 | inline |
8deb4118 CV |
1346 | BOOLEAN NTAPI RtlEqualUnicodePathPrefix (PUNICODE_STRING path, |
1347 | PUNICODE_STRING prefix, | |
81e98baf | 1348 | BOOLEAN caseinsensitive) |
74c5e8c7 | 1349 | { |
8deb4118 | 1350 | UNICODE_STRING p; |
74c5e8c7 | 1351 | |
74c5e8c7 | 1352 | RtlInitCountedUnicodeString (&p, path->Buffer, |
8deb4118 CV |
1353 | prefix->Length < path->Length |
1354 | ? prefix->Length : path->Length); | |
1355 | return RtlEqualUnicodeString (&p, prefix, caseinsensitive); | |
74c5e8c7 | 1356 | } |
f4529884 | 1357 | /* Check if suffix is a suffix of path. */ |
74c5e8c7 | 1358 | inline |
8deb4118 CV |
1359 | BOOL NTAPI RtlEqualUnicodePathSuffix (PUNICODE_STRING path, |
1360 | PUNICODE_STRING suffix, | |
81e98baf | 1361 | BOOLEAN caseinsensitive) |
74c5e8c7 | 1362 | { |
8deb4118 | 1363 | UNICODE_STRING p; |
74c5e8c7 | 1364 | |
8deb4118 | 1365 | if (suffix->Length < path->Length) |
74c5e8c7 | 1366 | RtlInitCountedUnicodeString (&p, (PWCHAR) ((PBYTE) path->Buffer |
8deb4118 CV |
1367 | + path->Length - suffix->Length), |
1368 | suffix->Length); | |
74c5e8c7 CV |
1369 | else |
1370 | RtlInitCountedUnicodeString (&p, path->Buffer, path->Length); | |
8deb4118 | 1371 | return RtlEqualUnicodeString (&p, suffix, caseinsensitive); |
ceaf31f4 | 1372 | } |
61c44b72 CV |
1373 | /* Implemented in strfuncs.cc. Create a Hex UNICODE_STRING from a given |
1374 | 64 bit integer value. If append is TRUE, append the hex string, | |
1feea0bf | 1375 | otherwise overwrite dest. Returns either STATUS_SUCCESS, or |
61c44b72 CV |
1376 | STATUS_BUFFER_OVERFLOW, if the unicode buffer is too small (hasn't |
1377 | room for 16 WCHARs). */ | |
1378 | NTSTATUS NTAPI RtlInt64ToHexUnicodeString (ULONGLONG value, | |
1379 | PUNICODE_STRING dest, | |
1380 | BOOLEAN append); | |
669bdeb8 CV |
1381 | /* Set file attributes. Don't change file times. */ |
1382 | inline | |
1383 | NTSTATUS NTAPI NtSetAttributesFile (HANDLE h, ULONG attr) | |
1384 | { | |
1385 | IO_STATUS_BLOCK io; | |
1386 | FILE_BASIC_INFORMATION fbi; | |
1387 | fbi.CreationTime.QuadPart = fbi.LastAccessTime.QuadPart = | |
1388 | fbi.LastWriteTime.QuadPart = fbi.ChangeTime.QuadPart = 0LL; | |
1389 | fbi.FileAttributes = attr ?: FILE_ATTRIBUTE_NORMAL; | |
1390 | return NtSetInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation); | |
1391 | } | |
bd139e52 CV |
1392 | |
1393 | /* This test for a signalled event is twice as fast as calling | |
1394 | WaitForSingleObject (event, 0). */ | |
1395 | inline | |
1396 | BOOL NTAPI IsEventSignalled (HANDLE event) | |
1397 | { | |
1398 | EVENT_BASIC_INFORMATION ebi; | |
1399 | return NT_SUCCESS (NtQueryEvent (event, EventBasicInformation, | |
1400 | &ebi, sizeof ebi, NULL)) | |
1401 | && ebi.SignalState != 0; | |
1402 | ||
1403 | } | |
6d87f7d7 | 1404 | } |
e17c7745 | 1405 | #endif |