1 /* ntdll.h. Contains ntdll specific stuff not defined elsewhere.
3 Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc.
5 This file is part of Cygwin.
7 This software is a copyrighted work licensed under the terms of the
8 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
11 #ifndef STATUS_INVALID_INFO_CLASS
12 /* Some w32api header file defines this so we need to conditionalize this
13 define to avoid warnings. */
14 #define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xc0000003)
16 #define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xc0000004)
17 #define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xc000000d)
18 #define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS) 0xc0000010)
19 #define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS) 0xc0000013)
20 #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xc0000023)
21 #define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS) 0xc0000034)
22 #define STATUS_SHARING_VIOLATION ((NTSTATUS) 0xc0000043)
23 #define STATUS_DELETE_PENDING ((NTSTATUS) 0xc0000056)
24 #define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xc00000a1)
25 #define STATUS_NOT_SUPPORTED ((NTSTATUS) 0xc00000bb)
26 #define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS) 0xc0000101)
27 #define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS) 0x00000106)
28 #define STATUS_INVALID_LEVEL ((NTSTATUS) 0xc0000148)
29 #define STATUS_NO_MORE_FILES ((NTSTATUS) 0x80000006)
30 #define PDI_MODULES 0x01
31 #define PDI_HEAPS 0x04
32 #define LDRP_IMAGE_DLL 0x00000004
33 #define WSLE_PAGE_READONLY 0x001
34 #define WSLE_PAGE_EXECUTE 0x002
35 #define WSLE_PAGE_EXECUTE_READ 0x003
36 #define WSLE_PAGE_READWRITE 0x004
37 #define WSLE_PAGE_WRITECOPY 0x005
38 #define WSLE_PAGE_EXECUTE_READWRITE 0x006
39 #define WSLE_PAGE_EXECUTE_WRITECOPY 0x007
40 #define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0
41 #define WSLE_PAGE_SHAREABLE 0x100
43 /* Device Characteristics. */
44 #define FILE_REMOVABLE_MEDIA 0x00000001
45 #define FILE_READ_ONLY_DEVICE 0x00000002
46 #define FILE_FLOPPY_DISKETTE 0x00000004
47 #define FILE_WRITE_ONCE_MEDIA 0x00000008
48 #define FILE_REMOTE_DEVICE 0x00000010
49 #define FILE_DEVICE_IS_MOUNTED 0x00000020
50 #define FILE_VIRTUAL_VOLUME 0x00000040
51 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
52 #define FILE_DEVICE_SECURE_OPEN 0x00000100
54 typedef enum _FILE_INFORMATION_CLASS
56 FileDirectoryInformation
= 1,
57 FileFullDirectoryInformation
, // 2
58 FileBothDirectoryInformation
, // 3
59 FileBasicInformation
, // 4 wdm
60 FileStandardInformation
, // 5 wdm
61 FileInternalInformation
, // 6
62 FileEaInformation
, // 7
63 FileAccessInformation
, // 8
64 FileNameInformation
, // 9
65 FileRenameInformation
, // 10
66 FileLinkInformation
, // 11
67 FileNamesInformation
, // 12
68 FileDispositionInformation
, // 13
69 FilePositionInformation
, // 14 wdm
70 FileFullEaInformation
, // 15
71 FileModeInformation
, // 16
72 FileAlignmentInformation
, // 17
73 FileAllInformation
, // 18
74 FileAllocationInformation
, // 19
75 FileEndOfFileInformation
, // 20 wdm
76 FileAlternateNameInformation
, // 21
77 FileStreamInformation
, // 22
78 FilePipeInformation
, // 23
79 FilePipeLocalInformation
, // 24
80 FilePipeRemoteInformation
, // 25
81 FileMailslotQueryInformation
, // 26
82 FileMailslotSetInformation
, // 27
83 FileCompressionInformation
, // 28
84 FileObjectIdInformation
, // 29
85 FileCompletionInformation
, // 30
86 FileMoveClusterInformation
, // 31
87 FileQuotaInformation
, // 32
88 FileReparsePointInformation
, // 33
89 FileNetworkOpenInformation
, // 34
90 FileAttributeTagInformation
, // 35
91 FileTrackingInformation
, // 36
92 FileIdBothDirectoryInformation
, // 37
93 FileIdFullDirectoryInformation
, // 38
94 FileValidDataLengthInformation
, // 39
95 FileShortNameInformation
, // 40
96 FileMaximumInformation
97 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
99 typedef struct _FILE_NAMES_INFORMATION
101 ULONG NextEntryOffset
;
103 ULONG FileNameLength
;
105 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
107 typedef struct _FILE_DIRECTORY_INFORMATION
{
108 ULONG NextEntryOffset
;
110 LARGE_INTEGER CreationTime
;
111 LARGE_INTEGER LastAccessTime
;
112 LARGE_INTEGER LastWriteTime
;
113 LARGE_INTEGER ChangeTime
;
114 LARGE_INTEGER EndOfFile
;
115 LARGE_INTEGER AllocationSize
;
116 ULONG FileAttributes
;
117 ULONG FileNameLength
;
119 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
121 typedef struct _FILE_BOTH_DIR_INFORMATION
123 ULONG NextEntryOffset
;
125 LARGE_INTEGER CreationTime
;
126 LARGE_INTEGER LastAccessTime
;
127 LARGE_INTEGER LastWriteTime
;
128 LARGE_INTEGER ChangeTime
;
129 LARGE_INTEGER EndOfFile
;
130 LARGE_INTEGER AllocationSize
;
131 ULONG FileAttributes
;
132 ULONG FileNameLength
;
134 CCHAR ShortNameLength
;
137 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
139 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
141 ULONG NextEntryOffset
;
143 LARGE_INTEGER CreationTime
;
144 LARGE_INTEGER LastAccessTime
;
145 LARGE_INTEGER LastWriteTime
;
146 LARGE_INTEGER ChangeTime
;
147 LARGE_INTEGER EndOfFile
;
148 LARGE_INTEGER AllocationSize
;
149 ULONG FileAttributes
;
150 ULONG FileNameLength
;
152 CCHAR ShortNameLength
;
154 LARGE_INTEGER FileId
;
156 } FILE_ID_BOTH_DIR_INFORMATION
, *PFILE_ID_BOTH_DIR_INFORMATION
;
159 #define AT_EXTENDABLE_FILE 0x00002000
160 #define AT_ROUND_TO_PAGE 0x40000000
162 #define LOCK_VM_IN_WSL 1
163 #define LOCK_VM_IN_RAM 2
165 #define DIRECTORY_QUERY 1
167 typedef ULONG KAFFINITY
;
169 typedef enum _SYSTEM_INFORMATION_CLASS
171 SystemBasicInformation
= 0,
172 SystemPerformanceInformation
= 2,
173 SystemTimeOfDayInformation
= 3,
174 SystemProcessesAndThreadsInformation
= 5,
175 SystemProcessorTimes
= 8,
176 SystemPagefileInformation
= 18,
177 /* There are a lot more of these... */
178 } SYSTEM_INFORMATION_CLASS
;
180 typedef struct _SYSTEM_BASIC_INFORMATION
183 ULONG MaximumIncrement
;
184 ULONG PhysicalPageSize
;
185 ULONG NumberOfPhysicalPages
;
186 ULONG LowestPhysicalPage
;
187 ULONG HighestPhysicalPage
;
188 ULONG AllocationGranularity
;
189 ULONG LowestUserAddress
;
190 ULONG HighestUserAddress
;
191 ULONG ActiveProcessors
;
192 UCHAR NumberProcessors
;
193 } SYSTEM_BASIC_INFORMATION
, *PSYSTEM_BASIC_INFORMATION
;
195 typedef struct _SYSTEM_PAGEFILE_INFORMATION
197 ULONG NextEntryOffset
;
201 UNICODE_STRING FileName
;
202 } SYSTEM_PAGEFILE_INFORMATION
, *PSYSTEM_PAGEFILE_INFORMATION
;
204 typedef struct __attribute__ ((aligned (8))) _SYSTEM_PROCESSOR_TIMES
206 LARGE_INTEGER IdleTime
;
207 LARGE_INTEGER KernelTime
;
208 LARGE_INTEGER UserTime
;
209 LARGE_INTEGER DpcTime
;
210 LARGE_INTEGER InterruptTime
;
211 ULONG InterruptCount
;
212 } SYSTEM_PROCESSOR_TIMES
, *PSYSTEM_PROCESSOR_TIMES
;
214 typedef LONG KPRIORITY
;
215 typedef struct _VM_COUNTERS
217 ULONG PeakVirtualSize
;
219 ULONG PageFaultCount
;
220 ULONG PeakWorkingSetSize
;
221 ULONG WorkingSetSize
;
222 ULONG QuotaPeakPagedPoolUsage
;
223 ULONG QuotaPagedPoolUsage
;
224 ULONG QuotaPeakNonPagedPoolUsage
;
225 ULONG QuotaNonPagedPoolUsage
;
227 ULONG PeakPagefileUsage
;
228 } VM_COUNTERS
, *PVM_COUNTERS
;
230 typedef struct _CLIENT_ID
232 HANDLE UniqueProcess
;
234 } CLIENT_ID
, *PCLIENT_ID
;
280 typedef struct _SYSTEM_THREADS
282 LARGE_INTEGER KernelTime
;
283 LARGE_INTEGER UserTime
;
284 LARGE_INTEGER CreateTime
;
289 KPRIORITY BasePriority
;
290 ULONG ContextSwitchCount
;
292 KWAIT_REASON WaitReason
;
294 } SYSTEM_THREADS
, *PSYSTEM_THREADS
;
296 typedef struct _SYSTEM_PROCESSES
298 ULONG NextEntryDelta
;
301 LARGE_INTEGER CreateTime
;
302 LARGE_INTEGER UserTime
;
303 LARGE_INTEGER KernelTime
;
304 UNICODE_STRING ProcessName
;
305 KPRIORITY BasePriority
;
307 ULONG InheritedFromProcessId
;
310 VM_COUNTERS VmCounters
;
311 IO_COUNTERS IoCounters
;
312 SYSTEM_THREADS Threads
[1];
313 } SYSTEM_PROCESSES
, *PSYSTEM_PROCESSES
;
315 typedef struct _IO_STATUS_BLOCK
319 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
321 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
323 LARGE_INTEGER IdleTime
;
324 LARGE_INTEGER ReadTransferCount
;
325 LARGE_INTEGER WriteTransferCount
;
326 LARGE_INTEGER OtherTransferCount
;
327 ULONG ReadOperationCount
;
328 ULONG WriteOperationCount
;
329 ULONG OtherOperationCount
;
330 ULONG AvailablePages
;
331 ULONG TotalCommittedPages
;
332 ULONG TotalCommitLimit
;
333 ULONG PeakCommitment
;
335 ULONG WriteCopyFaults
;
336 ULONG TransitionFaults
;
338 ULONG DemandZeroFaults
;
342 ULONG PagefilePagesWritten
;
343 ULONG PagefilePageWriteIos
;
344 ULONG MappedFilePagesWritten
;
345 ULONG MappedFilePageWriteIos
;
346 ULONG PagedPoolUsage
;
347 ULONG NonPagedPoolUsage
;
348 ULONG PagedPoolAllocs
;
349 ULONG PagedPoolFrees
;
350 ULONG NonPagedPoolAllocs
;
351 ULONG NonPagedPoolFrees
;
352 ULONG TotalFreeSystemPtes
;
353 ULONG SystemCodePage
;
354 ULONG TotalSystemDriverPages
;
355 ULONG TotalSystemCodePages
;
356 ULONG SmallNonPagedLookasideListAllocateHits
;
357 ULONG SmallPagedLookasideListAllocateHits
;
359 ULONG MmSystemCachePage
;
361 ULONG SystemDriverPage
;
362 ULONG FastReadNoWait
;
364 ULONG FastReadResourceMiss
;
365 ULONG FastReadNotPossible
;
366 ULONG FastMdlReadNoWait
;
367 ULONG FastMdlReadWait
;
368 ULONG FastMdlReadResourceMiss
;
369 ULONG FastMdlReadNotPossible
;
372 ULONG MapDataNoWaitMiss
;
373 ULONG MapDataWaitMiss
;
374 ULONG PinMappedDataCount
;
377 ULONG PinReadNoWaitMiss
;
378 ULONG PinReadWaitMiss
;
379 ULONG CopyReadNoWait
;
381 ULONG CopyReadNoWaitMiss
;
382 ULONG CopyReadWaitMiss
;
385 ULONG MdlReadNoWaitMiss
;
386 ULONG MdlReadWaitMiss
;
389 ULONG LazyWritePages
;
392 ULONG ContextSwitches
;
393 ULONG FirstLevelTbFills
;
394 ULONG SecondLevelTbFills
;
396 } SYSTEM_PERFORMANCE_INFORMATION
, *PSYSTEM_PERFORMANCE_INFORMATION
;
398 typedef struct __attribute__ ((aligned(8))) _SYSTEM_TIME_OF_DAY_INFORMATION
400 LARGE_INTEGER BootTime
;
401 LARGE_INTEGER CurrentTime
;
402 LARGE_INTEGER TimeZoneBias
;
403 ULONG CurrentTimeZoneId
;
404 } SYSTEM_TIME_OF_DAY_INFORMATION
, *PSYSTEM_TIME_OF_DAY_INFORMATION
;
406 typedef enum _PROCESSINFOCLASS
408 ProcessBasicInformation
= 0,
409 ProcessQuotaLimits
= 1,
410 ProcessVmCounters
= 3,
414 typedef struct _DEBUG_BUFFER
416 HANDLE SectionHandle
;
418 PVOID RemoteSectionBase
;
419 ULONG SectionBaseDelta
;
420 HANDLE EventPairHandle
;
422 HANDLE RemoteThreadHandle
;
427 PVOID ModuleInformation
;
428 PVOID BackTraceInformation
;
429 PVOID HeapInformation
;
430 PVOID LockInformation
;
432 } DEBUG_BUFFER
, *PDEBUG_BUFFER
;
434 typedef struct _DEBUG_HEAP_INFORMATION
447 } DEBUG_HEAP_INFORMATION
, *PDEBUG_HEAP_INFORMATION
;
449 typedef struct _DEBUG_MODULE_INFORMATION
458 USHORT ModuleNameOffset
;
460 } DEBUG_MODULE_INFORMATION
, *PDEBUG_MODULE_INFORMATION
;
462 typedef struct _KERNEL_USER_TIMES
464 LARGE_INTEGER CreateTime
;
465 LARGE_INTEGER ExitTime
;
466 LARGE_INTEGER KernelTime
;
467 LARGE_INTEGER UserTime
;
468 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
470 typedef struct _RTL_USER_PROCESS_PARAMETERS
472 ULONG AllocationSize
;
481 UNICODE_STRING CurrentDirectoryName
;
482 HANDLE CurrentDirectoryHandle
;
483 UNICODE_STRING DllPath
;
484 UNICODE_STRING ImagePathName
;
485 UNICODE_STRING CommandLine
;
493 ULONG dwFillAttribute
;
496 UNICODE_STRING WindowTitle
;
497 UNICODE_STRING DesktopInfo
;
498 UNICODE_STRING ShellInfo
;
499 UNICODE_STRING RuntimeInfo
;
500 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
508 PRTL_USER_PROCESS_PARAMETERS ProcessParameters
;
513 typedef struct _PROCESS_BASIC_INFORMATION
517 KAFFINITY AffinityMask
;
518 KPRIORITY BasePriority
;
519 ULONG UniqueProcessId
;
520 ULONG InheritedFromUniqueProcessId
;
521 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
523 typedef enum _MEMORY_INFORMATION_CLASS
525 MemoryBasicInformation
,
526 MemoryWorkingSetList
,
528 MemoryBasicVlmInformation
529 } MEMORY_INFORMATION_CLASS
;
531 typedef struct _MEMORY_WORKING_SET_LIST
534 ULONG WorkingSetList
[1];
535 } MEMORY_WORKING_SET_LIST
, *PMEMORY_WORKING_SET_LIST
;
537 typedef struct _FILE_BASIC_INFORMATION
{
538 LARGE_INTEGER CreationTime
;
539 LARGE_INTEGER LastAccessTime
;
540 LARGE_INTEGER LastWriteTime
;
541 LARGE_INTEGER ChangeTime
;
542 ULONG FileAttributes
;
543 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
545 typedef struct _FILE_STANDARD_INFORMATION
{
546 LARGE_INTEGER AllocationSize
;
547 LARGE_INTEGER EndOfFile
;
549 BOOLEAN DeletePending
;
551 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
553 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
554 LARGE_INTEGER CreationTime
;
555 LARGE_INTEGER LastAccessTime
;
556 LARGE_INTEGER LastWriteTime
;
557 LARGE_INTEGER ChangeTime
;
558 LARGE_INTEGER AllocationSize
;
559 LARGE_INTEGER EndOfFile
;
560 ULONG FileAttributes
;
561 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
563 typedef struct _FILE_INTERNAL_INFORMATION
{
564 LARGE_INTEGER FileId
;
565 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
567 typedef struct _FILE_EA_INFORMATION
{
569 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
571 typedef struct _FILE_ACCESS_INFORMATION
{
572 ACCESS_MASK AccessFlags
;
573 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
575 typedef struct _FILE_DISPOSITION_INFORMATION
{
577 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
579 typedef struct _FILE_POSITION_INFORMATION
{
580 LARGE_INTEGER CurrentByteOffset
;
581 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
583 typedef struct _FILE_END_OF_FILE_INFORMATION
{
584 LARGE_INTEGER EndOfFile
;
585 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
587 typedef struct _FILE_MODE_INFORMATION
{
589 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
591 typedef struct _FILE_ALIGNMENT_INFORMATION
{
592 ULONG AlignmentRequirement
;
593 } FILE_ALIGNMENT_INFORMATION
;
595 typedef struct _FILE_NAME_INFORMATION
{
596 ULONG FileNameLength
;
598 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
600 typedef struct _FILE_LINK_INFORMATION
{
601 BOOLEAN ReplaceIfExists
;
602 HANDLE RootDirectory
;
603 ULONG FileNameLength
;
605 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
607 typedef struct _FILE_RENAME_INFORMATION
{
608 BOOLEAN ReplaceIfExists
;
609 HANDLE RootDirectory
;
610 ULONG FileNameLength
;
612 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
614 typedef struct _FILE_ALL_INFORMATION
{
615 FILE_BASIC_INFORMATION BasicInformation
;
616 FILE_STANDARD_INFORMATION StandardInformation
;
617 FILE_INTERNAL_INFORMATION InternalInformation
;
618 FILE_EA_INFORMATION EaInformation
;
619 FILE_ACCESS_INFORMATION AccessInformation
;
620 FILE_POSITION_INFORMATION PositionInformation
;
621 FILE_MODE_INFORMATION ModeInformation
;
622 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
623 FILE_NAME_INFORMATION NameInformation
;
624 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
626 typedef struct _FILE_PIPE_LOCAL_INFORMATION
629 ULONG NamedPipeConfiguration
;
630 ULONG MaximumInstances
;
631 ULONG CurrentInstances
;
633 ULONG ReadDataAvailable
;
635 ULONG WriteQuotaAvailable
;
636 ULONG NamedPipeState
;
638 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
640 typedef struct _FILE_COMPRESSION_INFORMATION
642 LARGE_INTEGER CompressedSize
;
643 USHORT CompressionFormat
;
644 UCHAR CompressionUnitShift
;
646 UCHAR ClusterSizeShift
;
647 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
649 typedef struct _FILE_FS_DEVICE_INFORMATION
652 ULONG Characteristics
;
653 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
655 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
657 ULONG FileSystemAttributes
;
658 ULONG MaximumComponentNameLength
;
659 ULONG FileSystemNameLength
;
660 WCHAR FileSystemName
[1];
661 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
663 typedef struct _FILE_FS_VOLUME_INFORMATION
665 LARGE_INTEGER VolumeCreationTime
;
666 ULONG VolumeSerialNumber
;
667 ULONG VolumeLabelLength
;
668 BOOLEAN SupportsObjects
;
669 WCHAR VolumeLabel
[1];
670 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
672 typedef struct _FILE_FS_SIZE_INFORMATION
674 LARGE_INTEGER TotalAllocationUnits
;
675 LARGE_INTEGER AvailableAllocationUnits
;
676 ULONG SectorsPerAllocationUnit
;
677 ULONG BytesPerSector
;
678 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
680 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
682 LARGE_INTEGER TotalAllocationUnits
;
683 LARGE_INTEGER CallerAvailableAllocationUnits
;
684 LARGE_INTEGER ActualAvailableAllocationUnits
;
685 ULONG SectorsPerAllocationUnit
;
686 ULONG BytesPerSector
;
687 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
689 typedef enum _FSINFOCLASS
{
690 FileFsVolumeInformation
= 1,
691 FileFsLabelInformation
,
692 FileFsSizeInformation
,
693 FileFsDeviceInformation
,
694 FileFsAttributeInformation
,
695 FileFsControlInformation
,
696 FileFsFullSizeInformation
,
697 FileFsObjectIdInformation
,
698 FileFsDriverPathInformation
,
699 FileFsMaximumInformation
700 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
702 typedef enum _OBJECT_INFORMATION_CLASS
704 ObjectBasicInformation
= 0,
705 ObjectNameInformation
= 1,
706 ObjectHandleInformation
= 4
708 } OBJECT_INFORMATION_CLASS
;
710 typedef struct _OBJECT_NAME_INFORMATION
713 } OBJECT_NAME_INFORMATION
;
715 typedef struct _DIRECTORY_BASIC_INFORMATION
717 UNICODE_STRING ObjectName
;
718 UNICODE_STRING ObjectTypeName
;
719 } DIRECTORY_BASIC_INFORMATION
, *PDIRECTORY_BASIC_INFORMATION
;
721 typedef struct _FILE_GET_EA_INFORMATION
723 ULONG NextEntryOffset
;
726 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
729 typedef struct _FILE_FULL_EA_INFORMATION
731 ULONG NextEntryOffset
;
734 USHORT EaValueLength
;
736 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
738 /* Function declarations for ntdll.dll. These don't appear in any
739 standard Win32 header. */
742 NTSTATUS NTAPI
NtAdjustPrivilegesToken (HANDLE
, BOOLEAN
, PTOKEN_PRIVILEGES
,
743 ULONG
, PTOKEN_PRIVILEGES
, PULONG
);
744 NTSTATUS NTAPI
NtClose (HANDLE
);
745 NTSTATUS NTAPI
NtCreateFile (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
746 PIO_STATUS_BLOCK
, PLARGE_INTEGER
, ULONG
, ULONG
,
747 ULONG
, ULONG
, PVOID
, ULONG
);
748 NTSTATUS NTAPI
NtCreateSection (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
749 PLARGE_INTEGER
, ULONG
, ULONG
, HANDLE
);
750 NTSTATUS NTAPI
NtCreateToken (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
751 TOKEN_TYPE
, PLUID
, PLARGE_INTEGER
, PTOKEN_USER
,
752 PTOKEN_GROUPS
, PTOKEN_PRIVILEGES
, PTOKEN_OWNER
,
753 PTOKEN_PRIMARY_GROUP
, PTOKEN_DEFAULT_DACL
,
755 NTSTATUS NTAPI
NtFsControlFile (HANDLE
, HANDLE
, PVOID
, PVOID
,
756 PIO_STATUS_BLOCK
, ULONG
, PVOID
, ULONG
,
758 NTSTATUS NTAPI
NtLockVirtualMemory (HANDLE
, PVOID
*, ULONG
*, ULONG
);
759 NTSTATUS NTAPI
NtMapViewOfSection (HANDLE
, HANDLE
, PVOID
*, ULONG
, ULONG
,
760 PLARGE_INTEGER
, PULONG
, SECTION_INHERIT
,
762 NTSTATUS NTAPI
NtOpenDirectoryObject (PHANDLE
, ACCESS_MASK
,
764 NTSTATUS NTAPI
NtOpenFile (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
765 PIO_STATUS_BLOCK
, ULONG
, ULONG
);
766 NTSTATUS NTAPI
NtOpenSection (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
);
767 NTSTATUS NTAPI
NtQueryDirectoryFile(HANDLE
, HANDLE
, PVOID
, PVOID
,
768 PIO_STATUS_BLOCK
, PVOID
, ULONG
,
769 FILE_INFORMATION_CLASS
, BOOLEAN
,
770 PUNICODE_STRING
, BOOLEAN
);
771 NTSTATUS NTAPI
NtQueryDirectoryObject (HANDLE
, PVOID
, ULONG
, BOOLEAN
,
772 BOOLEAN
, PULONG
, PULONG
);
773 NTSTATUS NTAPI
NtQueryEaFile (HANDLE
, PIO_STATUS_BLOCK
, PVOID
, ULONG
,
774 BOOLEAN
, PVOID
, ULONG
, PULONG
, BOOLEAN
);
775 NTSTATUS NTAPI
NtQueryAttributesFile (POBJECT_ATTRIBUTES
,
776 PFILE_BASIC_INFORMATION
);
777 NTSTATUS NTAPI
NtQueryFullAttributesFile (POBJECT_ATTRIBUTES
,
778 PFILE_NETWORK_OPEN_INFORMATION
);
779 NTSTATUS NTAPI
NtQueryInformationFile (HANDLE
, PIO_STATUS_BLOCK
, PVOID
,
780 ULONG
, FILE_INFORMATION_CLASS
);
781 NTSTATUS NTAPI
NtQueryInformationProcess (HANDLE
, PROCESSINFOCLASS
,
782 PVOID
, ULONG
, PULONG
);
783 NTSTATUS NTAPI
NtQueryObject (HANDLE
, OBJECT_INFORMATION_CLASS
, VOID
*,
785 NTSTATUS NTAPI
NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS
,
786 PVOID
, ULONG
, PULONG
);
787 NTSTATUS NTAPI
NtQuerySecurityObject (HANDLE
, SECURITY_INFORMATION
,
788 PSECURITY_DESCRIPTOR
, ULONG
, PULONG
);
789 NTSTATUS NTAPI
NtQueryVirtualMemory (HANDLE
, PVOID
, MEMORY_INFORMATION_CLASS
,
790 PVOID
, ULONG
, PULONG
);
791 NTSTATUS NTAPI
NtQueryVolumeInformationFile (HANDLE
, IO_STATUS_BLOCK
*,
793 FS_INFORMATION_CLASS
);
794 NTSTATUS NTAPI
NtSetEaFile (HANDLE
, PIO_STATUS_BLOCK
, PVOID
, ULONG
);
795 NTSTATUS NTAPI
NtSetInformationFile (HANDLE
, PIO_STATUS_BLOCK
, PVOID
, ULONG
,
796 FILE_INFORMATION_CLASS
);
797 NTSTATUS NTAPI
NtSetSecurityObject (HANDLE
, SECURITY_INFORMATION
,
798 PSECURITY_DESCRIPTOR
);
799 NTSTATUS NTAPI
NtUnlockVirtualMemory (HANDLE
, PVOID
*, ULONG
*, ULONG
);
800 NTSTATUS NTAPI
NtUnmapViewOfSection (HANDLE
, PVOID
);
801 NTSTATUS NTAPI
RtlAppendUnicodeToString (PUNICODE_STRING
, PCWSTR
);
802 NTSTATUS NTAPI
RtlAppendUnicodeStringToString (PUNICODE_STRING
,
804 NTSTATUS NTAPI
RtlAnsiStringToUnicodeString (PUNICODE_STRING
, PANSI_STRING
,
806 LONG NTAPI
RtlCompareUnicodeString (PUNICODE_STRING
, PUNICODE_STRING
,
808 VOID NTAPI
RtlCopyUnicodeString (PUNICODE_STRING
, PUNICODE_STRING
);
809 ULONG WINAPI
RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING
, PCSTR
);
810 BOOLEAN NTAPI
RtlEqualUnicodeString (PUNICODE_STRING
, PUNICODE_STRING
,
812 VOID NTAPI
RtlFreeAnsiString (PANSI_STRING
);
813 VOID NTAPI
RtlFreeOemString (POEM_STRING
);
814 VOID NTAPI
RtlFreeUnicodeString (PUNICODE_STRING
);
815 VOID NTAPI
RtlInitEmptyUnicodeString (PUNICODE_STRING
, PCWSTR
, USHORT
);
816 VOID NTAPI
RtlInitUnicodeString (PUNICODE_STRING
, PCWSTR
);
817 ULONG NTAPI
RtlIsDosDeviceName_U (PCWSTR
);
818 ULONG NTAPI
RtlNtStatusToDosError (NTSTATUS
);
819 NTSTATUS NTAPI
RtlOemStringToUnicodeString (PUNICODE_STRING
, POEM_STRING
,
821 BOOLEAN NTAPI
RtlPrefixUnicodeString (PUNICODE_STRING
, PUNICODE_STRING
,
823 VOID NTAPI
RtlSecondsSince1970ToTime (ULONG
, PLARGE_INTEGER
);
824 NTSTATUS NTAPI
RtlUnicodeStringToAnsiString (PANSI_STRING
, PUNICODE_STRING
,
826 NTSTATUS NTAPI
RtlUnicodeStringToOemString (PANSI_STRING
, PUNICODE_STRING
,
829 /* A few Rtl functions are either actually macros, or they just don't
830 exist even though they would be a big help. We implement them here
831 as inline functions. */
833 VOID NTAPI
RtlInitEmptyUnicodeString(PUNICODE_STRING dest
, PCWSTR buf
,
837 dest
->MaximumLength
= len
;
838 dest
->Buffer
= (PWSTR
) buf
;
841 VOID NTAPI
RtlInitCountedUnicodeString (PUNICODE_STRING dest
, PCWSTR buf
,
844 dest
->Length
= dest
->MaximumLength
= len
;
845 dest
->Buffer
= (PWSTR
) buf
;
848 VOID NTAPI
RtlSplitUnicodePath (PUNICODE_STRING path
, PUNICODE_STRING dir
,
849 PUNICODE_STRING file
)
851 USHORT len
= path
->Length
/ sizeof (WCHAR
);
852 while (len
> 0 && path
->Buffer
[--len
] != L
'\\')
856 RtlInitCountedUnicodeString (dir
, path
->Buffer
, len
* sizeof (WCHAR
));
858 RtlInitCountedUnicodeString (file
, &path
->Buffer
[len
],
859 path
->Length
- len
* sizeof (WCHAR
));
862 BOOLEAN NTAPI
RtlEqualUnicodePathPrefix (PUNICODE_STRING path
, PCWSTR prefix
,
863 BOOLEAN caseinsensitive
)
865 UNICODE_STRING p
, pref
;
867 RtlInitUnicodeString (&pref
, prefix
);
868 RtlInitCountedUnicodeString (&p
, path
->Buffer
,
869 pref
.Length
< path
->Length
870 ? pref
.Length
: path
->Length
);
871 return RtlEqualUnicodeString (&p
, &pref
, caseinsensitive
);
874 BOOL NTAPI
RtlEqualUnicodePathSuffix (PUNICODE_STRING path
, PCWSTR suffix
,
875 BOOLEAN caseinsensitive
)
877 UNICODE_STRING p
, suf
;
879 RtlInitUnicodeString (&suf
, suffix
);
880 if (suf
.Length
< path
->Length
)
881 RtlInitCountedUnicodeString (&p
, (PWCHAR
) ((PBYTE
) path
->Buffer
882 + path
->Length
- suf
.Length
),
885 RtlInitCountedUnicodeString (&p
, path
->Buffer
, path
->Length
);
886 return RtlEqualUnicodeString (&p
, &suf
, caseinsensitive
);