]> sourceware.org Git - newlib-cygwin.git/blob - winsup/cygwin/ntdll.h
Christopher Faylor <cgf@timesys.com>
[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 Red Hat, Inc.
4
5 This file is part of Cygwin.
6
7 This software is a copyrighted work licensed under the terms of the
8 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
9 details. */
10
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
25
26 typedef ULONG KAFFINITY;
27
28 typedef enum _SYSTEM_INFORMATION_CLASS
29 {
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;
38
39 typedef struct _SYSTEM_BASIC_INFORMATION
40 {
41 ULONG Unknown;
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;
53
54 typedef struct _SYSTEM_PAGEFILE_INFORMATION
55 {
56 ULONG NextEntryOffset;
57 ULONG CurrentSize;
58 ULONG TotalUsed;
59 ULONG PeakUsed;
60 UNICODE_STRING FileName;
61 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
62
63 typedef struct __attribute__ ((aligned (8))) _SYSTEM_PROCESSOR_TIMES
64 {
65 LARGE_INTEGER IdleTime;
66 LARGE_INTEGER KernelTime;
67 LARGE_INTEGER UserTime;
68 LARGE_INTEGER DpcTime;
69 LARGE_INTEGER InterruptTime;
70 ULONG InterruptCount;
71 } SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES;
72
73 typedef LONG KPRIORITY;
74 typedef struct _VM_COUNTERS
75 {
76 ULONG PeakVirtualSize;
77 ULONG VirtualSize;
78 ULONG PageFaultCount;
79 ULONG PeakWorkingSetSize;
80 ULONG WorkingSetSize;
81 ULONG QuotaPeakPagedPoolUsage;
82 ULONG QuotaPagedPoolUsage;
83 ULONG QuotaPeakNonPagedPoolUsage;
84 ULONG QuotaNonPagedPoolUsage;
85 ULONG PagefileUsage;
86 ULONG PeakPagefileUsage;
87 } VM_COUNTERS, *PVM_COUNTERS;
88
89 typedef struct _CLIENT_ID
90 {
91 HANDLE UniqueProcess;
92 HANDLE UniqueThread;
93 } CLIENT_ID, *PCLIENT_ID;
94
95 typedef enum
96 {
97 StateInitialized,
98 StateReady,
99 StateRunning,
100 StateStandby,
101 StateTerminated,
102 StateWait,
103 StateTransition,
104 StateUnknown,
105 } THREAD_STATE;
106
107 typedef enum
108 {
109 Executive,
110 FreePage,
111 PageIn,
112 PoolAllocation,
113 DelayExecution,
114 Suspended,
115 UserRequest,
116 WrExecutive,
117 WrFreePage,
118 WrPageIn,
119 WrPoolAllocation,
120 WrDelayExecution,
121 WrSuspended,
122 WrUserRequest,
123 WrEventPair,
124 WrQueue,
125 WrLpcReceive,
126 WrLpcReply,
127 WrVirtualMemory,
128 WrPageOut,
129 WrRendezvous,
130 Spare2,
131 Spare3,
132 Spare4,
133 Spare5,
134 Spare6,
135 WrKernel,
136 MaximumWaitReason
137 } KWAIT_REASON;
138
139 typedef struct _SYSTEM_THREADS
140 {
141 LARGE_INTEGER KernelTime;
142 LARGE_INTEGER UserTime;
143 LARGE_INTEGER CreateTime;
144 ULONG WaitTime;
145 PVOID StartAddress;
146 CLIENT_ID ClientId;
147 KPRIORITY Priority;
148 KPRIORITY BasePriority;
149 ULONG ContextSwitchCount;
150 THREAD_STATE State;
151 KWAIT_REASON WaitReason;
152 DWORD Reserved;
153 } SYSTEM_THREADS, *PSYSTEM_THREADS;
154
155 typedef struct _SYSTEM_PROCESSES
156 {
157 ULONG NextEntryDelta;
158 ULONG ThreadCount;
159 ULONG Reserved1[6];
160 LARGE_INTEGER CreateTime;
161 LARGE_INTEGER UserTime;
162 LARGE_INTEGER KernelTime;
163 UNICODE_STRING ProcessName;
164 KPRIORITY BasePriority;
165 ULONG ProcessId;
166 ULONG InheritedFromProcessId;
167 ULONG HandleCount;
168 ULONG Reserved2[2];
169 VM_COUNTERS VmCounters;
170 IO_COUNTERS IoCounters;
171 SYSTEM_THREADS Threads[1];
172 } SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
173
174 typedef struct _IO_STATUS_BLOCK
175 {
176 NTSTATUS Status;
177 ULONG Information;
178 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
179
180 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
181 {
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;
193 ULONG PageFaults;
194 ULONG WriteCopyFaults;
195 ULONG TransitionFaults;
196 ULONG Reserved1;
197 ULONG DemandZeroFaults;
198 ULONG PagesRead;
199 ULONG PageReadIos;
200 ULONG Reserved2[2];
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;
217 ULONG Reserved3;
218 ULONG MmSystemCachePage;
219 ULONG PagedPoolPage;
220 ULONG SystemDriverPage;
221 ULONG FastReadNoWait;
222 ULONG FastReadWait;
223 ULONG FastReadResourceMiss;
224 ULONG FastReadNotPossible;
225 ULONG FastMdlReadNoWait;
226 ULONG FastMdlReadWait;
227 ULONG FastMdlReadResourceMiss;
228 ULONG FastMdlReadNotPossible;
229 ULONG MapDataNoWait;
230 ULONG MapDataWait;
231 ULONG MapDataNoWaitMiss;
232 ULONG MapDataWaitMiss;
233 ULONG PinMappedDataCount;
234 ULONG PinReadNoWait;
235 ULONG PinReadWait;
236 ULONG PinReadNoWaitMiss;
237 ULONG PinReadWaitMiss;
238 ULONG CopyReadNoWait;
239 ULONG CopyReadWait;
240 ULONG CopyReadNoWaitMiss;
241 ULONG CopyReadWaitMiss;
242 ULONG MdlReadNoWait;
243 ULONG MdlReadWait;
244 ULONG MdlReadNoWaitMiss;
245 ULONG MdlReadWaitMiss;
246 ULONG ReadAheadIos;
247 ULONG LazyWriteIos;
248 ULONG LazyWritePages;
249 ULONG DataFlushes;
250 ULONG DataPages;
251 ULONG ContextSwitches;
252 ULONG FirstLevelTbFills;
253 ULONG SecondLevelTbFills;
254 ULONG SystemCalls;
255 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
256
257 typedef struct __attribute__ ((aligned(8))) _SYSTEM_TIME_OF_DAY_INFORMATION
258 {
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;
264
265 typedef enum _PROCESSINFOCLASS
266 {
267 ProcessBasicInformation = 0,
268 ProcessQuotaLimits = 1,
269 ProcessVmCounters = 3,
270 ProcessTimes =4,
271 } PROCESSINFOCLASS;
272
273 typedef struct _DEBUG_BUFFER
274 {
275 HANDLE SectionHandle;
276 PVOID SectionBase;
277 PVOID RemoteSectionBase;
278 ULONG SectionBaseDelta;
279 HANDLE EventPairHandle;
280 ULONG Unknown[2];
281 HANDLE RemoteThreadHandle;
282 ULONG InfoClassMask;
283 ULONG SizeOfInfo;
284 ULONG AllocatedSize;
285 ULONG SectionSize;
286 PVOID ModuleInformation;
287 PVOID BackTraceInformation;
288 PVOID HeapInformation;
289 PVOID LockInformation;
290 PVOID Reserved[9];
291 } DEBUG_BUFFER, *PDEBUG_BUFFER;
292
293 typedef struct _DEBUG_HEAP_INFORMATION
294 {
295 ULONG Base;
296 ULONG Flags;
297 USHORT Granularity;
298 USHORT Unknown;
299 ULONG Allocated;
300 ULONG Committed;
301 ULONG TagCount;
302 ULONG BlockCount;
303 ULONG Reserved[7];
304 PVOID Tags;
305 PVOID Blocks;
306 } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
307
308 typedef struct _DEBUG_MODULE_INFORMATION
309 {
310 ULONG Reserved[2];
311 ULONG Base;
312 ULONG Size;
313 ULONG Flags;
314 USHORT Index;
315 USHORT Unknown;
316 USHORT LoadCount;
317 USHORT ModuleNameOffset;
318 CHAR ImageName[256];
319 } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
320
321 typedef struct _KERNEL_USER_TIMES
322 {
323 LARGE_INTEGER CreateTime;
324 LARGE_INTEGER ExitTime;
325 LARGE_INTEGER KernelTime;
326 LARGE_INTEGER UserTime;
327 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
328
329 typedef void *PPEB;
330
331 typedef struct _PROCESS_BASIC_INFORMATION
332 {
333 NTSTATUS ExitStatus;
334 PPEB PebBaseAddress;
335 KAFFINITY AffinityMask;
336 KPRIORITY BasePriority;
337 ULONG UniqueProcessId;
338 ULONG InheritedFromUniqueProcessId;
339 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
340
341 typedef enum _MEMORY_INFORMATION_CLASS
342 {
343 MemoryBasicInformation,
344 MemoryWorkingSetList,
345 MemorySectionName,
346 MemoryBasicVlmInformation
347 } MEMORY_INFORMATION_CLASS;
348
349 typedef struct _MEMORY_WORKING_SET_LIST
350 {
351 ULONG NumberOfPages;
352 ULONG WorkingSetList[1];
353 } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
354
355 typedef struct _FILE_NAME_INFORMATION
356 {
357 DWORD FileNameLength;
358 WCHAR FileName[MAX_PATH + 100];
359 } FILE_NAME_INFORMATION;
360
361 typedef struct _FILE_PIPE_LOCAL_INFORMATION
362 {
363 ULONG NamedPipeType;
364 ULONG NamedPipeConfiguration;
365 ULONG MaximumInstances;
366 ULONG CurrentInstances;
367 ULONG InboundQuota;
368 ULONG ReadDataAvailable;
369 ULONG OutboundQuota;
370 ULONG WriteQuotaAvailable;
371 ULONG NamedPipeState;
372 ULONG NamedPipeEnd;
373 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
374
375 typedef struct _FILE_COMPRESSION_INFORMATION
376 {
377 LARGE_INTEGER CompressedSize;
378 USHORT CompressionFormat;
379 UCHAR CompressionUnitShift;
380 UCHAR Unknown;
381 UCHAR ClusterSizeShift;
382 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
383
384 typedef enum _FILE_INFORMATION_CLASS
385 {
386 FilePipeLocalInformation = 24,
387 FileCompressionInformation = 28
388 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
389
390 typedef enum _OBJECT_INFORMATION_CLASS
391 {
392 ObjectBasicInformation = 0,
393 ObjectNameInformation = 1,
394 ObjectHandleInformation = 4
395 // and many more
396 } OBJECT_INFORMATION_CLASS;
397
398 typedef struct _OBJECT_NAME_INFORMATION
399 {
400 UNICODE_STRING Name;
401 } OBJECT_NAME_INFORMATION;
402
403 /* Function declarations for ntdll.dll. These don't appear in any
404 standard Win32 header. */
405 extern "C"
406 {
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,
414 PTOKEN_SOURCE);
415 NTSTATUS NTAPI NtMapViewOfSection (HANDLE, HANDLE, PVOID *, ULONG, ULONG,
416 PLARGE_INTEGER, PULONG, SECTION_INHERIT,
417 ULONG, ULONG);
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 *,
426 ULONG, ULONG *);
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);
439 }
This page took 0.05407 seconds and 6 git commands to generate.