1 /* ntdll.h. Contains ntdll specific stuff not defined elsewhere.
3 Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006 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 #define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xc0000003)
12 #define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xc0000004)
13 #define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xc000000d)
14 #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xc0000023)
15 #define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xc00000a1L)
16 #define STATUS_INVALID_LEVEL ((NTSTATUS) 0xc0000148)
17 #define STATUS_NO_MORE_FILES ((NTSTATUS)0x80000006L)
18 #define PDI_MODULES 0x01
19 #define PDI_HEAPS 0x04
20 #define LDRP_IMAGE_DLL 0x00000004
21 #define WSLE_PAGE_READONLY 0x001
22 #define WSLE_PAGE_EXECUTE 0x002
23 #define WSLE_PAGE_EXECUTE_READ 0x003
24 #define WSLE_PAGE_READWRITE 0x004
25 #define WSLE_PAGE_WRITECOPY 0x005
26 #define WSLE_PAGE_EXECUTE_READWRITE 0x006
27 #define WSLE_PAGE_EXECUTE_WRITECOPY 0x007
28 #define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0
29 #define WSLE_PAGE_SHAREABLE 0x100
31 typedef enum _FILE_INFORMATION_CLASS
33 FileDirectoryInformation
= 1,
34 FileFullDirectoryInformation
, // 2
35 FileBothDirectoryInformation
, // 3
36 FileBasicInformation
, // 4 wdm
37 FileStandardInformation
, // 5 wdm
38 FileInternalInformation
, // 6
39 FileEaInformation
, // 7
40 FileAccessInformation
, // 8
41 FileNameInformation
, // 9
42 FileRenameInformation
, // 10
43 FileLinkInformation
, // 11
44 FileNamesInformation
, // 12
45 FileDispositionInformation
, // 13
46 FilePositionInformation
, // 14 wdm
47 FileFullEaInformation
, // 15
48 FileModeInformation
, // 16
49 FileAlignmentInformation
, // 17
50 FileAllInformation
, // 18
51 FileAllocationInformation
, // 19
52 FileEndOfFileInformation
, // 20 wdm
53 FileAlternateNameInformation
, // 21
54 FileStreamInformation
, // 22
55 FilePipeInformation
, // 23
56 FilePipeLocalInformation
, // 24
57 FilePipeRemoteInformation
, // 25
58 FileMailslotQueryInformation
, // 26
59 FileMailslotSetInformation
, // 27
60 FileCompressionInformation
, // 28
61 FileObjectIdInformation
, // 29
62 FileCompletionInformation
, // 30
63 FileMoveClusterInformation
, // 31
64 FileQuotaInformation
, // 32
65 FileReparsePointInformation
, // 33
66 FileNetworkOpenInformation
, // 34
67 FileAttributeTagInformation
, // 35
68 FileTrackingInformation
, // 36
69 FileIdBothDirectoryInformation
, // 37
70 FileIdFullDirectoryInformation
, // 38
71 FileValidDataLengthInformation
, // 39
72 FileShortNameInformation
, // 40
73 FileMaximumInformation
74 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
76 typedef struct _FILE_BOTH_DIR_INFORMATION
78 ULONG NextEntryOffset
;
80 LARGE_INTEGER CreationTime
;
81 LARGE_INTEGER LastAccessTime
;
82 LARGE_INTEGER LastWriteTime
;
83 LARGE_INTEGER ChangeTime
;
84 LARGE_INTEGER EndOfFile
;
85 LARGE_INTEGER AllocationSize
;
89 CCHAR ShortNameLength
;
92 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
94 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
96 ULONG NextEntryOffset
;
98 LARGE_INTEGER CreationTime
;
99 LARGE_INTEGER LastAccessTime
;
100 LARGE_INTEGER LastWriteTime
;
101 LARGE_INTEGER ChangeTime
;
102 LARGE_INTEGER EndOfFile
;
103 LARGE_INTEGER AllocationSize
;
104 ULONG FileAttributes
;
105 ULONG FileNameLength
;
107 CCHAR ShortNameLength
;
109 LARGE_INTEGER FileId
;
111 } FILE_ID_BOTH_DIR_INFORMATION
, *PFILE_ID_BOTH_DIR_INFORMATION
;
114 #define AT_EXTENDABLE_FILE 0x00002000
115 #define AT_ROUND_TO_PAGE 0x40000000
117 #define LOCK_VM_IN_WSL 1
118 #define LOCK_VM_IN_RAM 2
120 #define DIRECTORY_QUERY 1
122 typedef ULONG KAFFINITY
;
124 typedef enum _SYSTEM_INFORMATION_CLASS
126 SystemBasicInformation
= 0,
127 SystemPerformanceInformation
= 2,
128 SystemTimeOfDayInformation
= 3,
129 SystemProcessesAndThreadsInformation
= 5,
130 SystemProcessorTimes
= 8,
131 SystemPagefileInformation
= 18,
132 /* There are a lot more of these... */
133 } SYSTEM_INFORMATION_CLASS
;
135 typedef struct _SYSTEM_BASIC_INFORMATION
138 ULONG MaximumIncrement
;
139 ULONG PhysicalPageSize
;
140 ULONG NumberOfPhysicalPages
;
141 ULONG LowestPhysicalPage
;
142 ULONG HighestPhysicalPage
;
143 ULONG AllocationGranularity
;
144 ULONG LowestUserAddress
;
145 ULONG HighestUserAddress
;
146 ULONG ActiveProcessors
;
147 UCHAR NumberProcessors
;
148 } SYSTEM_BASIC_INFORMATION
, *PSYSTEM_BASIC_INFORMATION
;
150 typedef struct _SYSTEM_PAGEFILE_INFORMATION
152 ULONG NextEntryOffset
;
156 UNICODE_STRING FileName
;
157 } SYSTEM_PAGEFILE_INFORMATION
, *PSYSTEM_PAGEFILE_INFORMATION
;
159 typedef struct __attribute__ ((aligned (8))) _SYSTEM_PROCESSOR_TIMES
161 LARGE_INTEGER IdleTime
;
162 LARGE_INTEGER KernelTime
;
163 LARGE_INTEGER UserTime
;
164 LARGE_INTEGER DpcTime
;
165 LARGE_INTEGER InterruptTime
;
166 ULONG InterruptCount
;
167 } SYSTEM_PROCESSOR_TIMES
, *PSYSTEM_PROCESSOR_TIMES
;
169 typedef LONG KPRIORITY
;
170 typedef struct _VM_COUNTERS
172 ULONG PeakVirtualSize
;
174 ULONG PageFaultCount
;
175 ULONG PeakWorkingSetSize
;
176 ULONG WorkingSetSize
;
177 ULONG QuotaPeakPagedPoolUsage
;
178 ULONG QuotaPagedPoolUsage
;
179 ULONG QuotaPeakNonPagedPoolUsage
;
180 ULONG QuotaNonPagedPoolUsage
;
182 ULONG PeakPagefileUsage
;
183 } VM_COUNTERS
, *PVM_COUNTERS
;
185 typedef struct _CLIENT_ID
187 HANDLE UniqueProcess
;
189 } CLIENT_ID
, *PCLIENT_ID
;
235 typedef struct _SYSTEM_THREADS
237 LARGE_INTEGER KernelTime
;
238 LARGE_INTEGER UserTime
;
239 LARGE_INTEGER CreateTime
;
244 KPRIORITY BasePriority
;
245 ULONG ContextSwitchCount
;
247 KWAIT_REASON WaitReason
;
249 } SYSTEM_THREADS
, *PSYSTEM_THREADS
;
251 typedef struct _SYSTEM_PROCESSES
253 ULONG NextEntryDelta
;
256 LARGE_INTEGER CreateTime
;
257 LARGE_INTEGER UserTime
;
258 LARGE_INTEGER KernelTime
;
259 UNICODE_STRING ProcessName
;
260 KPRIORITY BasePriority
;
262 ULONG InheritedFromProcessId
;
265 VM_COUNTERS VmCounters
;
266 IO_COUNTERS IoCounters
;
267 SYSTEM_THREADS Threads
[1];
268 } SYSTEM_PROCESSES
, *PSYSTEM_PROCESSES
;
270 typedef struct _IO_STATUS_BLOCK
274 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
276 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
278 LARGE_INTEGER IdleTime
;
279 LARGE_INTEGER ReadTransferCount
;
280 LARGE_INTEGER WriteTransferCount
;
281 LARGE_INTEGER OtherTransferCount
;
282 ULONG ReadOperationCount
;
283 ULONG WriteOperationCount
;
284 ULONG OtherOperationCount
;
285 ULONG AvailablePages
;
286 ULONG TotalCommittedPages
;
287 ULONG TotalCommitLimit
;
288 ULONG PeakCommitment
;
290 ULONG WriteCopyFaults
;
291 ULONG TransitionFaults
;
293 ULONG DemandZeroFaults
;
297 ULONG PagefilePagesWritten
;
298 ULONG PagefilePageWriteIos
;
299 ULONG MappedFilePagesWritten
;
300 ULONG MappedFilePageWriteIos
;
301 ULONG PagedPoolUsage
;
302 ULONG NonPagedPoolUsage
;
303 ULONG PagedPoolAllocs
;
304 ULONG PagedPoolFrees
;
305 ULONG NonPagedPoolAllocs
;
306 ULONG NonPagedPoolFrees
;
307 ULONG TotalFreeSystemPtes
;
308 ULONG SystemCodePage
;
309 ULONG TotalSystemDriverPages
;
310 ULONG TotalSystemCodePages
;
311 ULONG SmallNonPagedLookasideListAllocateHits
;
312 ULONG SmallPagedLookasideListAllocateHits
;
314 ULONG MmSystemCachePage
;
316 ULONG SystemDriverPage
;
317 ULONG FastReadNoWait
;
319 ULONG FastReadResourceMiss
;
320 ULONG FastReadNotPossible
;
321 ULONG FastMdlReadNoWait
;
322 ULONG FastMdlReadWait
;
323 ULONG FastMdlReadResourceMiss
;
324 ULONG FastMdlReadNotPossible
;
327 ULONG MapDataNoWaitMiss
;
328 ULONG MapDataWaitMiss
;
329 ULONG PinMappedDataCount
;
332 ULONG PinReadNoWaitMiss
;
333 ULONG PinReadWaitMiss
;
334 ULONG CopyReadNoWait
;
336 ULONG CopyReadNoWaitMiss
;
337 ULONG CopyReadWaitMiss
;
340 ULONG MdlReadNoWaitMiss
;
341 ULONG MdlReadWaitMiss
;
344 ULONG LazyWritePages
;
347 ULONG ContextSwitches
;
348 ULONG FirstLevelTbFills
;
349 ULONG SecondLevelTbFills
;
351 } SYSTEM_PERFORMANCE_INFORMATION
, *PSYSTEM_PERFORMANCE_INFORMATION
;
353 typedef struct __attribute__ ((aligned(8))) _SYSTEM_TIME_OF_DAY_INFORMATION
355 LARGE_INTEGER BootTime
;
356 LARGE_INTEGER CurrentTime
;
357 LARGE_INTEGER TimeZoneBias
;
358 ULONG CurrentTimeZoneId
;
359 } SYSTEM_TIME_OF_DAY_INFORMATION
, *PSYSTEM_TIME_OF_DAY_INFORMATION
;
361 typedef enum _PROCESSINFOCLASS
363 ProcessBasicInformation
= 0,
364 ProcessQuotaLimits
= 1,
365 ProcessVmCounters
= 3,
369 typedef struct _DEBUG_BUFFER
371 HANDLE SectionHandle
;
373 PVOID RemoteSectionBase
;
374 ULONG SectionBaseDelta
;
375 HANDLE EventPairHandle
;
377 HANDLE RemoteThreadHandle
;
382 PVOID ModuleInformation
;
383 PVOID BackTraceInformation
;
384 PVOID HeapInformation
;
385 PVOID LockInformation
;
387 } DEBUG_BUFFER
, *PDEBUG_BUFFER
;
389 typedef struct _DEBUG_HEAP_INFORMATION
402 } DEBUG_HEAP_INFORMATION
, *PDEBUG_HEAP_INFORMATION
;
404 typedef struct _DEBUG_MODULE_INFORMATION
413 USHORT ModuleNameOffset
;
415 } DEBUG_MODULE_INFORMATION
, *PDEBUG_MODULE_INFORMATION
;
417 typedef struct _KERNEL_USER_TIMES
419 LARGE_INTEGER CreateTime
;
420 LARGE_INTEGER ExitTime
;
421 LARGE_INTEGER KernelTime
;
422 LARGE_INTEGER UserTime
;
423 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
427 typedef struct _PROCESS_BASIC_INFORMATION
431 KAFFINITY AffinityMask
;
432 KPRIORITY BasePriority
;
433 ULONG UniqueProcessId
;
434 ULONG InheritedFromUniqueProcessId
;
435 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
437 typedef enum _MEMORY_INFORMATION_CLASS
439 MemoryBasicInformation
,
440 MemoryWorkingSetList
,
442 MemoryBasicVlmInformation
443 } MEMORY_INFORMATION_CLASS
;
445 typedef struct _MEMORY_WORKING_SET_LIST
448 ULONG WorkingSetList
[1];
449 } MEMORY_WORKING_SET_LIST
, *PMEMORY_WORKING_SET_LIST
;
451 typedef struct _FILE_BASIC_INFORMATION
{
452 LARGE_INTEGER CreationTime
;
453 LARGE_INTEGER LastAccessTime
;
454 LARGE_INTEGER LastWriteTime
;
455 LARGE_INTEGER ChangeTime
;
456 ULONG FileAttributes
;
457 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
459 typedef struct _FILE_STANDARD_INFORMATION
{
460 LARGE_INTEGER AllocationSize
;
461 LARGE_INTEGER EndOfFile
;
463 BOOLEAN DeletePending
;
465 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
467 typedef struct _FILE_INTERNAL_INFORMATION
{
468 LARGE_INTEGER FileId
;
469 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
471 typedef struct _FILE_EA_INFORMATION
{
473 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
475 typedef struct _FILE_ACCESS_INFORMATION
{
476 ACCESS_MASK AccessFlags
;
477 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
479 typedef struct _FILE_POSITION_INFORMATION
{
480 LARGE_INTEGER CurrentByteOffset
;
481 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
483 typedef struct _FILE_MODE_INFORMATION
{
485 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
487 typedef struct _FILE_ALIGNMENT_INFORMATION
{
488 ULONG AlignmentRequirement
;
489 } FILE_ALIGNMENT_INFORMATION
;
491 typedef struct _FILE_NAME_INFORMATION
{
492 ULONG FileNameLength
;
494 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
496 typedef struct _FILE_ALL_INFORMATION
{
497 FILE_BASIC_INFORMATION BasicInformation
;
498 FILE_STANDARD_INFORMATION StandardInformation
;
499 FILE_INTERNAL_INFORMATION InternalInformation
;
500 FILE_EA_INFORMATION EaInformation
;
501 FILE_ACCESS_INFORMATION AccessInformation
;
502 FILE_POSITION_INFORMATION PositionInformation
;
503 FILE_MODE_INFORMATION ModeInformation
;
504 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
505 FILE_NAME_INFORMATION NameInformation
;
506 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
508 typedef struct _FILE_PIPE_LOCAL_INFORMATION
511 ULONG NamedPipeConfiguration
;
512 ULONG MaximumInstances
;
513 ULONG CurrentInstances
;
515 ULONG ReadDataAvailable
;
517 ULONG WriteQuotaAvailable
;
518 ULONG NamedPipeState
;
520 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
522 typedef struct _FILE_COMPRESSION_INFORMATION
524 LARGE_INTEGER CompressedSize
;
525 USHORT CompressionFormat
;
526 UCHAR CompressionUnitShift
;
528 UCHAR ClusterSizeShift
;
529 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
531 typedef struct _FILE_FS_VOLUME_INFORMATION
533 LARGE_INTEGER VolumeCreationTime
;
534 ULONG VolumeSerialNumber
;
535 ULONG VolumeLabelLength
;
536 BOOLEAN SupportsObjects
;
537 WCHAR VolumeLabel
[1];
538 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
540 typedef struct _FILE_FS_SIZE_INFORMATION
542 LARGE_INTEGER TotalAllocationUnits
;
543 LARGE_INTEGER AvailableAllocationUnits
;
544 ULONG SectorsPerAllocationUnit
;
545 ULONG BytesPerSector
;
546 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
548 typedef enum _FSINFOCLASS
{
549 FileFsVolumeInformation
= 1,
550 FileFsLabelInformation
,
551 FileFsSizeInformation
,
552 FileFsDeviceInformation
,
553 FileFsAttributeInformation
,
554 FileFsControlInformation
,
555 FileFsFullSizeInformation
,
556 FileFsObjectIdInformation
,
557 FileFsDriverPathInformation
,
558 FileFsMaximumInformation
559 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
561 typedef enum _OBJECT_INFORMATION_CLASS
563 ObjectBasicInformation
= 0,
564 ObjectNameInformation
= 1,
565 ObjectHandleInformation
= 4
567 } OBJECT_INFORMATION_CLASS
;
569 typedef struct _OBJECT_NAME_INFORMATION
572 } OBJECT_NAME_INFORMATION
;
574 typedef struct _DIRECTORY_BASIC_INFORMATION
576 UNICODE_STRING ObjectName
;
577 UNICODE_STRING ObjectTypeName
;
578 } DIRECTORY_BASIC_INFORMATION
, *PDIRECTORY_BASIC_INFORMATION
;
580 /* Function declarations for ntdll.dll. These don't appear in any
581 standard Win32 header. */
584 NTSTATUS NTAPI
NtClose (HANDLE
);
585 NTSTATUS NTAPI
NtCreateFile (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
586 PIO_STATUS_BLOCK
, PLARGE_INTEGER
, ULONG
, ULONG
,
587 ULONG
, ULONG
, PVOID
, ULONG
);
588 NTSTATUS NTAPI
NtCreateSection (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
589 PLARGE_INTEGER
, ULONG
, ULONG
, HANDLE
);
590 NTSTATUS NTAPI
NtCreateToken (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
591 TOKEN_TYPE
, PLUID
, PLARGE_INTEGER
, PTOKEN_USER
,
592 PTOKEN_GROUPS
, PTOKEN_PRIVILEGES
, PTOKEN_OWNER
,
593 PTOKEN_PRIMARY_GROUP
, PTOKEN_DEFAULT_DACL
,
595 NTSTATUS NTAPI
NtLockVirtualMemory (HANDLE
, PVOID
*, ULONG
*, ULONG
);
596 NTSTATUS NTAPI
NtMapViewOfSection (HANDLE
, HANDLE
, PVOID
*, ULONG
, ULONG
,
597 PLARGE_INTEGER
, PULONG
, SECTION_INHERIT
,
599 NTSTATUS NTAPI
NtOpenDirectoryObject (PHANDLE
, ACCESS_MASK
,
601 NTSTATUS NTAPI
NtOpenFile (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
602 PIO_STATUS_BLOCK
, ULONG
, ULONG
);
603 NTSTATUS NTAPI
NtOpenSection (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
);
604 NTSTATUS NTAPI
NtQueryDirectoryFile(HANDLE
, HANDLE
, PVOID
, PVOID
,
605 PIO_STATUS_BLOCK
, PVOID
, ULONG
,
606 FILE_INFORMATION_CLASS
, BOOLEAN
,
607 PUNICODE_STRING
, BOOLEAN
);
608 NTSTATUS NTAPI
NtQueryDirectoryObject (HANDLE
, PVOID
, ULONG
, BOOLEAN
,
609 BOOLEAN
, PULONG
, PULONG
);
610 NTSTATUS NTAPI
NtQueryInformationFile (HANDLE
, PIO_STATUS_BLOCK
, PVOID
,
611 ULONG
, FILE_INFORMATION_CLASS
);
612 NTSTATUS NTAPI
NtQueryInformationProcess (HANDLE
, PROCESSINFOCLASS
,
613 PVOID
, ULONG
, PULONG
);
614 NTSTATUS NTAPI
NtQueryObject (HANDLE
, OBJECT_INFORMATION_CLASS
, VOID
*,
616 NTSTATUS NTAPI
NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS
,
617 PVOID
, ULONG
, PULONG
);
618 NTSTATUS NTAPI
NtQuerySecurityObject (HANDLE
, SECURITY_INFORMATION
,
619 PSECURITY_DESCRIPTOR
, ULONG
, PULONG
);
620 NTSTATUS NTAPI
NtQueryVirtualMemory (HANDLE
, PVOID
, MEMORY_INFORMATION_CLASS
,
621 PVOID
, ULONG
, PULONG
);
622 NTSTATUS NTAPI
NtQueryVolumeInformationFile (HANDLE
, IO_STATUS_BLOCK
*,
624 FS_INFORMATION_CLASS
);
625 NTSTATUS NTAPI
NtSetSecurityObject (HANDLE
, SECURITY_INFORMATION
,
626 PSECURITY_DESCRIPTOR
);
627 NTSTATUS NTAPI
NtUnlockVirtualMemory (HANDLE
, PVOID
*, ULONG
*, ULONG
);
628 NTSTATUS NTAPI
NtUnmapViewOfSection (HANDLE
, PVOID
);
629 VOID NTAPI
RtlInitUnicodeString (PUNICODE_STRING
, PCWSTR
);
630 ULONG NTAPI
RtlIsDosDeviceName_U (PCWSTR
);
631 ULONG NTAPI
RtlNtStatusToDosError (NTSTATUS
);