1 /* ntdll.h. Contains ntdll specific stuff not defined elsewhere.
3 Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
4 2009, 2010, 2011 Red Hat, Inc.
6 This file is part of Cygwin.
8 This software is a copyrighted work licensed under the terms of the
9 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
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)
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)
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
77 #define FILE_SUPERSEDED 0
79 #define FILE_CREATED 2
80 #define FILE_OVERWRITTEN 3
82 #define FILE_DOES_NOT_EXIST 5
84 #define FILE_WRITE_TO_END_OF_FILE (-1LL)
85 #define FILE_USE_FILE_POINTER_POSITION (-2LL)
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
98 /* Transaction access rights. */
99 #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x3F)
101 typedef enum _FILE_INFORMATION_CLASS
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
;
146 typedef struct _FILE_NAMES_INFORMATION
148 ULONG NextEntryOffset
;
150 ULONG FileNameLength
;
152 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
154 typedef struct _FILE_DIRECTORY_INFORMATION
{
155 ULONG NextEntryOffset
;
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
;
166 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
168 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
170 ULONG NextEntryOffset
;
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
;
181 CCHAR ShortNameLength
;
184 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
;
186 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
188 ULONG NextEntryOffset
;
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
;
199 CCHAR ShortNameLength
;
201 LARGE_INTEGER FileId
;
203 } FILE_ID_BOTH_DIR_INFORMATION
, *PFILE_ID_BOTH_DIR_INFORMATION
;
206 #define AT_EXTENDABLE_FILE 0x00002000
207 #define AT_ROUND_TO_PAGE 0x40000000
209 #define LOCK_VM_IN_WSL 1
210 #define LOCK_VM_IN_RAM 2
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)
218 #define SYMBOLIC_LINK_QUERY 1
220 #define EVENT_QUERY_STATE 1
221 #define SEMAPHORE_QUERY_STATE 1
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 \
230 #define CYG_MUTANT_ACCESS (MUTANT_QUERY_STATE \
234 #define CYG_EVENT_ACCESS (EVENT_QUERY_STATE \
235 | EVENT_MODIFY_STATE \
239 #define CYG_SEMAPHORE_ACCESS (SEMAPHORE_QUERY_STATE \
240 | SEMAPHORE_MODIFY_STATE \
244 typedef ULONG KAFFINITY
;
246 typedef enum _SYSTEM_INFORMATION_CLASS
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
;
257 typedef struct _SYSTEM_BASIC_INFORMATION
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
;
272 typedef struct _SYSTEM_PAGEFILE_INFORMATION
274 ULONG NextEntryOffset
;
278 UNICODE_STRING FileName
;
279 } SYSTEM_PAGEFILE_INFORMATION
, *PSYSTEM_PAGEFILE_INFORMATION
;
281 typedef struct __attribute__ ((aligned (8))) _SYSTEM_PROCESSOR_TIMES
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
;
291 typedef LONG KPRIORITY
;
292 typedef struct _VM_COUNTERS
294 ULONG PeakVirtualSize
;
296 ULONG PageFaultCount
;
297 ULONG PeakWorkingSetSize
;
298 ULONG WorkingSetSize
;
299 ULONG QuotaPeakPagedPoolUsage
;
300 ULONG QuotaPagedPoolUsage
;
301 ULONG QuotaPeakNonPagedPoolUsage
;
302 ULONG QuotaNonPagedPoolUsage
;
304 ULONG PeakPagefileUsage
;
305 } VM_COUNTERS
, *PVM_COUNTERS
;
307 typedef struct _CLIENT_ID
309 HANDLE UniqueProcess
;
311 } CLIENT_ID
, *PCLIENT_ID
;
357 typedef struct _SYSTEM_THREADS
359 LARGE_INTEGER KernelTime
;
360 LARGE_INTEGER UserTime
;
361 LARGE_INTEGER CreateTime
;
366 KPRIORITY BasePriority
;
367 ULONG ContextSwitchCount
;
369 KWAIT_REASON WaitReason
;
371 } SYSTEM_THREADS
, *PSYSTEM_THREADS
;
373 typedef struct _SYSTEM_PROCESSES
375 ULONG NextEntryDelta
;
378 LARGE_INTEGER CreateTime
;
379 LARGE_INTEGER UserTime
;
380 LARGE_INTEGER KernelTime
;
381 UNICODE_STRING ProcessName
;
382 KPRIORITY BasePriority
;
384 ULONG InheritedFromProcessId
;
387 VM_COUNTERS VmCounters
;
388 IO_COUNTERS IoCounters
;
389 SYSTEM_THREADS Threads
[1];
390 } SYSTEM_PROCESSES
, *PSYSTEM_PROCESSES
;
392 typedef struct _IO_STATUS_BLOCK
396 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
398 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
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
;
412 ULONG WriteCopyFaults
;
413 ULONG TransitionFaults
;
415 ULONG DemandZeroFaults
;
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
;
436 ULONG MmSystemCachePage
;
438 ULONG SystemDriverPage
;
439 ULONG FastReadNoWait
;
441 ULONG FastReadResourceMiss
;
442 ULONG FastReadNotPossible
;
443 ULONG FastMdlReadNoWait
;
444 ULONG FastMdlReadWait
;
445 ULONG FastMdlReadResourceMiss
;
446 ULONG FastMdlReadNotPossible
;
449 ULONG MapDataNoWaitMiss
;
450 ULONG MapDataWaitMiss
;
451 ULONG PinMappedDataCount
;
454 ULONG PinReadNoWaitMiss
;
455 ULONG PinReadWaitMiss
;
456 ULONG CopyReadNoWait
;
458 ULONG CopyReadNoWaitMiss
;
459 ULONG CopyReadWaitMiss
;
462 ULONG MdlReadNoWaitMiss
;
463 ULONG MdlReadWaitMiss
;
466 ULONG LazyWritePages
;
469 ULONG ContextSwitches
;
470 ULONG FirstLevelTbFills
;
471 ULONG SecondLevelTbFills
;
473 } SYSTEM_PERFORMANCE_INFORMATION
, *PSYSTEM_PERFORMANCE_INFORMATION
;
475 typedef struct __attribute__ ((aligned(8))) _SYSTEM_TIME_OF_DAY_INFORMATION
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
;
483 typedef enum _PROCESSINFOCLASS
485 ProcessBasicInformation
= 0,
486 ProcessQuotaLimits
= 1,
487 ProcessVmCounters
= 3,
489 ProcessSessionInformation
= 24,
490 ProcessWow64Information
= 26
493 typedef struct _DEBUG_BUFFER
495 HANDLE SectionHandle
;
497 PVOID RemoteSectionBase
;
498 ULONG SectionBaseDelta
;
499 HANDLE EventPairHandle
;
501 HANDLE RemoteThreadHandle
;
506 PVOID ModuleInformation
;
507 PVOID BackTraceInformation
;
508 PVOID HeapInformation
;
509 PVOID LockInformation
;
511 } DEBUG_BUFFER
, *PDEBUG_BUFFER
;
513 typedef struct _DEBUG_HEAP_INFORMATION
526 } DEBUG_HEAP_INFORMATION
, *PDEBUG_HEAP_INFORMATION
;
528 typedef struct _DEBUG_MODULE_INFORMATION
537 USHORT ModuleNameOffset
;
539 } DEBUG_MODULE_INFORMATION
, *PDEBUG_MODULE_INFORMATION
;
541 typedef struct _KERNEL_USER_TIMES
543 LARGE_INTEGER CreateTime
;
544 LARGE_INTEGER ExitTime
;
545 LARGE_INTEGER KernelTime
;
546 LARGE_INTEGER UserTime
;
547 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
549 typedef struct _RTL_USER_PROCESS_PARAMETERS
551 ULONG AllocationSize
;
560 UNICODE_STRING CurrentDirectoryName
;
561 HANDLE CurrentDirectoryHandle
;
562 UNICODE_STRING DllPath
;
563 UNICODE_STRING ImagePathName
;
564 UNICODE_STRING CommandLine
;
572 ULONG dwFillAttribute
;
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
;
587 PRTL_USER_PROCESS_PARAMETERS ProcessParameters
;
590 PRTL_CRITICAL_SECTION FastPebLock
;
595 /* Simplifed definition, just to get the PEB pointer. */
600 /* A lot more follows... */
603 typedef struct _KSYSTEM_TIME
608 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
610 typedef struct _KUSER_SHARED_DATA
612 BYTE Reserved1
[0x08];
613 KSYSTEM_TIME InterruptTime
;
614 BYTE Reserved2
[0x2c8];
616 /* A lot more follows... */
617 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
619 typedef struct _PROCESS_BASIC_INFORMATION
623 KAFFINITY AffinityMask
;
624 KPRIORITY BasePriority
;
625 ULONG UniqueProcessId
;
626 ULONG InheritedFromUniqueProcessId
;
627 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
629 typedef struct _PROCESS_SESSION_INFORMATION
632 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
634 typedef enum _MEMORY_INFORMATION_CLASS
636 MemoryBasicInformation
,
637 MemoryWorkingSetList
,
639 MemoryBasicVlmInformation
640 } MEMORY_INFORMATION_CLASS
;
642 typedef struct _MEMORY_WORKING_SET_LIST
645 ULONG WorkingSetList
[1];
646 } MEMORY_WORKING_SET_LIST
, *PMEMORY_WORKING_SET_LIST
;
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
;
656 typedef struct _FILE_STANDARD_INFORMATION
{
657 LARGE_INTEGER AllocationSize
;
658 LARGE_INTEGER EndOfFile
;
660 BOOLEAN DeletePending
;
662 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
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
;
674 typedef struct _FILE_INTERNAL_INFORMATION
{
675 LARGE_INTEGER FileId
;
676 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
678 typedef struct _FILE_EA_INFORMATION
{
680 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
682 typedef struct _FILE_ACCESS_INFORMATION
{
683 ACCESS_MASK AccessFlags
;
684 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
686 typedef struct _FILE_DISPOSITION_INFORMATION
{
688 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
690 typedef struct _FILE_POSITION_INFORMATION
{
691 LARGE_INTEGER CurrentByteOffset
;
692 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
694 typedef struct _FILE_END_OF_FILE_INFORMATION
{
695 LARGE_INTEGER EndOfFile
;
696 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
698 typedef struct _FILE_MODE_INFORMATION
{
700 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
702 typedef struct _FILE_ALIGNMENT_INFORMATION
{
703 ULONG AlignmentRequirement
;
704 } FILE_ALIGNMENT_INFORMATION
;
706 typedef struct _FILE_NAME_INFORMATION
{
707 ULONG FileNameLength
;
709 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
711 typedef struct _FILE_LINK_INFORMATION
{
712 BOOLEAN ReplaceIfExists
;
713 HANDLE RootDirectory
;
714 ULONG FileNameLength
;
716 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
718 typedef struct _FILE_RENAME_INFORMATION
{
719 BOOLEAN ReplaceIfExists
;
720 HANDLE RootDirectory
;
721 ULONG FileNameLength
;
723 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
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
;
737 typedef struct _FILE_PIPE_LOCAL_INFORMATION
740 ULONG NamedPipeConfiguration
;
741 ULONG MaximumInstances
;
742 ULONG CurrentInstances
;
744 ULONG ReadDataAvailable
;
746 ULONG WriteQuotaAvailable
;
747 ULONG NamedPipeState
;
749 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
751 typedef struct _FILE_COMPRESSION_INFORMATION
753 LARGE_INTEGER CompressedFileSize
;
754 USHORT CompressionFormat
;
755 UCHAR CompressionUnitShift
;
759 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
761 typedef struct _FILE_FS_DEVICE_INFORMATION
764 ULONG Characteristics
;
765 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
767 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
769 ULONG FileSystemAttributes
;
770 ULONG MaximumComponentNameLength
;
771 ULONG FileSystemNameLength
;
772 WCHAR FileSystemName
[1];
773 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
776 typedef struct _FILE_FS_VOLUME_INFORMATION
778 LARGE_INTEGER VolumeCreationTime
;
779 ULONG VolumeSerialNumber
;
780 ULONG VolumeLabelLength
;
781 BOOLEAN SupportsObjects
;
783 WCHAR VolumeLabel
[1];
784 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
787 typedef struct _FILE_FS_SIZE_INFORMATION
789 LARGE_INTEGER TotalAllocationUnits
;
790 LARGE_INTEGER AvailableAllocationUnits
;
791 ULONG SectorsPerAllocationUnit
;
792 ULONG BytesPerSector
;
793 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
795 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
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
;
804 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
806 UCHAR ExtendedInfo
[48];
807 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
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
;
822 typedef enum _OBJECT_INFORMATION_CLASS
824 ObjectBasicInformation
= 0,
825 ObjectNameInformation
= 1,
826 ObjectHandleInformation
= 4
828 } OBJECT_INFORMATION_CLASS
;
830 typedef struct _OBJECT_BASIC_INFORMATION
833 ACCESS_MASK GrantedAccess
;
836 ULONG PagedPoolUsage
;
837 ULONG NonPagedPoolUsage
;
839 ULONG NameInformationLength
;
840 ULONG TypeInformationLength
;
841 ULONG SecurityDescriptorLength
;
842 LARGE_INTEGER CreateTime
;
843 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
845 typedef struct _OBJECT_NAME_INFORMATION
848 } OBJECT_NAME_INFORMATION
;
850 typedef struct _DIRECTORY_BASIC_INFORMATION
852 UNICODE_STRING ObjectName
;
853 UNICODE_STRING ObjectTypeName
;
854 } DIRECTORY_BASIC_INFORMATION
, *PDIRECTORY_BASIC_INFORMATION
;
856 typedef struct _FILE_GET_EA_INFORMATION
858 ULONG NextEntryOffset
;
861 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
863 typedef struct _FILE_FULL_EA_INFORMATION
865 ULONG NextEntryOffset
;
868 USHORT EaValueLength
;
870 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
872 typedef struct _FILE_MAILSLOT_SET_INFORMATION
874 LARGE_INTEGER ReadTimeout
;
875 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
877 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, \
878 METHOD_BUFFERED, FILE_ANY_ACCESS)
880 typedef VOID
NTAPI (*PIO_APC_ROUTINE
)(PVOID
, PIO_STATUS_BLOCK
, ULONG
);
882 typedef enum _EVENT_TYPE
884 NotificationEvent
= 0,
886 } EVENT_TYPE
, *PEVENT_TYPE
;
888 typedef struct _EVENT_BASIC_INFORMATION
890 EVENT_TYPE EventType
;
892 } EVENT_BASIC_INFORMATION
, *PEVENT_BASIC_INFORMATION
;
894 typedef enum _EVENT_INFORMATION_CLASS
896 EventBasicInformation
= 0
897 } EVENT_INFORMATION_CLASS
, *PEVENT_INFORMATION_CLASS
;
899 typedef enum _THREAD_INFORMATION_CLASS
901 ThreadImpersonationToken
= 5
902 } THREAD_INFORMATION_CLASS
, *PTHREAD_INFORMATION_CLASS
;
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
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
922 typedef NTSTATUS (*PRTL_QUERY_REGISTRY_ROUTINE
)
923 (PWSTR
, ULONG
, PVOID
, ULONG
, PVOID
, PVOID
);
925 typedef struct _RTL_QUERY_REGISTRY_TABLE
927 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
934 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
936 typedef enum _KEY_VALUE_INFORMATION_CLASS
938 KeyValueBasicInformation
= 0,
939 KeyValueFullInformation
,
940 KeyValuePartialInformation
941 } KEY_VALUE_INFORMATION_CLASS
, *PKEY_VALUE_INFORMATION_CLASS
;
943 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
949 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
951 typedef enum _TIMER_TYPE
955 } TIMER_TYPE
, *PTIMER_TYPE
;
957 typedef VOID (APIENTRY
*PTIMER_APC_ROUTINE
)(PVOID
, ULONG
, ULONG
);
959 /* Function declarations for ntdll.dll. These don't appear in any
960 standard Win32 header. */
962 #define NtCurrentProcess() ((HANDLE) 0xffffffff)
963 #define NtCurrentThread() ((HANDLE) 0xfffffffe)
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;
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
,
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
,
996 NTSTATUS NTAPI
NtCreateMutant (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
998 NTSTATUS NTAPI
NtCreateSection (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
999 PLARGE_INTEGER
, ULONG
, ULONG
, HANDLE
);
1000 NTSTATUS NTAPI
NtCreateSemaphore (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
1002 NTSTATUS NTAPI
NtCreateTimer (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
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
,
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
,
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
,
1023 NTSTATUS NTAPI
NtNotifyChangeDirectoryFile (HANDLE
, HANDLE
, PIO_APC_ROUTINE
,
1024 PVOID
, PIO_STATUS_BLOCK
,
1025 PFILE_NOTIFY_INFORMATION
, ULONG
,
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
,
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
*,
1065 NTSTATUS NTAPI
NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS
,
1066 PVOID
, ULONG
, PULONG
);
1068 NTSTATUS WINAPI
NtQuerySystemTime (PLARGE_INTEGER
);
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
,
1077 NTSTATUS NTAPI
NtQueryVirtualMemory (HANDLE
, PVOID
, MEMORY_INFORMATION_CLASS
,
1078 PVOID
, ULONG
, PULONG
);
1079 NTSTATUS NTAPI
NtQueryVolumeInformationFile (HANDLE
, IO_STATUS_BLOCK
*,
1081 FS_INFORMATION_CLASS
);
1082 NTSTATUS NTAPI
NtReadFile (HANDLE
, HANDLE
, PIO_APC_ROUTINE
, PVOID
,
1083 PIO_STATUS_BLOCK
, PVOID
, ULONG
, PLARGE_INTEGER
,
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
,
1091 NTSTATUS NTAPI
NtSetInformationToken (HANDLE
, TOKEN_INFORMATION_CLASS
, PVOID
,
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
,
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
,
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
,
1115 NTSTATUS NTAPI
RtlAnsiStringToUnicodeString (PUNICODE_STRING
, PANSI_STRING
,
1117 NTSTATUS NTAPI
RtlCheckRegistryKey (ULONG
, PCWSTR
);
1118 LONG NTAPI
RtlCompareUnicodeString (PUNICODE_STRING
, PUNICODE_STRING
,
1120 NTSTATUS NTAPI
RtlConvertSidToUnicodeString (PUNICODE_STRING
, PSID
, BOOLEAN
);
1121 NTSTATUS NTAPI
RtlConvertToAutoInheritSecurityObject (PSECURITY_DESCRIPTOR
,
1122 PSECURITY_DESCRIPTOR
,
1123 PSECURITY_DESCRIPTOR
*,
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
,
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
,
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
,
1149 HANDLE NTAPI
RtlGetCurrentTransaction ();
1150 NTSTATUS NTAPI
RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR
, PBOOLEAN
,
1152 NTSTATUS NTAPI
RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR
, PSID
*,
1154 NTSTATUS NTAPI
RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR
, PSID
*,
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
,
1168 BOOLEAN NTAPI
RtlPrefixUnicodeString (PUNICODE_STRING
, PUNICODE_STRING
,
1170 NTSTATUS NTAPI
RtlQueryRegistryValues (ULONG
, PCWSTR
,
1171 PRTL_QUERY_REGISTRY_TABLE
, 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
,
1182 NTSTATUS NTAPI
RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR
, PSID
,
1184 NTSTATUS NTAPI
RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR
, PSID
,
1186 PUCHAR NTAPI
RtlSubAuthorityCountSid (PSID
);
1187 PULONG NTAPI
RtlSubAuthoritySid (PSID
, ULONG
);
1188 NTSTATUS NTAPI
RtlUnicodeStringToAnsiString (PANSI_STRING
, PUNICODE_STRING
,
1190 NTSTATUS NTAPI
RtlUnicodeStringToOemString (PANSI_STRING
, PUNICODE_STRING
,
1192 WCHAR NTAPI
RtlUpcaseUnicodeChar (WCHAR
);
1193 NTSTATUS NTAPI
RtlUpcaseUnicodeString (PUNICODE_STRING
, PUNICODE_STRING
,
1195 NTSTATUS NTAPI
RtlWriteRegistryValue (ULONG
, PCWSTR
, PCWSTR
, ULONG
, PVOID
,
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. */
1203 /* RtlInitEmptyUnicodeString is defined as a macro in wdm.h, but that file
1204 is missing entirely in w32api. */
1206 VOID NTAPI
RtlInitEmptyUnicodeString(PUNICODE_STRING dest
, PCWSTR buf
,
1210 dest
->MaximumLength
= len
;
1211 dest
->Buffer
= (PWSTR
) buf
;
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(). */
1219 VOID NTAPI
RtlInitCountedUnicodeString (PUNICODE_STRING dest
, PCWSTR buf
,
1222 dest
->Length
= dest
->MaximumLength
= len
;
1223 dest
->Buffer
= (PWSTR
) buf
;
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
1234 VOID NTAPI
RtlSplitUnicodePath (PUNICODE_STRING path
, PUNICODE_STRING dirname
,
1235 PUNICODE_STRING basename
)
1237 USHORT len
= path
->Length
/ sizeof (WCHAR
);
1238 while (len
> 0 && path
->Buffer
[--len
] != L
'\\')
1242 RtlInitCountedUnicodeString (dirname
, path
->Buffer
, len
* sizeof (WCHAR
));
1244 RtlInitCountedUnicodeString (basename
, &path
->Buffer
[len
],
1245 path
->Length
- len
* sizeof (WCHAR
));
1247 /* Check if prefix is a prefix of path. */
1249 BOOLEAN NTAPI
RtlEqualUnicodePathPrefix (PUNICODE_STRING path
,
1250 PUNICODE_STRING prefix
,
1251 BOOLEAN caseinsensitive
)
1255 RtlInitCountedUnicodeString (&p
, path
->Buffer
,
1256 prefix
->Length
< path
->Length
1257 ? prefix
->Length
: path
->Length
);
1258 return RtlEqualUnicodeString (&p
, prefix
, caseinsensitive
);
1260 /* Check if sufffix is a sufffix of path. */
1262 BOOL NTAPI
RtlEqualUnicodePathSuffix (PUNICODE_STRING path
,
1263 PUNICODE_STRING suffix
,
1264 BOOLEAN caseinsensitive
)
1268 if (suffix
->Length
< path
->Length
)
1269 RtlInitCountedUnicodeString (&p
, (PWCHAR
) ((PBYTE
) path
->Buffer
1270 + path
->Length
- suffix
->Length
),
1273 RtlInitCountedUnicodeString (&p
, path
->Buffer
, path
->Length
);
1274 return RtlEqualUnicodeString (&p
, suffix
, caseinsensitive
);
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
,
1284 /* Set file attributes. Don't change file times. */
1286 NTSTATUS NTAPI
NtSetAttributesFile (HANDLE h
, ULONG attr
)
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
);
1296 /* This test for a signalled event is twice as fast as calling
1297 WaitForSingleObject (event, 0). */
1299 BOOL NTAPI
IsEventSignalled (HANDLE event
)
1301 EVENT_BASIC_INFORMATION ebi
;
1302 return NT_SUCCESS (NtQueryEvent (event
, EventBasicInformation
,
1303 &ebi
, sizeof ebi
, NULL
))
1304 && ebi
.SignalState
!= 0;