1 /* ntdll.h. Contains ntdll specific stuff not defined elsewhere.
3 Copyright 2000, 2001, 2002, 2003, 2004 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_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xc0000004)
12 #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xc0000023)
13 #define PDI_MODULES 0x01
14 #define PDI_HEAPS 0x04
15 #define LDRP_IMAGE_DLL 0x00000004
16 #define WSLE_PAGE_READONLY 0x001
17 #define WSLE_PAGE_EXECUTE 0x002
18 #define WSLE_PAGE_EXECUTE_READ 0x003
19 #define WSLE_PAGE_READWRITE 0x004
20 #define WSLE_PAGE_WRITECOPY 0x005
21 #define WSLE_PAGE_EXECUTE_READWRITE 0x006
22 #define WSLE_PAGE_EXECUTE_WRITECOPY 0x007
23 #define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0
24 #define WSLE_PAGE_SHAREABLE 0x100
26 typedef ULONG KAFFINITY
;
28 typedef enum _SYSTEM_INFORMATION_CLASS
30 SystemBasicInformation
= 0,
31 SystemPerformanceInformation
= 2,
32 SystemTimeOfDayInformation
= 3,
33 SystemProcessesAndThreadsInformation
= 5,
34 SystemProcessorTimes
= 8,
35 SystemPagefileInformation
= 18,
36 /* There are a lot more of these... */
37 } SYSTEM_INFORMATION_CLASS
;
39 typedef struct _SYSTEM_BASIC_INFORMATION
42 ULONG MaximumIncrement
;
43 ULONG PhysicalPageSize
;
44 ULONG NumberOfPhysicalPages
;
45 ULONG LowestPhysicalPage
;
46 ULONG HighestPhysicalPage
;
47 ULONG AllocationGranularity
;
48 ULONG LowestUserAddress
;
49 ULONG HighestUserAddress
;
50 ULONG ActiveProcessors
;
51 UCHAR NumberProcessors
;
52 } SYSTEM_BASIC_INFORMATION
, *PSYSTEM_BASIC_INFORMATION
;
54 typedef struct _SYSTEM_PAGEFILE_INFORMATION
56 ULONG NextEntryOffset
;
60 UNICODE_STRING FileName
;
61 } SYSTEM_PAGEFILE_INFORMATION
, *PSYSTEM_PAGEFILE_INFORMATION
;
63 typedef struct __attribute__ ((aligned (8))) _SYSTEM_PROCESSOR_TIMES
65 LARGE_INTEGER IdleTime
;
66 LARGE_INTEGER KernelTime
;
67 LARGE_INTEGER UserTime
;
68 LARGE_INTEGER DpcTime
;
69 LARGE_INTEGER InterruptTime
;
71 } SYSTEM_PROCESSOR_TIMES
, *PSYSTEM_PROCESSOR_TIMES
;
73 typedef LONG KPRIORITY
;
74 typedef struct _VM_COUNTERS
76 ULONG PeakVirtualSize
;
79 ULONG PeakWorkingSetSize
;
81 ULONG QuotaPeakPagedPoolUsage
;
82 ULONG QuotaPagedPoolUsage
;
83 ULONG QuotaPeakNonPagedPoolUsage
;
84 ULONG QuotaNonPagedPoolUsage
;
86 ULONG PeakPagefileUsage
;
87 } VM_COUNTERS
, *PVM_COUNTERS
;
89 typedef struct _CLIENT_ID
93 } CLIENT_ID
, *PCLIENT_ID
;
139 typedef struct _SYSTEM_THREADS
141 LARGE_INTEGER KernelTime
;
142 LARGE_INTEGER UserTime
;
143 LARGE_INTEGER CreateTime
;
148 KPRIORITY BasePriority
;
149 ULONG ContextSwitchCount
;
151 KWAIT_REASON WaitReason
;
153 } SYSTEM_THREADS
, *PSYSTEM_THREADS
;
155 typedef struct _SYSTEM_PROCESSES
157 ULONG NextEntryDelta
;
160 LARGE_INTEGER CreateTime
;
161 LARGE_INTEGER UserTime
;
162 LARGE_INTEGER KernelTime
;
163 UNICODE_STRING ProcessName
;
164 KPRIORITY BasePriority
;
166 ULONG InheritedFromProcessId
;
169 VM_COUNTERS VmCounters
;
170 IO_COUNTERS IoCounters
;
171 SYSTEM_THREADS Threads
[1];
172 } SYSTEM_PROCESSES
, *PSYSTEM_PROCESSES
;
174 typedef struct _IO_STATUS_BLOCK
178 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
180 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
182 LARGE_INTEGER IdleTime
;
183 LARGE_INTEGER ReadTransferCount
;
184 LARGE_INTEGER WriteTransferCount
;
185 LARGE_INTEGER OtherTransferCount
;
186 ULONG ReadOperationCount
;
187 ULONG WriteOperationCount
;
188 ULONG OtherOperationCount
;
189 ULONG AvailablePages
;
190 ULONG TotalCommittedPages
;
191 ULONG TotalCommitLimit
;
192 ULONG PeakCommitment
;
194 ULONG WriteCopyFaults
;
195 ULONG TransitionFaults
;
197 ULONG DemandZeroFaults
;
201 ULONG PagefilePagesWritten
;
202 ULONG PagefilePageWriteIos
;
203 ULONG MappedFilePagesWritten
;
204 ULONG MappedFilePageWriteIos
;
205 ULONG PagedPoolUsage
;
206 ULONG NonPagedPoolUsage
;
207 ULONG PagedPoolAllocs
;
208 ULONG PagedPoolFrees
;
209 ULONG NonPagedPoolAllocs
;
210 ULONG NonPagedPoolFrees
;
211 ULONG TotalFreeSystemPtes
;
212 ULONG SystemCodePage
;
213 ULONG TotalSystemDriverPages
;
214 ULONG TotalSystemCodePages
;
215 ULONG SmallNonPagedLookasideListAllocateHits
;
216 ULONG SmallPagedLookasideListAllocateHits
;
218 ULONG MmSystemCachePage
;
220 ULONG SystemDriverPage
;
221 ULONG FastReadNoWait
;
223 ULONG FastReadResourceMiss
;
224 ULONG FastReadNotPossible
;
225 ULONG FastMdlReadNoWait
;
226 ULONG FastMdlReadWait
;
227 ULONG FastMdlReadResourceMiss
;
228 ULONG FastMdlReadNotPossible
;
231 ULONG MapDataNoWaitMiss
;
232 ULONG MapDataWaitMiss
;
233 ULONG PinMappedDataCount
;
236 ULONG PinReadNoWaitMiss
;
237 ULONG PinReadWaitMiss
;
238 ULONG CopyReadNoWait
;
240 ULONG CopyReadNoWaitMiss
;
241 ULONG CopyReadWaitMiss
;
244 ULONG MdlReadNoWaitMiss
;
245 ULONG MdlReadWaitMiss
;
248 ULONG LazyWritePages
;
251 ULONG ContextSwitches
;
252 ULONG FirstLevelTbFills
;
253 ULONG SecondLevelTbFills
;
255 } SYSTEM_PERFORMANCE_INFORMATION
, *PSYSTEM_PERFORMANCE_INFORMATION
;
257 typedef struct __attribute__ ((aligned(8))) _SYSTEM_TIME_OF_DAY_INFORMATION
259 LARGE_INTEGER BootTime
;
260 LARGE_INTEGER CurrentTime
;
261 LARGE_INTEGER TimeZoneBias
;
262 ULONG CurrentTimeZoneId
;
263 } SYSTEM_TIME_OF_DAY_INFORMATION
, *PSYSTEM_TIME_OF_DAY_INFORMATION
;
265 typedef enum _PROCESSINFOCLASS
267 ProcessBasicInformation
= 0,
268 ProcessQuotaLimits
= 1,
269 ProcessVmCounters
= 3,
273 typedef struct _DEBUG_BUFFER
275 HANDLE SectionHandle
;
277 PVOID RemoteSectionBase
;
278 ULONG SectionBaseDelta
;
279 HANDLE EventPairHandle
;
281 HANDLE RemoteThreadHandle
;
286 PVOID ModuleInformation
;
287 PVOID BackTraceInformation
;
288 PVOID HeapInformation
;
289 PVOID LockInformation
;
291 } DEBUG_BUFFER
, *PDEBUG_BUFFER
;
293 typedef struct _DEBUG_HEAP_INFORMATION
306 } DEBUG_HEAP_INFORMATION
, *PDEBUG_HEAP_INFORMATION
;
308 typedef struct _DEBUG_MODULE_INFORMATION
317 USHORT ModuleNameOffset
;
319 } DEBUG_MODULE_INFORMATION
, *PDEBUG_MODULE_INFORMATION
;
321 typedef struct _KERNEL_USER_TIMES
323 LARGE_INTEGER CreateTime
;
324 LARGE_INTEGER ExitTime
;
325 LARGE_INTEGER KernelTime
;
326 LARGE_INTEGER UserTime
;
327 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
331 typedef struct _PROCESS_BASIC_INFORMATION
335 KAFFINITY AffinityMask
;
336 KPRIORITY BasePriority
;
337 ULONG UniqueProcessId
;
338 ULONG InheritedFromUniqueProcessId
;
339 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
341 typedef enum _MEMORY_INFORMATION_CLASS
343 MemoryBasicInformation
,
344 MemoryWorkingSetList
,
346 MemoryBasicVlmInformation
347 } MEMORY_INFORMATION_CLASS
;
349 typedef struct _MEMORY_WORKING_SET_LIST
352 ULONG WorkingSetList
[1];
353 } MEMORY_WORKING_SET_LIST
, *PMEMORY_WORKING_SET_LIST
;
355 typedef struct _FILE_NAME_INFORMATION
357 DWORD FileNameLength
;
358 WCHAR FileName
[MAX_PATH
+ 100];
359 } FILE_NAME_INFORMATION
;
361 typedef struct _FILE_PIPE_LOCAL_INFORMATION
364 ULONG NamedPipeConfiguration
;
365 ULONG MaximumInstances
;
366 ULONG CurrentInstances
;
368 ULONG ReadDataAvailable
;
370 ULONG WriteQuotaAvailable
;
371 ULONG NamedPipeState
;
373 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
375 typedef struct _FILE_COMPRESSION_INFORMATION
377 LARGE_INTEGER CompressedSize
;
378 USHORT CompressionFormat
;
379 UCHAR CompressionUnitShift
;
381 UCHAR ClusterSizeShift
;
382 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
384 typedef enum _FILE_INFORMATION_CLASS
386 FilePipeLocalInformation
= 24,
387 FileCompressionInformation
= 28
388 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
390 typedef enum _OBJECT_INFORMATION_CLASS
392 ObjectBasicInformation
= 0,
393 ObjectNameInformation
= 1,
394 ObjectHandleInformation
= 4
396 } OBJECT_INFORMATION_CLASS
;
398 typedef struct _OBJECT_NAME_INFORMATION
401 } OBJECT_NAME_INFORMATION
;
403 /* Function declarations for ntdll.dll. These don't appear in any
404 standard Win32 header. */
407 NTSTATUS NTAPI
NtCreateFile (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
408 PIO_STATUS_BLOCK
, PLARGE_INTEGER
, ULONG
, ULONG
,
409 ULONG
, ULONG
, PVOID
, ULONG
);
410 NTSTATUS NTAPI
NtCreateToken (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
411 TOKEN_TYPE
, PLUID
, PLARGE_INTEGER
, PTOKEN_USER
,
412 PTOKEN_GROUPS
, PTOKEN_PRIVILEGES
, PTOKEN_OWNER
,
413 PTOKEN_PRIMARY_GROUP
, PTOKEN_DEFAULT_DACL
,
415 NTSTATUS NTAPI
NtMapViewOfSection (HANDLE
, HANDLE
, PVOID
*, ULONG
, ULONG
,
416 PLARGE_INTEGER
, PULONG
, SECTION_INHERIT
,
418 NTSTATUS NTAPI
NtOpenFile (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
,
419 PIO_STATUS_BLOCK
, ULONG
, ULONG
);
420 NTSTATUS NTAPI
NtOpenSection (PHANDLE
, ACCESS_MASK
, POBJECT_ATTRIBUTES
);
421 NTSTATUS NTAPI
NtQueryInformationFile (HANDLE
, IO_STATUS_BLOCK
*, VOID
*,
422 ULONG
, FILE_INFORMATION_CLASS
);
423 NTSTATUS NTAPI
NtQueryInformationProcess (HANDLE
, PROCESSINFOCLASS
,
424 PVOID
, ULONG
, PULONG
);
425 NTSTATUS NTAPI
NtQueryObject (HANDLE
, OBJECT_INFORMATION_CLASS
, VOID
*,
427 NTSTATUS NTAPI
NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS
,
428 PVOID
, ULONG
, PULONG
);
429 NTSTATUS NTAPI
NtQuerySecurityObject (HANDLE
, SECURITY_INFORMATION
,
430 PSECURITY_DESCRIPTOR
, ULONG
, PULONG
);
431 NTSTATUS NTAPI
NtQueryVirtualMemory (HANDLE
, PVOID
, MEMORY_INFORMATION_CLASS
,
432 PVOID
, ULONG
, PULONG
);
433 NTSTATUS NTAPI
NtSetSecurityObject (HANDLE
, SECURITY_INFORMATION
,
434 PSECURITY_DESCRIPTOR
);
435 NTSTATUS NTAPI
NtUnmapViewOfSection (HANDLE
, PVOID
);
436 VOID NTAPI
RtlInitUnicodeString (PUNICODE_STRING
, PCWSTR
);
437 ULONG NTAPI
RtlNtStatusToDosError (NTSTATUS
);
438 ULONG WINAPI
RtlIsDosDeviceName_U (PCWSTR
);