]> sourceware.org Git - newlib-cygwin.git/blob - winsup/cygwin/ntdll.h
b420f02d5a5a4ede972a5d44ff4f02abe8382daf
[newlib-cygwin.git] / winsup / cygwin / ntdll.h
1 /* ntdll.h. Contains ntdll specific stuff not defined elsewhere.
2
3 Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
4 2009, 2010, 2011 Red Hat, Inc.
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
12 #ifndef _NTDLL_H
13 #define _NTDLL_H 1
14 #define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS) 0x00000106)
15 #define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS) 0x40000000)
16 #define STATUS_BUFFER_OVERFLOW ((NTSTATUS) 0x80000005)
17 #define STATUS_NO_MORE_FILES ((NTSTATUS) 0x80000006)
18 #ifndef STATUS_INVALID_INFO_CLASS
19 /* Some w32api header file defines this so we need to conditionalize this
20 define to avoid warnings. */
21 #define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xc0000003)
22 #endif
23 #define STATUS_NOT_IMPLEMENTED ((NTSTATUS) 0xc0000002)
24 #define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xc0000004)
25 #define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xc000000d)
26 #define STATUS_NO_SUCH_FILE ((NTSTATUS) 0xc000000f)
27 #define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS) 0xc0000010)
28 #define STATUS_END_OF_FILE ((NTSTATUS) 0xc0000011)
29 #define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS) 0xc0000013)
30 #define STATUS_ACCESS_DENIED ((NTSTATUS) 0xc0000022)
31 #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xc0000023)
32 #define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS) 0xc0000024)
33 #define STATUS_OBJECT_NAME_INVALID ((NTSTATUS) 0xc0000033)
34 #define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS) 0xc0000034)
35 #define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS) 0xc000003A)
36 #define STATUS_SHARING_VIOLATION ((NTSTATUS) 0xc0000043)
37 #define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS) 0xc000004f)
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)
41 #define STATUS_LOCK_NOT_GRANTED ((NTSTATUS) 0xc0000055)
42 #define STATUS_DELETE_PENDING ((NTSTATUS) 0xc0000056)
43 #define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS) 0xc000007a)
44 #define STATUS_DISK_FULL ((NTSTATUS) 0xc000007f)
45 #define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xc00000a1)
46 #define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS) 0xc00000ab)
47 #define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS) 0xc00000ac)
48 #define STATUS_INVALID_PIPE_STATE ((NTSTATUS) 0xc00000ad)
49 #define STATUS_PIPE_BUSY ((NTSTATUS) 0xc00000ae)
50 #define STATUS_NOT_SUPPORTED ((NTSTATUS) 0xc00000bb)
51 #define STATUS_BAD_NETWORK_PATH ((NTSTATUS) 0xc00000be)
52 #define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS) 0xc00000c3)
53 #define STATUS_BAD_NETWORK_NAME ((NTSTATUS) 0xc00000cc)
54 #define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS) 0xc0000101)
55 #define STATUS_CANNOT_DELETE ((NTSTATUS) 0xc0000121)
56 #define STATUS_INVALID_LEVEL ((NTSTATUS) 0xc0000148)
57 #define STATUS_DLL_NOT_FOUND ((NTSTATUS) 0xc0000135)
58 #define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xc0000139)
59 #define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS) 0xc0000251)
60 #define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS) 0xc0000269)
61 /* custom status code: */
62 #define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269)
63
64 #define PDI_MODULES 0x01
65 #define PDI_HEAPS 0x04
66 #define LDRP_IMAGE_DLL 0x00000004
67 #define WSLE_PAGE_READONLY 0x001
68 #define WSLE_PAGE_EXECUTE 0x002
69 #define WSLE_PAGE_EXECUTE_READ 0x003
70 #define WSLE_PAGE_READWRITE 0x004
71 #define WSLE_PAGE_WRITECOPY 0x005
72 #define WSLE_PAGE_EXECUTE_READWRITE 0x006
73 #define WSLE_PAGE_EXECUTE_WRITECOPY 0x007
74 #define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0
75 #define WSLE_PAGE_SHAREABLE 0x100
76
77 #define FILE_SUPERSEDED 0
78 #define FILE_OPENED 1
79 #define FILE_CREATED 2
80 #define FILE_OVERWRITTEN 3
81 #define FILE_EXISTS 4
82 #define FILE_DOES_NOT_EXIST 5
83
84 #define FILE_WRITE_TO_END_OF_FILE (-1LL)
85 #define FILE_USE_FILE_POINTER_POSITION (-2LL)
86
87 /* Device Characteristics. */
88 #define FILE_REMOVABLE_MEDIA 0x00000001
89 #define FILE_READ_ONLY_DEVICE 0x00000002
90 #define FILE_FLOPPY_DISKETTE 0x00000004
91 #define FILE_WRITE_ONCE_MEDIA 0x00000008
92 #define FILE_REMOTE_DEVICE 0x00000010
93 #define FILE_DEVICE_IS_MOUNTED 0x00000020
94 #define FILE_VIRTUAL_VOLUME 0x00000040
95 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
96 #define FILE_DEVICE_SECURE_OPEN 0x00000100
97
98 /* Transaction access rights. */
99 #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x3F)
100
101 typedef enum _FILE_INFORMATION_CLASS
102 {
103 FileDirectoryInformation = 1,
104 FileFullDirectoryInformation, // 2
105 FileBothDirectoryInformation, // 3
106 FileBasicInformation, // 4 wdm
107 FileStandardInformation, // 5 wdm
108 FileInternalInformation, // 6
109 FileEaInformation, // 7
110 FileAccessInformation, // 8
111 FileNameInformation, // 9
112 FileRenameInformation, // 10
113 FileLinkInformation, // 11
114 FileNamesInformation, // 12
115 FileDispositionInformation, // 13
116 FilePositionInformation, // 14 wdm
117 FileFullEaInformation, // 15
118 FileModeInformation, // 16
119 FileAlignmentInformation, // 17
120 FileAllInformation, // 18
121 FileAllocationInformation, // 19
122 FileEndOfFileInformation, // 20 wdm
123 FileAlternateNameInformation, // 21
124 FileStreamInformation, // 22
125 FilePipeInformation, // 23
126 FilePipeLocalInformation, // 24
127 FilePipeRemoteInformation, // 25
128 FileMailslotQueryInformation, // 26
129 FileMailslotSetInformation, // 27
130 FileCompressionInformation, // 28
131 FileObjectIdInformation, // 29
132 FileCompletionInformation, // 30
133 FileMoveClusterInformation, // 31
134 FileQuotaInformation, // 32
135 FileReparsePointInformation, // 33
136 FileNetworkOpenInformation, // 34
137 FileAttributeTagInformation, // 35
138 FileTrackingInformation, // 36
139 FileIdBothDirectoryInformation, // 37
140 FileIdFullDirectoryInformation, // 38
141 FileValidDataLengthInformation, // 39
142 FileShortNameInformation, // 40
143 FileMaximumInformation
144 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
145
146 typedef struct _FILE_NAMES_INFORMATION
147 {
148 ULONG NextEntryOffset;
149 ULONG FileIndex;
150 ULONG FileNameLength;
151 WCHAR FileName[1];
152 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
153
154 typedef struct _FILE_DIRECTORY_INFORMATION {
155 ULONG NextEntryOffset;
156 ULONG FileIndex;
157 LARGE_INTEGER CreationTime;
158 LARGE_INTEGER LastAccessTime;
159 LARGE_INTEGER LastWriteTime;
160 LARGE_INTEGER ChangeTime;
161 LARGE_INTEGER EndOfFile;
162 LARGE_INTEGER AllocationSize;
163 ULONG FileAttributes;
164 ULONG FileNameLength;
165 WCHAR FileName[1];
166 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
167
168 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
169 {
170 ULONG NextEntryOffset;
171 ULONG FileIndex;
172 LARGE_INTEGER CreationTime;
173 LARGE_INTEGER LastAccessTime;
174 LARGE_INTEGER LastWriteTime;
175 LARGE_INTEGER ChangeTime;
176 LARGE_INTEGER EndOfFile;
177 LARGE_INTEGER AllocationSize;
178 ULONG FileAttributes;
179 ULONG FileNameLength;
180 ULONG EaSize;
181 CCHAR ShortNameLength;
182 WCHAR ShortName[12];
183 WCHAR FileName[1];
184 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION;
185
186 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
187 {
188 ULONG NextEntryOffset;
189 ULONG FileIndex;
190 LARGE_INTEGER CreationTime;
191 LARGE_INTEGER LastAccessTime;
192 LARGE_INTEGER LastWriteTime;
193 LARGE_INTEGER ChangeTime;
194 LARGE_INTEGER EndOfFile;
195 LARGE_INTEGER AllocationSize;
196 ULONG FileAttributes;
197 ULONG FileNameLength;
198 ULONG EaSize;
199 CCHAR ShortNameLength;
200 WCHAR ShortName[12];
201 LARGE_INTEGER FileId;
202 WCHAR FileName[1];
203 } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
204
205
206 #define AT_EXTENDABLE_FILE 0x00002000
207 #define AT_ROUND_TO_PAGE 0x40000000
208
209 #define LOCK_VM_IN_WSL 1
210 #define LOCK_VM_IN_RAM 2
211
212 #define DIRECTORY_QUERY 1
213 #define DIRECTORY_TRAVERSE 2
214 #define DIRECTORY_CREATE_OBJECT 4
215 #define DIRECTORY_CREATE_SUBDIRECTORY 8
216 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x0f)
217
218 #define SYMBOLIC_LINK_QUERY 1
219
220 #define EVENT_QUERY_STATE 1
221 #define SEMAPHORE_QUERY_STATE 1
222
223 /* Specific ACCESS_MASKSs for objects created in Cygwin. */
224 #define CYG_SHARED_DIR_ACCESS (DIRECTORY_QUERY \
225 | DIRECTORY_TRAVERSE \
226 | DIRECTORY_CREATE_SUBDIRECTORY \
227 | DIRECTORY_CREATE_OBJECT \
228 | READ_CONTROL)
229
230 #define CYG_MUTANT_ACCESS (MUTANT_QUERY_STATE \
231 | SYNCHRONIZE \
232 | READ_CONTROL)
233
234 #define CYG_EVENT_ACCESS (EVENT_QUERY_STATE \
235 | EVENT_MODIFY_STATE \
236 | SYNCHRONIZE \
237 | READ_CONTROL)
238
239 #define CYG_SEMAPHORE_ACCESS (SEMAPHORE_QUERY_STATE \
240 | SEMAPHORE_MODIFY_STATE \
241 | SYNCHRONIZE \
242 | READ_CONTROL)
243
244 typedef ULONG KAFFINITY;
245
246 typedef enum _SYSTEM_INFORMATION_CLASS
247 {
248 SystemBasicInformation = 0,
249 SystemPerformanceInformation = 2,
250 SystemTimeOfDayInformation = 3,
251 SystemProcessesAndThreadsInformation = 5,
252 SystemProcessorTimes = 8,
253 SystemPagefileInformation = 18,
254 /* There are a lot more of these... */
255 } SYSTEM_INFORMATION_CLASS;
256
257 typedef struct _SYSTEM_BASIC_INFORMATION
258 {
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;
269 UCHAR NumberProcessors;
270 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
271
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
281 typedef struct __attribute__ ((aligned (8))) _SYSTEM_PROCESSOR_TIMES
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
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
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;
324
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;
370 DWORD Reserved;
371 } SYSTEM_THREADS, *PSYSTEM_THREADS;
372
373 typedef struct _SYSTEM_PROCESSES
374 {
375 ULONG NextEntryDelta;
376 ULONG ThreadCount;
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
392 typedef struct _IO_STATUS_BLOCK
393 {
394 NTSTATUS Status;
395 ULONG Information;
396 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
397
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
475 typedef struct __attribute__ ((aligned(8))) _SYSTEM_TIME_OF_DAY_INFORMATION
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,
488 ProcessTimes = 4,
489 ProcessSessionInformation = 24,
490 ProcessWow64Information = 26
491 } PROCESSINFOCLASS;
492
493 typedef struct _DEBUG_BUFFER
494 {
495 HANDLE SectionHandle;
496 PVOID SectionBase;
497 PVOID RemoteSectionBase;
498 ULONG SectionBaseDelta;
499 HANDLE EventPairHandle;
500 ULONG Unknown[2];
501 HANDLE RemoteThreadHandle;
502 ULONG InfoClassMask;
503 ULONG SizeOfInfo;
504 ULONG AllocatedSize;
505 ULONG SectionSize;
506 PVOID ModuleInformation;
507 PVOID BackTraceInformation;
508 PVOID HeapInformation;
509 PVOID LockInformation;
510 PVOID Reserved[9];
511 } DEBUG_BUFFER, *PDEBUG_BUFFER;
512
513 typedef struct _DEBUG_HEAP_INFORMATION
514 {
515 ULONG Base;
516 ULONG Flags;
517 USHORT Granularity;
518 USHORT Unknown;
519 ULONG Allocated;
520 ULONG Committed;
521 ULONG TagCount;
522 ULONG BlockCount;
523 ULONG Reserved[7];
524 PVOID Tags;
525 PVOID Blocks;
526 } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
527
528 typedef struct _DEBUG_MODULE_INFORMATION
529 {
530 ULONG Reserved[2];
531 ULONG Base;
532 ULONG Size;
533 ULONG Flags;
534 USHORT Index;
535 USHORT Unknown;
536 USHORT LoadCount;
537 USHORT ModuleNameOffset;
538 CHAR ImageName[256];
539 } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
540
541 typedef struct _KERNEL_USER_TIMES
542 {
543 LARGE_INTEGER CreateTime;
544 LARGE_INTEGER ExitTime;
545 LARGE_INTEGER KernelTime;
546 LARGE_INTEGER UserTime;
547 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
548
549 typedef struct _RTL_USER_PROCESS_PARAMETERS
550 {
551 ULONG AllocationSize;
552 ULONG Size;
553 ULONG Flags;
554 ULONG DebugFlags;
555 HANDLE hConsole;
556 ULONG ProcessGroup;
557 HANDLE hStdInput;
558 HANDLE hStdOutput;
559 HANDLE hStdError;
560 UNICODE_STRING CurrentDirectoryName;
561 HANDLE CurrentDirectoryHandle;
562 UNICODE_STRING DllPath;
563 UNICODE_STRING ImagePathName;
564 UNICODE_STRING CommandLine;
565 PWSTR Environment;
566 ULONG dwX;
567 ULONG dwY;
568 ULONG dwXSize;
569 ULONG dwYSize;
570 ULONG dwXCountChars;
571 ULONG dwYCountChars;
572 ULONG dwFillAttribute;
573 ULONG dwFlags;
574 ULONG wShowWindow;
575 UNICODE_STRING WindowTitle;
576 UNICODE_STRING DesktopInfo;
577 UNICODE_STRING ShellInfo;
578 UNICODE_STRING RuntimeInfo;
579 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
580
581 typedef struct _PEB
582 {
583 BYTE Reserved1[2];
584 BYTE BeingDebugged;
585 BYTE Reserved2[9];
586 PVOID LoaderData;
587 PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
588 BYTE Reserved3[4];
589 PVOID ProcessHeap;
590 PRTL_CRITICAL_SECTION FastPebLock;
591 BYTE Reserved4[436];
592 ULONG SessionId;
593 } PEB, *PPEB;
594
595 /* Simplifed definition, just to get the PEB pointer. */
596 typedef struct _TEB
597 {
598 PVOID dummy[12];
599 PPEB Peb;
600 /* A lot more follows... */
601 } TEB, *PTEB;
602
603 typedef struct _KSYSTEM_TIME
604 {
605 ULONG LowPart;
606 LONG High1Time;
607 LONG High2Time;
608 } KSYSTEM_TIME, *PKSYSTEM_TIME;
609
610 typedef struct _KUSER_SHARED_DATA
611 {
612 BYTE Reserved1[0x08];
613 KSYSTEM_TIME InterruptTime;
614 BYTE Reserved2[0x2c8];
615 ULONG DismountCount;
616 /* A lot more follows... */
617 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
618
619 typedef struct _PROCESS_BASIC_INFORMATION
620 {
621 NTSTATUS ExitStatus;
622 PPEB PebBaseAddress;
623 KAFFINITY AffinityMask;
624 KPRIORITY BasePriority;
625 ULONG UniqueProcessId;
626 ULONG InheritedFromUniqueProcessId;
627 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
628
629 typedef struct _PROCESS_SESSION_INFORMATION
630 {
631 ULONG SessionId;
632 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
633
634 typedef enum _MEMORY_INFORMATION_CLASS
635 {
636 MemoryBasicInformation,
637 MemoryWorkingSetList,
638 MemorySectionName,
639 MemoryBasicVlmInformation
640 } MEMORY_INFORMATION_CLASS;
641
642 typedef struct _MEMORY_WORKING_SET_LIST
643 {
644 ULONG NumberOfPages;
645 ULONG WorkingSetList[1];
646 } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
647
648 typedef struct _FILE_BASIC_INFORMATION {
649 LARGE_INTEGER CreationTime;
650 LARGE_INTEGER LastAccessTime;
651 LARGE_INTEGER LastWriteTime;
652 LARGE_INTEGER ChangeTime;
653 ULONG FileAttributes;
654 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
655
656 typedef struct _FILE_STANDARD_INFORMATION {
657 LARGE_INTEGER AllocationSize;
658 LARGE_INTEGER EndOfFile;
659 ULONG NumberOfLinks;
660 BOOLEAN DeletePending;
661 BOOLEAN Directory;
662 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
663
664 typedef struct _FILE_NETWORK_OPEN_INFORMATION {
665 LARGE_INTEGER CreationTime;
666 LARGE_INTEGER LastAccessTime;
667 LARGE_INTEGER LastWriteTime;
668 LARGE_INTEGER ChangeTime;
669 LARGE_INTEGER AllocationSize;
670 LARGE_INTEGER EndOfFile;
671 ULONG FileAttributes;
672 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
673
674 typedef struct _FILE_INTERNAL_INFORMATION {
675 LARGE_INTEGER FileId;
676 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
677
678 typedef struct _FILE_EA_INFORMATION {
679 ULONG EaSize;
680 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
681
682 typedef struct _FILE_ACCESS_INFORMATION {
683 ACCESS_MASK AccessFlags;
684 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
685
686 typedef struct _FILE_DISPOSITION_INFORMATION {
687 BOOLEAN DeleteFile;
688 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
689
690 typedef struct _FILE_POSITION_INFORMATION {
691 LARGE_INTEGER CurrentByteOffset;
692 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
693
694 typedef struct _FILE_END_OF_FILE_INFORMATION {
695 LARGE_INTEGER EndOfFile;
696 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
697
698 typedef struct _FILE_MODE_INFORMATION {
699 ULONG Mode;
700 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
701
702 typedef struct _FILE_ALIGNMENT_INFORMATION {
703 ULONG AlignmentRequirement;
704 } FILE_ALIGNMENT_INFORMATION;
705
706 typedef struct _FILE_NAME_INFORMATION {
707 ULONG FileNameLength;
708 WCHAR FileName[1];
709 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
710
711 typedef struct _FILE_LINK_INFORMATION {
712 BOOLEAN ReplaceIfExists;
713 HANDLE RootDirectory;
714 ULONG FileNameLength;
715 WCHAR FileName[1];
716 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
717
718 typedef struct _FILE_RENAME_INFORMATION {
719 BOOLEAN ReplaceIfExists;
720 HANDLE RootDirectory;
721 ULONG FileNameLength;
722 WCHAR FileName[1];
723 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
724
725 typedef struct _FILE_ALL_INFORMATION {
726 FILE_BASIC_INFORMATION BasicInformation;
727 FILE_STANDARD_INFORMATION StandardInformation;
728 FILE_INTERNAL_INFORMATION InternalInformation;
729 FILE_EA_INFORMATION EaInformation;
730 FILE_ACCESS_INFORMATION AccessInformation;
731 FILE_POSITION_INFORMATION PositionInformation;
732 FILE_MODE_INFORMATION ModeInformation;
733 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
734 FILE_NAME_INFORMATION NameInformation;
735 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
736
737 typedef struct _FILE_PIPE_LOCAL_INFORMATION
738 {
739 ULONG NamedPipeType;
740 ULONG NamedPipeConfiguration;
741 ULONG MaximumInstances;
742 ULONG CurrentInstances;
743 ULONG InboundQuota;
744 ULONG ReadDataAvailable;
745 ULONG OutboundQuota;
746 ULONG WriteQuotaAvailable;
747 ULONG NamedPipeState;
748 ULONG NamedPipeEnd;
749 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
750
751 typedef struct _FILE_COMPRESSION_INFORMATION
752 {
753 LARGE_INTEGER CompressedFileSize;
754 USHORT CompressionFormat;
755 UCHAR CompressionUnitShift;
756 UCHAR ChunkShift;
757 UCHAR ClusterShift;
758 UCHAR Reserved[3];
759 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
760
761 typedef struct _FILE_FS_DEVICE_INFORMATION
762 {
763 ULONG DeviceType;
764 ULONG Characteristics;
765 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
766
767 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
768 {
769 ULONG FileSystemAttributes;
770 ULONG MaximumComponentNameLength;
771 ULONG FileSystemNameLength;
772 WCHAR FileSystemName[1];
773 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
774
775 #pragma pack(push,4)
776 typedef struct _FILE_FS_VOLUME_INFORMATION
777 {
778 LARGE_INTEGER VolumeCreationTime;
779 ULONG VolumeSerialNumber;
780 ULONG VolumeLabelLength;
781 BOOLEAN SupportsObjects;
782 BOOLEAN __dummy;
783 WCHAR VolumeLabel[1];
784 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
785 #pragma pack(pop)
786
787 typedef struct _FILE_FS_SIZE_INFORMATION
788 {
789 LARGE_INTEGER TotalAllocationUnits;
790 LARGE_INTEGER AvailableAllocationUnits;
791 ULONG SectorsPerAllocationUnit;
792 ULONG BytesPerSector;
793 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
794
795 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
796 {
797 LARGE_INTEGER TotalAllocationUnits;
798 LARGE_INTEGER CallerAvailableAllocationUnits;
799 LARGE_INTEGER ActualAvailableAllocationUnits;
800 ULONG SectorsPerAllocationUnit;
801 ULONG BytesPerSector;
802 } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
803
804 typedef struct _FILE_FS_OBJECTID_INFORMATION {
805 UCHAR ObjectId[16];
806 UCHAR ExtendedInfo[48];
807 } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
808
809 typedef enum _FSINFOCLASS {
810 FileFsVolumeInformation = 1,
811 FileFsLabelInformation,
812 FileFsSizeInformation,
813 FileFsDeviceInformation,
814 FileFsAttributeInformation,
815 FileFsControlInformation,
816 FileFsFullSizeInformation,
817 FileFsObjectIdInformation,
818 FileFsDriverPathInformation,
819 FileFsMaximumInformation
820 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
821
822 typedef enum _OBJECT_INFORMATION_CLASS
823 {
824 ObjectBasicInformation = 0,
825 ObjectNameInformation = 1,
826 ObjectHandleInformation = 4
827 // and many more
828 } OBJECT_INFORMATION_CLASS;
829
830 typedef struct _OBJECT_BASIC_INFORMATION
831 {
832 ULONG Attributes;
833 ACCESS_MASK GrantedAccess;
834 ULONG HandleCount;
835 ULONG PointerCount;
836 ULONG PagedPoolUsage;
837 ULONG NonPagedPoolUsage;
838 ULONG Reserved[3];
839 ULONG NameInformationLength;
840 ULONG TypeInformationLength;
841 ULONG SecurityDescriptorLength;
842 LARGE_INTEGER CreateTime;
843 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
844
845 typedef struct _OBJECT_NAME_INFORMATION
846 {
847 UNICODE_STRING Name;
848 } OBJECT_NAME_INFORMATION;
849
850 typedef struct _DIRECTORY_BASIC_INFORMATION
851 {
852 UNICODE_STRING ObjectName;
853 UNICODE_STRING ObjectTypeName;
854 } DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
855
856 typedef struct _FILE_GET_EA_INFORMATION
857 {
858 ULONG NextEntryOffset;
859 UCHAR EaNameLength;
860 CHAR EaName[1];
861 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
862
863 typedef struct _FILE_FULL_EA_INFORMATION
864 {
865 ULONG NextEntryOffset;
866 UCHAR Flags;
867 UCHAR EaNameLength;
868 USHORT EaValueLength;
869 CHAR EaName[1];
870 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
871
872 typedef struct _FILE_MAILSLOT_SET_INFORMATION
873 {
874 LARGE_INTEGER ReadTimeout;
875 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
876
877 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, \
878 METHOD_BUFFERED, FILE_ANY_ACCESS)
879
880 typedef VOID NTAPI (*PIO_APC_ROUTINE)(PVOID, PIO_STATUS_BLOCK, ULONG);
881
882 typedef enum _EVENT_TYPE
883 {
884 NotificationEvent = 0,
885 SynchronizationEvent
886 } EVENT_TYPE, *PEVENT_TYPE;
887
888 typedef struct _EVENT_BASIC_INFORMATION
889 {
890 EVENT_TYPE EventType;
891 LONG SignalState;
892 } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
893
894 typedef enum _EVENT_INFORMATION_CLASS
895 {
896 EventBasicInformation = 0
897 } EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;
898
899 typedef enum _THREAD_INFORMATION_CLASS
900 {
901 ThreadImpersonationToken = 5
902 } THREAD_INFORMATION_CLASS, *PTHREAD_INFORMATION_CLASS;
903
904 #define RTL_QUERY_REGISTRY_SUBKEY 0x01
905 #define RTL_QUERY_REGISTRY_TOPKEY 0x02
906 #define RTL_QUERY_REGISTRY_REQUIRED 0x04
907 #define RTL_QUERY_REGISTRY_NOVALUE 0x08
908 #define RTL_QUERY_REGISTRY_NOEXPAND 0x10
909 #define RTL_QUERY_REGISTRY_DIRECT 0x20
910 #define RTL_QUERY_REGISTRY_DELETE 0x40
911 #define RTL_QUERY_REGISTRY_NOSTRING 0x80
912
913 #define RTL_REGISTRY_ABSOLUTE 0
914 #define RTL_REGISTRY_SERVICES 1
915 #define RTL_REGISTRY_CONTROL 2
916 #define RTL_REGISTRY_WINDOWS_NT 3
917 #define RTL_REGISTRY_DEVICEMAP 4
918 #define RTL_REGISTRY_USER 5
919 #define RTL_REGISTRY_HANDLE 0x40000000
920 #define RTL_REGISTRY_OPTIONAL 0x80000000
921
922 typedef NTSTATUS (*PRTL_QUERY_REGISTRY_ROUTINE)
923 (PWSTR, ULONG, PVOID, ULONG, PVOID, PVOID);
924
925 typedef struct _RTL_QUERY_REGISTRY_TABLE
926 {
927 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
928 ULONG Flags;
929 PCWSTR Name;
930 PVOID EntryContext;
931 ULONG DefaultType;
932 PVOID DefaultData;
933 ULONG DefaultLength;
934 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
935
936 typedef enum _KEY_VALUE_INFORMATION_CLASS
937 {
938 KeyValueBasicInformation = 0,
939 KeyValueFullInformation,
940 KeyValuePartialInformation
941 } KEY_VALUE_INFORMATION_CLASS, *PKEY_VALUE_INFORMATION_CLASS;
942
943 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
944 {
945 ULONG TitleIndex;
946 ULONG Type;
947 ULONG DataLength;
948 UCHAR Data[1];
949 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
950
951 typedef enum _TIMER_TYPE
952 {
953 NotificationTimer,
954 SynchronisationTimer
955 } TIMER_TYPE, *PTIMER_TYPE;
956
957 typedef VOID (APIENTRY *PTIMER_APC_ROUTINE)(PVOID, ULONG, ULONG);
958
959 /* Function declarations for ntdll.dll. These don't appear in any
960 standard Win32 header. */
961
962 #define NtCurrentProcess() ((HANDLE) 0xffffffff)
963 #define NtCurrentThread() ((HANDLE) 0xfffffffe)
964
965 #ifdef __cplusplus
966 /* This is the mapping of the KUSER_SHARED_DATA structure into the 32 bit
967 user address space. We need it here to access the current DismountCount. */
968 static KUSER_SHARED_DATA &SharedUserData
969 = *(volatile PKUSER_SHARED_DATA) 0x7ffe0000;
970
971 extern "C"
972 {
973 #endif
974 NTSTATUS NTAPI NtAccessCheck (PSECURITY_DESCRIPTOR, HANDLE, ACCESS_MASK,
975 PGENERIC_MAPPING, PPRIVILEGE_SET, PULONG,
976 PACCESS_MASK, PNTSTATUS);
977 NTSTATUS NTAPI NtAdjustPrivilegesToken (HANDLE, BOOLEAN, PTOKEN_PRIVILEGES,
978 ULONG, PTOKEN_PRIVILEGES, PULONG);
979 NTSTATUS NTAPI NtAllocateLocallyUniqueId (PLUID);
980 NTSTATUS NTAPI NtAllocateUuids (PLARGE_INTEGER, PULONG, PULONG, PUCHAR);
981 NTSTATUS NTAPI NtCancelTimer (HANDLE, PBOOLEAN);
982 NTSTATUS NTAPI NtClose (HANDLE);
983 NTSTATUS NTAPI NtCommitTransaction (HANDLE, BOOLEAN);
984 NTSTATUS NTAPI NtCreateDirectoryObject (PHANDLE, ACCESS_MASK,
985 POBJECT_ATTRIBUTES);
986 NTSTATUS NTAPI NtCreateKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG,
987 PUNICODE_STRING, ULONG, PULONG);
988 NTSTATUS NTAPI NtCreateEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
989 EVENT_TYPE, BOOLEAN);
990 NTSTATUS NTAPI NtCreateFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
991 PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG,
992 ULONG, ULONG, PVOID, ULONG);
993 NTSTATUS NTAPI NtCreateMailslotFile(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
994 PIO_STATUS_BLOCK, ULONG, ULONG, ULONG,
995 PLARGE_INTEGER);
996 NTSTATUS NTAPI NtCreateMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
997 BOOLEAN);
998 NTSTATUS NTAPI NtCreateSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
999 PLARGE_INTEGER, ULONG, ULONG, HANDLE);
1000 NTSTATUS NTAPI NtCreateSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1001 LONG, LONG);
1002 NTSTATUS NTAPI NtCreateTimer (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1003 TIMER_TYPE);
1004 NTSTATUS NTAPI NtCreateToken (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1005 TOKEN_TYPE, PLUID, PLARGE_INTEGER, PTOKEN_USER,
1006 PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_OWNER,
1007 PTOKEN_PRIMARY_GROUP, PTOKEN_DEFAULT_DACL,
1008 PTOKEN_SOURCE);
1009 NTSTATUS NTAPI NtCreateTransaction (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1010 LPGUID, HANDLE, ULONG, ULONG, ULONG,
1011 PLARGE_INTEGER, PUNICODE_STRING);
1012 NTSTATUS NTAPI NtDuplicateToken (HANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1013 BOOLEAN, TOKEN_TYPE, PHANDLE);
1014 NTSTATUS NTAPI NtFsControlFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
1015 PIO_STATUS_BLOCK, ULONG, PVOID, ULONG,
1016 PVOID, ULONG);
1017 NTSTATUS NTAPI NtFlushBuffersFile (HANDLE, PIO_STATUS_BLOCK);
1018 NTSTATUS NTAPI NtLoadKey (POBJECT_ATTRIBUTES, POBJECT_ATTRIBUTES);
1019 NTSTATUS NTAPI NtLockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG);
1020 NTSTATUS NTAPI NtMapViewOfSection (HANDLE, HANDLE, PVOID *, ULONG, ULONG,
1021 PLARGE_INTEGER, PULONG, SECTION_INHERIT,
1022 ULONG, ULONG);
1023 NTSTATUS NTAPI NtNotifyChangeDirectoryFile (HANDLE, HANDLE, PIO_APC_ROUTINE,
1024 PVOID, PIO_STATUS_BLOCK,
1025 PFILE_NOTIFY_INFORMATION, ULONG,
1026 ULONG, BOOLEAN);
1027 NTSTATUS NTAPI NtOpenDirectoryObject (PHANDLE, ACCESS_MASK,
1028 POBJECT_ATTRIBUTES);
1029 NTSTATUS NTAPI NtOpenEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
1030 NTSTATUS NTAPI NtOpenFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1031 PIO_STATUS_BLOCK, ULONG, ULONG);
1032 NTSTATUS NTAPI NtOpenKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
1033 NTSTATUS NTAPI NtOpenMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
1034 NTSTATUS NTAPI NtOpenProcessToken (HANDLE, ACCESS_MASK, PHANDLE);
1035 NTSTATUS NTAPI NtOpenThreadToken (HANDLE, ACCESS_MASK, BOOLEAN, PHANDLE);
1036 NTSTATUS NTAPI NtOpenSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
1037 NTSTATUS NTAPI NtOpenSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
1038 NTSTATUS NTAPI NtOpenSymbolicLinkObject (PHANDLE, ACCESS_MASK,
1039 POBJECT_ATTRIBUTES);
1040 /* WARNING! Don't rely on the timestamp information returned by
1041 NtQueryAttributesFile. Only the DOS file attribute info is reliable. */
1042 NTSTATUS NTAPI NtPrivilegeCheck (HANDLE, PPRIVILEGE_SET, PBOOLEAN);
1043 NTSTATUS NTAPI NtQueryAttributesFile (POBJECT_ATTRIBUTES,
1044 PFILE_BASIC_INFORMATION);
1045 NTSTATUS NTAPI NtQueryDirectoryFile(HANDLE, HANDLE, PVOID, PVOID,
1046 PIO_STATUS_BLOCK, PVOID, ULONG,
1047 FILE_INFORMATION_CLASS, BOOLEAN,
1048 PUNICODE_STRING, BOOLEAN);
1049 NTSTATUS NTAPI NtQueryDirectoryObject (HANDLE, PVOID, ULONG, BOOLEAN,
1050 BOOLEAN, PULONG, PULONG);
1051 NTSTATUS NTAPI NtQueryEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
1052 BOOLEAN, PVOID, ULONG, PULONG, BOOLEAN);
1053 NTSTATUS NTAPI NtQueryEvent (HANDLE, EVENT_INFORMATION_CLASS, PVOID, ULONG,
1054 PULONG);
1055 NTSTATUS NTAPI NtQueryFullAttributesFile (POBJECT_ATTRIBUTES,
1056 PFILE_NETWORK_OPEN_INFORMATION);
1057 NTSTATUS NTAPI NtQueryInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID,
1058 ULONG, FILE_INFORMATION_CLASS);
1059 NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS,
1060 PVOID, ULONG, PULONG);
1061 NTSTATUS NTAPI NtQueryInformationToken (HANDLE, TOKEN_INFORMATION_CLASS,
1062 PVOID, ULONG, PULONG);
1063 NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, VOID *,
1064 ULONG, ULONG *);
1065 NTSTATUS NTAPI NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS,
1066 PVOID, ULONG, PULONG);
1067
1068 NTSTATUS WINAPI NtQuerySystemTime (PLARGE_INTEGER);
1069
1070 NTSTATUS NTAPI NtQuerySecurityObject (HANDLE, SECURITY_INFORMATION,
1071 PSECURITY_DESCRIPTOR, ULONG, PULONG);
1072 NTSTATUS NTAPI NtQuerySymbolicLinkObject (HANDLE, PUNICODE_STRING, PULONG);
1073 NTSTATUS NTAPI NtQueryTimerResolution (PULONG, PULONG, PULONG);
1074 NTSTATUS NTAPI NtQueryValueKey (HANDLE, PUNICODE_STRING,
1075 KEY_VALUE_INFORMATION_CLASS, PVOID, ULONG,
1076 PULONG);
1077 NTSTATUS NTAPI NtQueryVirtualMemory (HANDLE, PVOID, MEMORY_INFORMATION_CLASS,
1078 PVOID, ULONG, PULONG);
1079 NTSTATUS NTAPI NtQueryVolumeInformationFile (HANDLE, IO_STATUS_BLOCK *,
1080 VOID *, ULONG,
1081 FS_INFORMATION_CLASS);
1082 NTSTATUS NTAPI NtReadFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
1083 PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER,
1084 PULONG);
1085 NTSTATUS NTAPI NtRollbackTransaction (HANDLE, BOOLEAN);
1086 NTSTATUS NTAPI NtSetEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG);
1087 NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
1088 FILE_INFORMATION_CLASS);
1089 NTSTATUS NTAPI NtSetInformationThread (HANDLE, THREAD_INFORMATION_CLASS,
1090 PVOID, ULONG);
1091 NTSTATUS NTAPI NtSetInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, PVOID,
1092 ULONG);
1093 NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION,
1094 PSECURITY_DESCRIPTOR);
1095 NTSTATUS NTAPI NtSetTimer (HANDLE, PLARGE_INTEGER, PTIMER_APC_ROUTINE, PVOID,
1096 BOOLEAN, LONG, PBOOLEAN);
1097 NTSTATUS NTAPI NtSetTimerResolution (ULONG, BOOLEAN, PULONG);
1098 NTSTATUS NTAPI NtSetValueKey (HANDLE, PUNICODE_STRING, ULONG, ULONG, PVOID,
1099 ULONG);
1100 NTSTATUS NTAPI NtUnlockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG);
1101 NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID);
1102 NTSTATUS NTAPI NtWriteFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
1103 PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER,
1104 PULONG);
1105 NTSTATUS NTAPI RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR,
1106 PSECURITY_DESCRIPTOR, PULONG);
1107 VOID NTAPI RtlAcquirePebLock ();
1108 NTSTATUS NTAPI RtlAddAccessAllowedAce (PACL, ULONG, ACCESS_MASK, PSID);
1109 NTSTATUS NTAPI RtlAddAccessDeniedAce (PACL, ULONG, ACCESS_MASK, PSID);
1110 NTSTATUS NTAPI RtlAddAce (PACL, ULONG, ULONG, PVOID, ULONG);
1111 PVOID NTAPI RtlAllocateHeap (PVOID, ULONG, SIZE_T);
1112 NTSTATUS NTAPI RtlAppendUnicodeToString (PUNICODE_STRING, PCWSTR);
1113 NTSTATUS NTAPI RtlAppendUnicodeStringToString (PUNICODE_STRING,
1114 PUNICODE_STRING);
1115 NTSTATUS NTAPI RtlAnsiStringToUnicodeString (PUNICODE_STRING, PANSI_STRING,
1116 BOOLEAN);
1117 NTSTATUS NTAPI RtlCheckRegistryKey (ULONG, PCWSTR);
1118 LONG NTAPI RtlCompareUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1119 BOOLEAN);
1120 NTSTATUS NTAPI RtlConvertSidToUnicodeString (PUNICODE_STRING, PSID, BOOLEAN);
1121 NTSTATUS NTAPI RtlConvertToAutoInheritSecurityObject (PSECURITY_DESCRIPTOR,
1122 PSECURITY_DESCRIPTOR,
1123 PSECURITY_DESCRIPTOR *,
1124 GUID *, BOOLEAN,
1125 PGENERIC_MAPPING);
1126 NTSTATUS NTAPI RtlCopySid (ULONG, PSID, PSID);
1127 VOID NTAPI RtlCopyUnicodeString (PUNICODE_STRING, PUNICODE_STRING);
1128 NTSTATUS NTAPI RtlCreateAcl (PACL, ULONG, ULONG);
1129 NTSTATUS NTAPI RtlCreateRegistryKey (ULONG, PCWSTR);
1130 NTSTATUS NTAPI RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR, ULONG);
1131 BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING, PCSTR);
1132 NTSTATUS NTAPI RtlDeleteSecurityObject (PSECURITY_DESCRIPTOR *);
1133 NTSTATUS NTAPI RtlDowncaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1134 BOOLEAN);
1135 NTSTATUS NTAPI RtlEnterCriticalSection (PRTL_CRITICAL_SECTION);
1136 BOOLEAN NTAPI RtlEqualPrefixSid (PSID, PSID);
1137 BOOLEAN NTAPI RtlEqualSid (PSID, PSID);
1138 BOOLEAN NTAPI RtlEqualUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1139 BOOLEAN);
1140 VOID NTAPI RtlFreeAnsiString (PANSI_STRING);
1141 BOOLEAN NTAPI RtlFreeHeap (PVOID, ULONG, PVOID);
1142 VOID NTAPI RtlFreeOemString (POEM_STRING);
1143 VOID NTAPI RtlFreeUnicodeString (PUNICODE_STRING);
1144 BOOLEAN NTAPI RtlFirstFreeAce (PACL, PVOID *);
1145 NTSTATUS NTAPI RtlGetAce (PACL, ULONG, PVOID);
1146 NTSTATUS NTAPI RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR,
1147 PSECURITY_DESCRIPTOR_CONTROL,
1148 PULONG);
1149 HANDLE NTAPI RtlGetCurrentTransaction ();
1150 NTSTATUS NTAPI RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, PBOOLEAN,
1151 PACL *, PBOOLEAN);
1152 NTSTATUS NTAPI RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *,
1153 PBOOLEAN);
1154 NTSTATUS NTAPI RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *,
1155 PBOOLEAN);
1156 PSID_IDENTIFIER_AUTHORITY NTAPI RtlIdentifierAuthoritySid (PSID);
1157 VOID NTAPI RtlInitEmptyUnicodeString (PUNICODE_STRING, PCWSTR, USHORT);
1158 NTSTATUS NTAPI RtlInitializeSid (PSID, PSID_IDENTIFIER_AUTHORITY, UCHAR);
1159 VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR);
1160 NTSTATUS NTAPI RtlIntegerToUnicodeString (ULONG, ULONG, PUNICODE_STRING);
1161 ULONG NTAPI RtlIsDosDeviceName_U (PCWSTR);
1162 NTSTATUS NTAPI RtlLeaveCriticalSection (PRTL_CRITICAL_SECTION);
1163 ULONG NTAPI RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR);
1164 ULONG NTAPI RtlLengthSid (PSID);
1165 ULONG NTAPI RtlNtStatusToDosError (NTSTATUS);
1166 NTSTATUS NTAPI RtlOemStringToUnicodeString (PUNICODE_STRING, POEM_STRING,
1167 BOOLEAN);
1168 BOOLEAN NTAPI RtlPrefixUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1169 BOOLEAN);
1170 NTSTATUS NTAPI RtlQueryRegistryValues (ULONG, PCWSTR,
1171 PRTL_QUERY_REGISTRY_TABLE, PVOID,
1172 PVOID);
1173 VOID NTAPI RtlReleasePebLock ();
1174 VOID NTAPI RtlSecondsSince1970ToTime (ULONG, PLARGE_INTEGER);
1175 NTSTATUS NTAPI RtlSetCurrentDirectory_U (PUNICODE_STRING);
1176 BOOLEAN NTAPI RtlSetCurrentTransaction (HANDLE);
1177 NTSTATUS NTAPI RtlSetControlSecurityDescriptor (PSECURITY_DESCRIPTOR,
1178 SECURITY_DESCRIPTOR_CONTROL,
1179 SECURITY_DESCRIPTOR_CONTROL);
1180 NTSTATUS NTAPI RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, BOOLEAN,
1181 PACL, BOOLEAN);
1182 NTSTATUS NTAPI RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID,
1183 BOOLEAN);
1184 NTSTATUS NTAPI RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID,
1185 BOOLEAN);
1186 PUCHAR NTAPI RtlSubAuthorityCountSid (PSID);
1187 PULONG NTAPI RtlSubAuthoritySid (PSID, ULONG);
1188 NTSTATUS NTAPI RtlUnicodeStringToAnsiString (PANSI_STRING, PUNICODE_STRING,
1189 BOOLEAN);
1190 NTSTATUS NTAPI RtlUnicodeStringToOemString (PANSI_STRING, PUNICODE_STRING,
1191 BOOLEAN);
1192 WCHAR NTAPI RtlUpcaseUnicodeChar (WCHAR);
1193 NTSTATUS NTAPI RtlUpcaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1194 BOOLEAN);
1195 NTSTATUS NTAPI RtlWriteRegistryValue (ULONG, PCWSTR, PCWSTR, ULONG, PVOID,
1196 ULONG);
1197
1198 #ifdef __cplusplus
1199 /* A few Rtl functions are either actually macros, or they just don't
1200 exist even though they would be a big help. We implement them here,
1201 partly as inline functions. */
1202
1203 /* RtlInitEmptyUnicodeString is defined as a macro in wdm.h, but that file
1204 is missing entirely in w32api. */
1205 inline
1206 VOID NTAPI RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf,
1207 USHORT len)
1208 {
1209 dest->Length = 0;
1210 dest->MaximumLength = len;
1211 dest->Buffer = (PWSTR) buf;
1212 }
1213 /* Like RtlInitEmptyUnicodeString, but initialize Length to len, too.
1214 This is for instance useful when creating a UNICODE_STRING from an
1215 NtQueryInformationFile info buffer, where the length of the filename
1216 is known, but you can't rely on the string being 0-terminated.
1217 If you know it's 0-terminated, just use RtlInitUnicodeString(). */
1218 inline
1219 VOID NTAPI RtlInitCountedUnicodeString (PUNICODE_STRING dest, PCWSTR buf,
1220 USHORT len)
1221 {
1222 dest->Length = dest->MaximumLength = len;
1223 dest->Buffer = (PWSTR) buf;
1224 }
1225 /* Split path into dirname and basename part. This function does not
1226 copy anything! It just initializes the dirname and basename
1227 UNICODE_STRINGs so that their Buffer members point to the right spot
1228 into path's Buffer, and the Length (and MaximumLength) members are set
1229 to match the dirname part and the basename part.
1230 Note that dirname's Length is set so that it also includes the trailing
1231 backslash. If you don't need it, just subtract sizeof(WCHAR) from
1232 dirname.Length. */
1233 inline
1234 VOID NTAPI RtlSplitUnicodePath (PUNICODE_STRING path, PUNICODE_STRING dirname,
1235 PUNICODE_STRING basename)
1236 {
1237 USHORT len = path->Length / sizeof (WCHAR);
1238 while (len > 0 && path->Buffer[--len] != L'\\')
1239 ;
1240 ++len;
1241 if (dirname)
1242 RtlInitCountedUnicodeString (dirname, path->Buffer, len * sizeof (WCHAR));
1243 if (basename)
1244 RtlInitCountedUnicodeString (basename, &path->Buffer[len],
1245 path->Length - len * sizeof (WCHAR));
1246 }
1247 /* Check if prefix is a prefix of path. */
1248 inline
1249 BOOLEAN NTAPI RtlEqualUnicodePathPrefix (PUNICODE_STRING path,
1250 PUNICODE_STRING prefix,
1251 BOOLEAN caseinsensitive)
1252 {
1253 UNICODE_STRING p;
1254
1255 RtlInitCountedUnicodeString (&p, path->Buffer,
1256 prefix->Length < path->Length
1257 ? prefix->Length : path->Length);
1258 return RtlEqualUnicodeString (&p, prefix, caseinsensitive);
1259 }
1260 /* Check if sufffix is a sufffix of path. */
1261 inline
1262 BOOL NTAPI RtlEqualUnicodePathSuffix (PUNICODE_STRING path,
1263 PUNICODE_STRING suffix,
1264 BOOLEAN caseinsensitive)
1265 {
1266 UNICODE_STRING p;
1267
1268 if (suffix->Length < path->Length)
1269 RtlInitCountedUnicodeString (&p, (PWCHAR) ((PBYTE) path->Buffer
1270 + path->Length - suffix->Length),
1271 suffix->Length);
1272 else
1273 RtlInitCountedUnicodeString (&p, path->Buffer, path->Length);
1274 return RtlEqualUnicodeString (&p, suffix, caseinsensitive);
1275 }
1276 /* Implemented in strfuncs.cc. Create a Hex UNICODE_STRING from a given
1277 64 bit integer value. If append is TRUE, append the hex string,
1278 otherwise overwrite dest. Returns either STATUS_SUCCESS, or
1279 STATUS_BUFFER_OVERFLOW, if the unicode buffer is too small (hasn't
1280 room for 16 WCHARs). */
1281 NTSTATUS NTAPI RtlInt64ToHexUnicodeString (ULONGLONG value,
1282 PUNICODE_STRING dest,
1283 BOOLEAN append);
1284 /* Set file attributes. Don't change file times. */
1285 inline
1286 NTSTATUS NTAPI NtSetAttributesFile (HANDLE h, ULONG attr)
1287 {
1288 IO_STATUS_BLOCK io;
1289 FILE_BASIC_INFORMATION fbi;
1290 fbi.CreationTime.QuadPart = fbi.LastAccessTime.QuadPart =
1291 fbi.LastWriteTime.QuadPart = fbi.ChangeTime.QuadPart = 0LL;
1292 fbi.FileAttributes = attr ?: FILE_ATTRIBUTE_NORMAL;
1293 return NtSetInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation);
1294 }
1295
1296 /* This test for a signalled event is twice as fast as calling
1297 WaitForSingleObject (event, 0). */
1298 inline
1299 BOOL NTAPI IsEventSignalled (HANDLE event)
1300 {
1301 EVENT_BASIC_INFORMATION ebi;
1302 return NT_SUCCESS (NtQueryEvent (event, EventBasicInformation,
1303 &ebi, sizeof ebi, NULL))
1304 && ebi.SignalState != 0;
1305
1306 }
1307 }
1308 #endif
1309 #endif /*_NTDLL_H*/
This page took 0.090894 seconds and 4 git commands to generate.