]> sourceware.org Git - newlib-cygwin.git/blame - winsup/cygwin/ntdll.h
* cygheap.h (cwdstuff::override_win32_cwd): Declare.
[newlib-cygwin.git] / winsup / cygwin / ntdll.h
CommitLineData
f5c1d231 1/* ntdll.h. Contains ntdll specific stuff not defined elsewhere.
8c8d0db4 2
165cb245 3 Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
3432d6f1 4 2009, 2010 Red Hat, Inc.
8c8d0db4
CV
5
6 This file is part of Cygwin.
7
8 This software is a copyrighted work licensed under the terms of the
9 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
10 details. */
11
cef5dfd7
CF
12#ifndef _NTDLL_H
13#define _NTDLL_H 1
f4ad0404 14#define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS) 0x00000106)
abbde487
CV
15#define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS) 0x40000000)
16#define STATUS_BUFFER_OVERFLOW ((NTSTATUS) 0x80000005)
17#define STATUS_NO_MORE_FILES ((NTSTATUS) 0x80000006)
a9e36321
CF
18#ifndef STATUS_INVALID_INFO_CLASS
19/* Some w32api header file defines this so we need to conditionalize this
20 define to avoid warnings. */
745c29fe 21#define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xc0000003)
a9e36321 22#endif
3498f76d 23#define STATUS_NOT_IMPLEMENTED ((NTSTATUS) 0xc0000002)
745c29fe
CV
24#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xc0000004)
25#define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xc000000d)
a888c079 26#define STATUS_NO_SUCH_FILE ((NTSTATUS) 0xc000000f)
745c29fe 27#define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS) 0xc0000010)
fc7290fd 28#define STATUS_END_OF_FILE ((NTSTATUS) 0xc0000011)
d3dd7d36 29#define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS) 0xc0000013)
8884a168 30#define STATUS_ACCESS_DENIED ((NTSTATUS) 0xc0000022)
745c29fe 31#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xc0000023)
43f65cdd 32#define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS) 0xc0000024)
1ceec140 33#define STATUS_OBJECT_NAME_INVALID ((NTSTATUS) 0xc0000033)
d3dd7d36 34#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS) 0xc0000034)
61c44b72 35#define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS) 0xc000003A)
745c29fe 36#define STATUS_SHARING_VIOLATION ((NTSTATUS) 0xc0000043)
f4ad0404 37#define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS) 0xc000004f)
50450dcc
CV
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)
03897d8d 41#define STATUS_LOCK_NOT_GRANTED ((NTSTATUS) 0xc0000055)
745c29fe 42#define STATUS_DELETE_PENDING ((NTSTATUS) 0xc0000056)
6ce2c241 43#define STATUS_DISK_FULL ((NTSTATUS) 0xc000007f)
745c29fe 44#define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xc00000a1)
43f65cdd
CV
45#define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS) 0xc00000ab)
46#define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS) 0xc00000ac)
47#define STATUS_INVALID_PIPE_STATE ((NTSTATUS) 0xc00000ad)
48#define STATUS_PIPE_BUSY ((NTSTATUS) 0xc00000ae)
4368984a 49#define STATUS_NOT_SUPPORTED ((NTSTATUS) 0xc00000bb)
fad9568b 50#define STATUS_BAD_NETWORK_PATH ((NTSTATUS) 0xc00000be)
3432d6f1 51#define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS) 0xc00000c3)
fad9568b 52#define STATUS_BAD_NETWORK_NAME ((NTSTATUS) 0xc00000cc)
ed7ec849 53#define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS) 0xc0000101)
f4ad0404 54#define STATUS_CANNOT_DELETE ((NTSTATUS) 0xc0000121)
745c29fe 55#define STATUS_INVALID_LEVEL ((NTSTATUS) 0xc0000148)
abbde487
CV
56#define STATUS_DLL_NOT_FOUND ((NTSTATUS) 0xc0000135)
57#define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xc0000139)
58#define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS) 0xc0000251)
59#define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS) 0xc0000269)
dc4e4aab
CW
60/* custom status code: */
61#define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269)
93d606f6 62
9ba913a5
CF
63#define PDI_MODULES 0x01
64#define PDI_HEAPS 0x04
65#define LDRP_IMAGE_DLL 0x00000004
66#define WSLE_PAGE_READONLY 0x001
67#define WSLE_PAGE_EXECUTE 0x002
68#define WSLE_PAGE_EXECUTE_READ 0x003
69#define WSLE_PAGE_READWRITE 0x004
70#define WSLE_PAGE_WRITECOPY 0x005
71#define WSLE_PAGE_EXECUTE_READWRITE 0x006
72#define WSLE_PAGE_EXECUTE_WRITECOPY 0x007
73#define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0
74#define WSLE_PAGE_SHAREABLE 0x100
75
61c44b72
CV
76#define FILE_SUPERSEDED 0
77#define FILE_OPENED 1
78#define FILE_CREATED 2
79#define FILE_OVERWRITTEN 3
80#define FILE_EXISTS 4
81#define FILE_DOES_NOT_EXIST 5
82
6ce2c241
CV
83#define FILE_WRITE_TO_END_OF_FILE (-1LL)
84#define FILE_USE_FILE_POINTER_POSITION (-2LL)
85
d3dd7d36
CV
86/* Device Characteristics. */
87#define FILE_REMOVABLE_MEDIA 0x00000001
88#define FILE_READ_ONLY_DEVICE 0x00000002
89#define FILE_FLOPPY_DISKETTE 0x00000004
90#define FILE_WRITE_ONCE_MEDIA 0x00000008
91#define FILE_REMOTE_DEVICE 0x00000010
92#define FILE_DEVICE_IS_MOUNTED 0x00000020
93#define FILE_VIRTUAL_VOLUME 0x00000040
94#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
95#define FILE_DEVICE_SECURE_OPEN 0x00000100
96
4c153b24
CV
97/* Transaction access rights. */
98#define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x3F)
99
742e27be
CF
100typedef enum _FILE_INFORMATION_CLASS
101{
102 FileDirectoryInformation = 1,
103 FileFullDirectoryInformation, // 2
104 FileBothDirectoryInformation, // 3
105 FileBasicInformation, // 4 wdm
106 FileStandardInformation, // 5 wdm
107 FileInternalInformation, // 6
108 FileEaInformation, // 7
109 FileAccessInformation, // 8
110 FileNameInformation, // 9
111 FileRenameInformation, // 10
112 FileLinkInformation, // 11
113 FileNamesInformation, // 12
114 FileDispositionInformation, // 13
115 FilePositionInformation, // 14 wdm
116 FileFullEaInformation, // 15
117 FileModeInformation, // 16
118 FileAlignmentInformation, // 17
119 FileAllInformation, // 18
120 FileAllocationInformation, // 19
121 FileEndOfFileInformation, // 20 wdm
122 FileAlternateNameInformation, // 21
123 FileStreamInformation, // 22
124 FilePipeInformation, // 23
125 FilePipeLocalInformation, // 24
126 FilePipeRemoteInformation, // 25
127 FileMailslotQueryInformation, // 26
128 FileMailslotSetInformation, // 27
129 FileCompressionInformation, // 28
130 FileObjectIdInformation, // 29
131 FileCompletionInformation, // 30
132 FileMoveClusterInformation, // 31
133 FileQuotaInformation, // 32
134 FileReparsePointInformation, // 33
135 FileNetworkOpenInformation, // 34
136 FileAttributeTagInformation, // 35
137 FileTrackingInformation, // 36
138 FileIdBothDirectoryInformation, // 37
139 FileIdFullDirectoryInformation, // 38
140 FileValidDataLengthInformation, // 39
141 FileShortNameInformation, // 40
142 FileMaximumInformation
143} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
144
788e7da1
CV
145typedef struct _FILE_NAMES_INFORMATION
146{
147 ULONG NextEntryOffset;
148 ULONG FileIndex;
149 ULONG FileNameLength;
150 WCHAR FileName[1];
151} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
152
214c3a11
CV
153typedef struct _FILE_DIRECTORY_INFORMATION {
154 ULONG NextEntryOffset;
155 ULONG FileIndex;
156 LARGE_INTEGER CreationTime;
157 LARGE_INTEGER LastAccessTime;
158 LARGE_INTEGER LastWriteTime;
159 LARGE_INTEGER ChangeTime;
160 LARGE_INTEGER EndOfFile;
161 LARGE_INTEGER AllocationSize;
162 ULONG FileAttributes;
163 ULONG FileNameLength;
164 WCHAR FileName[1];
165} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
166
3432d6f1 167typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
742e27be
CF
168{
169 ULONG NextEntryOffset;
170 ULONG FileIndex;
171 LARGE_INTEGER CreationTime;
172 LARGE_INTEGER LastAccessTime;
173 LARGE_INTEGER LastWriteTime;
174 LARGE_INTEGER ChangeTime;
175 LARGE_INTEGER EndOfFile;
176 LARGE_INTEGER AllocationSize;
177 ULONG FileAttributes;
178 ULONG FileNameLength;
179 ULONG EaSize;
180 CCHAR ShortNameLength;
181 WCHAR ShortName[12];
182 WCHAR FileName[1];
3432d6f1 183} FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION;
742e27be
CF
184
185typedef struct _FILE_ID_BOTH_DIR_INFORMATION
186{
187 ULONG NextEntryOffset;
188 ULONG FileIndex;
189 LARGE_INTEGER CreationTime;
190 LARGE_INTEGER LastAccessTime;
191 LARGE_INTEGER LastWriteTime;
192 LARGE_INTEGER ChangeTime;
193 LARGE_INTEGER EndOfFile;
194 LARGE_INTEGER AllocationSize;
195 ULONG FileAttributes;
196 ULONG FileNameLength;
197 ULONG EaSize;
198 CCHAR ShortNameLength;
199 WCHAR ShortName[12];
200 LARGE_INTEGER FileId;
201 WCHAR FileName[1];
202} FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
203
204
f90e23f2 205#define AT_EXTENDABLE_FILE 0x00002000
5a101414 206#define AT_ROUND_TO_PAGE 0x40000000
6d11044c 207
1f5c3042
CV
208#define LOCK_VM_IN_WSL 1
209#define LOCK_VM_IN_RAM 2
210
e9c8cb31 211#define DIRECTORY_QUERY 1
c46d7be9
CV
212#define DIRECTORY_TRAVERSE 2
213#define DIRECTORY_CREATE_OBJECT 4
214#define DIRECTORY_CREATE_SUBDIRECTORY 8
a998dd70 215#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x0f)
e9c8cb31 216
43f65cdd
CV
217#define SYMBOLIC_LINK_QUERY 1
218
c46d7be9 219#define EVENT_QUERY_STATE 1
abbde487
CV
220#define SEMAPHORE_QUERY_STATE 1
221
222/* Specific ACCESS_MASKSs for objects created in Cygwin. */
223#define CYG_SHARED_DIR_ACCESS (DIRECTORY_QUERY \
025c1fac
CF
224 | DIRECTORY_TRAVERSE \
225 | DIRECTORY_CREATE_SUBDIRECTORY \
226 | DIRECTORY_CREATE_OBJECT \
227 | READ_CONTROL)
abbde487
CV
228
229#define CYG_MUTANT_ACCESS (MUTANT_QUERY_STATE \
230 | SYNCHRONIZE \
231 | READ_CONTROL)
232
233#define CYG_EVENT_ACCESS (EVENT_QUERY_STATE \
234 | EVENT_MODIFY_STATE \
235 | SYNCHRONIZE \
236 | READ_CONTROL)
237
238#define CYG_SEMAPHORE_ACCESS (SEMAPHORE_QUERY_STATE \
239 | SEMAPHORE_MODIFY_STATE \
240 | SYNCHRONIZE \
241 | READ_CONTROL)
c46d7be9 242
9ba913a5 243typedef ULONG KAFFINITY;
6d87f7d7
CF
244
245typedef enum _SYSTEM_INFORMATION_CLASS
246{
247 SystemBasicInformation = 0,
9ba913a5
CF
248 SystemPerformanceInformation = 2,
249 SystemTimeOfDayInformation = 3,
6d87f7d7 250 SystemProcessesAndThreadsInformation = 5,
9ba913a5 251 SystemProcessorTimes = 8,
891d1990 252 SystemPagefileInformation = 18,
6d87f7d7 253 /* There are a lot more of these... */
8c8d0db4
CV
254} SYSTEM_INFORMATION_CLASS;
255
6d87f7d7
CF
256typedef struct _SYSTEM_BASIC_INFORMATION
257{
8c8d0db4
CV
258 ULONG Unknown;
259 ULONG MaximumIncrement;
260 ULONG PhysicalPageSize;
261 ULONG NumberOfPhysicalPages;
262 ULONG LowestPhysicalPage;
263 ULONG HighestPhysicalPage;
264 ULONG AllocationGranularity;
265 ULONG LowestUserAddress;
266 ULONG HighestUserAddress;
267 ULONG ActiveProcessors;
9ba913a5 268 UCHAR NumberProcessors;
8c8d0db4
CV
269} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
270
891d1990
CV
271typedef struct _SYSTEM_PAGEFILE_INFORMATION
272{
273 ULONG NextEntryOffset;
274 ULONG CurrentSize;
275 ULONG TotalUsed;
276 ULONG PeakUsed;
277 UNICODE_STRING FileName;
278} SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
279
91a2f87b 280typedef struct __attribute__ ((aligned (8))) _SYSTEM_PROCESSOR_TIMES
9ba913a5
CF
281{
282 LARGE_INTEGER IdleTime;
283 LARGE_INTEGER KernelTime;
284 LARGE_INTEGER UserTime;
285 LARGE_INTEGER DpcTime;
286 LARGE_INTEGER InterruptTime;
287 ULONG InterruptCount;
288} SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES;
289
6d87f7d7
CF
290typedef LONG KPRIORITY;
291typedef struct _VM_COUNTERS
292{
293 ULONG PeakVirtualSize;
294 ULONG VirtualSize;
295 ULONG PageFaultCount;
296 ULONG PeakWorkingSetSize;
297 ULONG WorkingSetSize;
298 ULONG QuotaPeakPagedPoolUsage;
299 ULONG QuotaPagedPoolUsage;
300 ULONG QuotaPeakNonPagedPoolUsage;
301 ULONG QuotaNonPagedPoolUsage;
302 ULONG PagefileUsage;
303 ULONG PeakPagefileUsage;
304} VM_COUNTERS, *PVM_COUNTERS;
305
6d87f7d7
CF
306typedef struct _CLIENT_ID
307{
308 HANDLE UniqueProcess;
309 HANDLE UniqueThread;
310} CLIENT_ID, *PCLIENT_ID;
311
312typedef enum
313{
314 StateInitialized,
315 StateReady,
316 StateRunning,
317 StateStandby,
318 StateTerminated,
319 StateWait,
320 StateTransition,
321 StateUnknown,
322} THREAD_STATE;
8c8d0db4 323
6d87f7d7
CF
324typedef enum
325{
326 Executive,
327 FreePage,
328 PageIn,
329 PoolAllocation,
330 DelayExecution,
331 Suspended,
332 UserRequest,
333 WrExecutive,
334 WrFreePage,
335 WrPageIn,
336 WrPoolAllocation,
337 WrDelayExecution,
338 WrSuspended,
339 WrUserRequest,
340 WrEventPair,
341 WrQueue,
342 WrLpcReceive,
343 WrLpcReply,
344 WrVirtualMemory,
345 WrPageOut,
346 WrRendezvous,
347 Spare2,
348 Spare3,
349 Spare4,
350 Spare5,
351 Spare6,
352 WrKernel,
353 MaximumWaitReason
354} KWAIT_REASON;
355
356typedef struct _SYSTEM_THREADS
357{
358 LARGE_INTEGER KernelTime;
359 LARGE_INTEGER UserTime;
360 LARGE_INTEGER CreateTime;
361 ULONG WaitTime;
362 PVOID StartAddress;
363 CLIENT_ID ClientId;
364 KPRIORITY Priority;
365 KPRIORITY BasePriority;
366 ULONG ContextSwitchCount;
367 THREAD_STATE State;
368 KWAIT_REASON WaitReason;
9ba913a5 369 DWORD Reserved;
6d87f7d7
CF
370} SYSTEM_THREADS, *PSYSTEM_THREADS;
371
372typedef struct _SYSTEM_PROCESSES
373{
374 ULONG NextEntryDelta;
9ba913a5 375 ULONG ThreadCount;
6d87f7d7
CF
376 ULONG Reserved1[6];
377 LARGE_INTEGER CreateTime;
378 LARGE_INTEGER UserTime;
379 LARGE_INTEGER KernelTime;
380 UNICODE_STRING ProcessName;
381 KPRIORITY BasePriority;
382 ULONG ProcessId;
383 ULONG InheritedFromProcessId;
384 ULONG HandleCount;
385 ULONG Reserved2[2];
386 VM_COUNTERS VmCounters;
387 IO_COUNTERS IoCounters;
388 SYSTEM_THREADS Threads[1];
389} SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
390
99069065
CV
391typedef struct _IO_STATUS_BLOCK
392{
393 NTSTATUS Status;
394 ULONG Information;
395} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
396
9ba913a5
CF
397typedef struct _SYSTEM_PERFORMANCE_INFORMATION
398{
399 LARGE_INTEGER IdleTime;
400 LARGE_INTEGER ReadTransferCount;
401 LARGE_INTEGER WriteTransferCount;
402 LARGE_INTEGER OtherTransferCount;
403 ULONG ReadOperationCount;
404 ULONG WriteOperationCount;
405 ULONG OtherOperationCount;
406 ULONG AvailablePages;
407 ULONG TotalCommittedPages;
408 ULONG TotalCommitLimit;
409 ULONG PeakCommitment;
410 ULONG PageFaults;
411 ULONG WriteCopyFaults;
412 ULONG TransitionFaults;
413 ULONG Reserved1;
414 ULONG DemandZeroFaults;
415 ULONG PagesRead;
416 ULONG PageReadIos;
417 ULONG Reserved2[2];
418 ULONG PagefilePagesWritten;
419 ULONG PagefilePageWriteIos;
420 ULONG MappedFilePagesWritten;
421 ULONG MappedFilePageWriteIos;
422 ULONG PagedPoolUsage;
423 ULONG NonPagedPoolUsage;
424 ULONG PagedPoolAllocs;
425 ULONG PagedPoolFrees;
426 ULONG NonPagedPoolAllocs;
427 ULONG NonPagedPoolFrees;
428 ULONG TotalFreeSystemPtes;
429 ULONG SystemCodePage;
430 ULONG TotalSystemDriverPages;
431 ULONG TotalSystemCodePages;
432 ULONG SmallNonPagedLookasideListAllocateHits;
433 ULONG SmallPagedLookasideListAllocateHits;
434 ULONG Reserved3;
435 ULONG MmSystemCachePage;
436 ULONG PagedPoolPage;
437 ULONG SystemDriverPage;
438 ULONG FastReadNoWait;
439 ULONG FastReadWait;
440 ULONG FastReadResourceMiss;
441 ULONG FastReadNotPossible;
442 ULONG FastMdlReadNoWait;
443 ULONG FastMdlReadWait;
444 ULONG FastMdlReadResourceMiss;
445 ULONG FastMdlReadNotPossible;
446 ULONG MapDataNoWait;
447 ULONG MapDataWait;
448 ULONG MapDataNoWaitMiss;
449 ULONG MapDataWaitMiss;
450 ULONG PinMappedDataCount;
451 ULONG PinReadNoWait;
452 ULONG PinReadWait;
453 ULONG PinReadNoWaitMiss;
454 ULONG PinReadWaitMiss;
455 ULONG CopyReadNoWait;
456 ULONG CopyReadWait;
457 ULONG CopyReadNoWaitMiss;
458 ULONG CopyReadWaitMiss;
459 ULONG MdlReadNoWait;
460 ULONG MdlReadWait;
461 ULONG MdlReadNoWaitMiss;
462 ULONG MdlReadWaitMiss;
463 ULONG ReadAheadIos;
464 ULONG LazyWriteIos;
465 ULONG LazyWritePages;
466 ULONG DataFlushes;
467 ULONG DataPages;
468 ULONG ContextSwitches;
469 ULONG FirstLevelTbFills;
470 ULONG SecondLevelTbFills;
471 ULONG SystemCalls;
472} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
473
91a2f87b 474typedef struct __attribute__ ((aligned(8))) _SYSTEM_TIME_OF_DAY_INFORMATION
9ba913a5
CF
475{
476 LARGE_INTEGER BootTime;
477 LARGE_INTEGER CurrentTime;
478 LARGE_INTEGER TimeZoneBias;
479 ULONG CurrentTimeZoneId;
480} SYSTEM_TIME_OF_DAY_INFORMATION, *PSYSTEM_TIME_OF_DAY_INFORMATION;
481
482typedef enum _PROCESSINFOCLASS
483{
484 ProcessBasicInformation = 0,
485 ProcessQuotaLimits = 1,
486 ProcessVmCounters = 3,
abbde487
CV
487 ProcessTimes = 4,
488 ProcessSessionInformation = 24,
4a42a258 489 ProcessWow64Information = 26
9ba913a5
CF
490} PROCESSINFOCLASS;
491
492typedef struct _DEBUG_BUFFER
493{
494 HANDLE SectionHandle;
495 PVOID SectionBase;
496 PVOID RemoteSectionBase;
497 ULONG SectionBaseDelta;
498 HANDLE EventPairHandle;
499 ULONG Unknown[2];
500 HANDLE RemoteThreadHandle;
501 ULONG InfoClassMask;
502 ULONG SizeOfInfo;
503 ULONG AllocatedSize;
504 ULONG SectionSize;
505 PVOID ModuleInformation;
506 PVOID BackTraceInformation;
507 PVOID HeapInformation;
508 PVOID LockInformation;
509 PVOID Reserved[9];
510} DEBUG_BUFFER, *PDEBUG_BUFFER;
511
512typedef struct _DEBUG_HEAP_INFORMATION
513{
514 ULONG Base;
515 ULONG Flags;
516 USHORT Granularity;
517 USHORT Unknown;
518 ULONG Allocated;
519 ULONG Committed;
520 ULONG TagCount;
521 ULONG BlockCount;
522 ULONG Reserved[7];
523 PVOID Tags;
524 PVOID Blocks;
525} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
526
527typedef struct _DEBUG_MODULE_INFORMATION
528{
529 ULONG Reserved[2];
530 ULONG Base;
531 ULONG Size;
532 ULONG Flags;
533 USHORT Index;
534 USHORT Unknown;
535 USHORT LoadCount;
536 USHORT ModuleNameOffset;
537 CHAR ImageName[256];
538} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
539
540typedef struct _KERNEL_USER_TIMES
541{
542 LARGE_INTEGER CreateTime;
543 LARGE_INTEGER ExitTime;
544 LARGE_INTEGER KernelTime;
545 LARGE_INTEGER UserTime;
546} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
547
cbe2437b
CV
548typedef struct _RTL_USER_PROCESS_PARAMETERS
549{
550 ULONG AllocationSize;
551 ULONG Size;
552 ULONG Flags;
553 ULONG DebugFlags;
554 HANDLE hConsole;
555 ULONG ProcessGroup;
556 HANDLE hStdInput;
557 HANDLE hStdOutput;
558 HANDLE hStdError;
559 UNICODE_STRING CurrentDirectoryName;
560 HANDLE CurrentDirectoryHandle;
561 UNICODE_STRING DllPath;
562 UNICODE_STRING ImagePathName;
563 UNICODE_STRING CommandLine;
564 PWSTR Environment;
565 ULONG dwX;
566 ULONG dwY;
567 ULONG dwXSize;
568 ULONG dwYSize;
569 ULONG dwXCountChars;
570 ULONG dwYCountChars;
571 ULONG dwFillAttribute;
572 ULONG dwFlags;
573 ULONG wShowWindow;
574 UNICODE_STRING WindowTitle;
575 UNICODE_STRING DesktopInfo;
576 UNICODE_STRING ShellInfo;
577 UNICODE_STRING RuntimeInfo;
578} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
579
580typedef struct _PEB
581{
582 BYTE Reserved1[2];
583 BYTE BeingDebugged;
584 BYTE Reserved2[9];
585 PVOID LoaderData;
586 PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
9c154abe
CV
587 BYTE Reserved3[4];
588 PVOID ProcessHeap;
589 PRTL_CRITICAL_SECTION FastPebLock;
590 BYTE Reserved4[436];
cbe2437b
CV
591 ULONG SessionId;
592} PEB, *PPEB;
9ba913a5 593
09ecdc85
CV
594/* Simplifed definition, just to get the PEB pointer. */
595typedef struct _TEB
596{
597 PVOID dummy[12];
598 PPEB Peb;
599 /* A lot more follows... */
600} TEB, *PTEB;
601
9c154abe
CV
602typedef struct _KUSER_SHARED_DATA
603{
604 BYTE Reserved1[0x2dc];
605 ULONG DismountCount;
606 /* A lot more follows... */
607} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
608
9ba913a5
CF
609typedef struct _PROCESS_BASIC_INFORMATION
610{
611 NTSTATUS ExitStatus;
612 PPEB PebBaseAddress;
613 KAFFINITY AffinityMask;
614 KPRIORITY BasePriority;
615 ULONG UniqueProcessId;
616 ULONG InheritedFromUniqueProcessId;
617} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
618
abbde487
CV
619typedef struct _PROCESS_SESSION_INFORMATION
620{
621 ULONG SessionId;
622} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
623
9ba913a5
CF
624typedef enum _MEMORY_INFORMATION_CLASS
625{
626 MemoryBasicInformation,
627 MemoryWorkingSetList,
628 MemorySectionName,
9f0d3f37 629 MemoryBasicVlmInformation
9ba913a5
CF
630} MEMORY_INFORMATION_CLASS;
631
2402700d
CF
632typedef struct _MEMORY_WORKING_SET_LIST
633{
9ba913a5
CF
634 ULONG NumberOfPages;
635 ULONG WorkingSetList[1];
636} MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
637
2a24463d
CV
638typedef struct _FILE_BASIC_INFORMATION {
639 LARGE_INTEGER CreationTime;
640 LARGE_INTEGER LastAccessTime;
641 LARGE_INTEGER LastWriteTime;
642 LARGE_INTEGER ChangeTime;
643 ULONG FileAttributes;
644} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
645
646typedef struct _FILE_STANDARD_INFORMATION {
647 LARGE_INTEGER AllocationSize;
648 LARGE_INTEGER EndOfFile;
649 ULONG NumberOfLinks;
650 BOOLEAN DeletePending;
651 BOOLEAN Directory;
652} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
653
e25b3402
CV
654typedef struct _FILE_NETWORK_OPEN_INFORMATION {
655 LARGE_INTEGER CreationTime;
656 LARGE_INTEGER LastAccessTime;
657 LARGE_INTEGER LastWriteTime;
658 LARGE_INTEGER ChangeTime;
659 LARGE_INTEGER AllocationSize;
660 LARGE_INTEGER EndOfFile;
661 ULONG FileAttributes;
662} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
663
2a24463d 664typedef struct _FILE_INTERNAL_INFORMATION {
9e5f45ed 665 LARGE_INTEGER FileId;
2a24463d
CV
666} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
667
668typedef struct _FILE_EA_INFORMATION {
669 ULONG EaSize;
670} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
671
672typedef struct _FILE_ACCESS_INFORMATION {
673 ACCESS_MASK AccessFlags;
674} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
675
1c9b2968
CV
676typedef struct _FILE_DISPOSITION_INFORMATION {
677 BOOLEAN DeleteFile;
678} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
679
05726ddd
CF
680typedef struct _FILE_POSITION_INFORMATION {
681 LARGE_INTEGER CurrentByteOffset;
682} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
2a24463d 683
7636b585
CV
684typedef struct _FILE_END_OF_FILE_INFORMATION {
685 LARGE_INTEGER EndOfFile;
686} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
687
2a24463d
CV
688typedef struct _FILE_MODE_INFORMATION {
689 ULONG Mode;
690} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
691
692typedef struct _FILE_ALIGNMENT_INFORMATION {
693 ULONG AlignmentRequirement;
694} FILE_ALIGNMENT_INFORMATION;
695
05726ddd
CF
696typedef struct _FILE_NAME_INFORMATION {
697 ULONG FileNameLength;
698 WCHAR FileName[1];
699} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
2a24463d 700
745c29fe
CV
701typedef struct _FILE_LINK_INFORMATION {
702 BOOLEAN ReplaceIfExists;
703 HANDLE RootDirectory;
704 ULONG FileNameLength;
705 WCHAR FileName[1];
706} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
707
cbfb7b1b
CV
708typedef struct _FILE_RENAME_INFORMATION {
709 BOOLEAN ReplaceIfExists;
710 HANDLE RootDirectory;
711 ULONG FileNameLength;
712 WCHAR FileName[1];
713} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
714
2a24463d
CV
715typedef struct _FILE_ALL_INFORMATION {
716 FILE_BASIC_INFORMATION BasicInformation;
717 FILE_STANDARD_INFORMATION StandardInformation;
718 FILE_INTERNAL_INFORMATION InternalInformation;
719 FILE_EA_INFORMATION EaInformation;
720 FILE_ACCESS_INFORMATION AccessInformation;
721 FILE_POSITION_INFORMATION PositionInformation;
722 FILE_MODE_INFORMATION ModeInformation;
723 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
724 FILE_NAME_INFORMATION NameInformation;
725} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
2402700d 726
6644c628
CF
727typedef struct _FILE_PIPE_LOCAL_INFORMATION
728{
729 ULONG NamedPipeType;
730 ULONG NamedPipeConfiguration;
731 ULONG MaximumInstances;
732 ULONG CurrentInstances;
733 ULONG InboundQuota;
734 ULONG ReadDataAvailable;
735 ULONG OutboundQuota;
736 ULONG WriteQuotaAvailable;
737 ULONG NamedPipeState;
738 ULONG NamedPipeEnd;
739} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
740
b8eac1de
CV
741typedef struct _FILE_COMPRESSION_INFORMATION
742{
b75971ef 743 LARGE_INTEGER CompressedFileSize;
b8eac1de
CV
744 USHORT CompressionFormat;
745 UCHAR CompressionUnitShift;
b75971ef
CV
746 UCHAR ChunkShift;
747 UCHAR ClusterShift;
748 UCHAR Reserved[3];
b8eac1de
CV
749} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
750
d3dd7d36
CV
751typedef struct _FILE_FS_DEVICE_INFORMATION
752{
753 ULONG DeviceType;
754 ULONG Characteristics;
755} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
756
3323df7e
CV
757typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
758{
759 ULONG FileSystemAttributes;
760 ULONG MaximumComponentNameLength;
761 ULONG FileSystemNameLength;
762 WCHAR FileSystemName[1];
763} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
764
f65c5a0a 765#pragma pack(push,4)
2a24463d
CV
766typedef struct _FILE_FS_VOLUME_INFORMATION
767{
768 LARGE_INTEGER VolumeCreationTime;
769 ULONG VolumeSerialNumber;
770 ULONG VolumeLabelLength;
771 BOOLEAN SupportsObjects;
f65c5a0a 772 BOOLEAN __dummy;
2a24463d
CV
773 WCHAR VolumeLabel[1];
774} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
f65c5a0a 775#pragma pack(pop)
2a24463d 776
3ff1a063 777typedef struct _FILE_FS_SIZE_INFORMATION
2a24463d 778{
3ff1a063
CV
779 LARGE_INTEGER TotalAllocationUnits;
780 LARGE_INTEGER AvailableAllocationUnits;
781 ULONG SectorsPerAllocationUnit;
782 ULONG BytesPerSector;
783} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
784
3323df7e
CV
785typedef struct _FILE_FS_FULL_SIZE_INFORMATION
786{
787 LARGE_INTEGER TotalAllocationUnits;
788 LARGE_INTEGER CallerAvailableAllocationUnits;
789 LARGE_INTEGER ActualAvailableAllocationUnits;
790 ULONG SectorsPerAllocationUnit;
791 ULONG BytesPerSector;
792} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
793
4a96b0aa
CV
794typedef struct _FILE_FS_OBJECTID_INFORMATION {
795 UCHAR ObjectId[16];
796 UCHAR ExtendedInfo[48];
797} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
798
3ff1a063
CV
799typedef enum _FSINFOCLASS {
800 FileFsVolumeInformation = 1,
801 FileFsLabelInformation,
802 FileFsSizeInformation,
803 FileFsDeviceInformation,
804 FileFsAttributeInformation,
805 FileFsControlInformation,
806 FileFsFullSizeInformation,
807 FileFsObjectIdInformation,
808 FileFsDriverPathInformation,
809 FileFsMaximumInformation
2a24463d
CV
810} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
811
2402700d
CF
812typedef enum _OBJECT_INFORMATION_CLASS
813{
b8eac1de
CV
814 ObjectBasicInformation = 0,
815 ObjectNameInformation = 1,
816 ObjectHandleInformation = 4
2402700d
CF
817 // and many more
818} OBJECT_INFORMATION_CLASS;
819
a998dd70
CV
820typedef struct _OBJECT_BASIC_INFORMATION
821{
822 ULONG Attributes;
823 ACCESS_MASK GrantedAccess;
824 ULONG HandleCount;
825 ULONG PointerCount;
826 ULONG PagedPoolUsage;
827 ULONG NonPagedPoolUsage;
828 ULONG Reserved[3];
829 ULONG NameInformationLength;
830 ULONG TypeInformationLength;
831 ULONG SecurityDescriptorLength;
832 LARGE_INTEGER CreateTime;
833} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
834
2402700d
CF
835typedef struct _OBJECT_NAME_INFORMATION
836{
837 UNICODE_STRING Name;
838} OBJECT_NAME_INFORMATION;
839
e9c8cb31
CV
840typedef struct _DIRECTORY_BASIC_INFORMATION
841{
842 UNICODE_STRING ObjectName;
843 UNICODE_STRING ObjectTypeName;
844} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
845
4635b6eb
CV
846typedef struct _FILE_GET_EA_INFORMATION
847{
848 ULONG NextEntryOffset;
849 UCHAR EaNameLength;
850 CHAR EaName[1];
851} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
852
4635b6eb
CV
853typedef struct _FILE_FULL_EA_INFORMATION
854{
855 ULONG NextEntryOffset;
856 UCHAR Flags;
857 UCHAR EaNameLength;
858 USHORT EaValueLength;
859 CHAR EaName[1];
860} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
861
19afaa1a
CV
862typedef struct _FILE_MAILSLOT_SET_INFORMATION
863{
864 LARGE_INTEGER ReadTimeout;
865} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
866
61c44b72
CV
867typedef VOID NTAPI (*PIO_APC_ROUTINE)(PVOID, PIO_STATUS_BLOCK, ULONG);
868
a998dd70
CV
869typedef enum _EVENT_TYPE
870{
871 NotificationEvent = 0,
872 SynchronizationEvent
873} EVENT_TYPE, *PEVENT_TYPE;
874
636c94d8
CV
875typedef struct _EVENT_BASIC_INFORMATION
876{
877 EVENT_TYPE EventType;
878 LONG SignalState;
879} EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
880
881typedef enum _EVENT_INFORMATION_CLASS
882{
883 EventBasicInformation = 0
884} EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;
885
6d87f7d7
CF
886/* Function declarations for ntdll.dll. These don't appear in any
887 standard Win32 header. */
f16706de
CV
888
889#define NtCurrentProcess() ((HANDLE) 0xffffffff)
890#define NtCurrentThread() ((HANDLE) 0xfffffffe)
891
6d87f7d7
CF
892extern "C"
893{
cce28460
CV
894 NTSTATUS NTAPI NtAdjustPrivilegesToken (HANDLE, BOOLEAN, PTOKEN_PRIVILEGES,
895 ULONG, PTOKEN_PRIVILEGES, PULONG);
e9c8cb31 896 NTSTATUS NTAPI NtClose (HANDLE);
4c153b24 897 NTSTATUS NTAPI NtCommitTransaction (HANDLE, BOOLEAN);
a998dd70
CV
898 NTSTATUS NTAPI NtCreateDirectoryObject (PHANDLE, ACCESS_MASK,
899 POBJECT_ATTRIBUTES);
900 NTSTATUS NTAPI NtCreateEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
025c1fac 901 EVENT_TYPE, BOOLEAN);
e8597065
CV
902 NTSTATUS NTAPI NtCreateFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
903 PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG,
904 ULONG, ULONG, PVOID, ULONG);
19afaa1a
CV
905 NTSTATUS NTAPI NtCreateMailslotFile(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
906 PIO_STATUS_BLOCK, ULONG, ULONG, ULONG,
907 PLARGE_INTEGER);
a998dd70
CV
908 NTSTATUS NTAPI NtCreateMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
909 BOOLEAN);
f90e23f2 910 NTSTATUS NTAPI NtCreateSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
70300fdb 911 PLARGE_INTEGER, ULONG, ULONG, HANDLE);
abbde487
CV
912 NTSTATUS NTAPI NtCreateSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
913 LONG, LONG);
1fcc912f 914 NTSTATUS NTAPI NtCreateToken (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1ff9f4b9
CF
915 TOKEN_TYPE, PLUID, PLARGE_INTEGER, PTOKEN_USER,
916 PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_OWNER,
917 PTOKEN_PRIMARY_GROUP, PTOKEN_DEFAULT_DACL,
918 PTOKEN_SOURCE);
4c153b24
CV
919 NTSTATUS NTAPI NtCreateTransaction (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
920 LPGUID, HANDLE, ULONG, ULONG, ULONG,
921 PLARGE_INTEGER, PUNICODE_STRING);
61c44b72 922 NTSTATUS NTAPI NtFsControlFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
214c3a11
CV
923 PIO_STATUS_BLOCK, ULONG, PVOID, ULONG,
924 PVOID, ULONG);
1f5c3042 925 NTSTATUS NTAPI NtLockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG);
6d87f7d7
CF
926 NTSTATUS NTAPI NtMapViewOfSection (HANDLE, HANDLE, PVOID *, ULONG, ULONG,
927 PLARGE_INTEGER, PULONG, SECTION_INHERIT,
928 ULONG, ULONG);
1b61bf15 929 NTSTATUS NTAPI NtNotifyChangeDirectoryFile (HANDLE, HANDLE, PIO_APC_ROUTINE,
70300fdb 930 PVOID, PIO_STATUS_BLOCK,
1b61bf15
CV
931 PFILE_NOTIFY_INFORMATION, ULONG,
932 ULONG, BOOLEAN);
e9c8cb31 933 NTSTATUS NTAPI NtOpenDirectoryObject (PHANDLE, ACCESS_MASK,
70300fdb 934 POBJECT_ATTRIBUTES);
a998dd70 935 NTSTATUS NTAPI NtOpenEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
99069065
CV
936 NTSTATUS NTAPI NtOpenFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
937 PIO_STATUS_BLOCK, ULONG, ULONG);
a998dd70 938 NTSTATUS NTAPI NtOpenMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
1fcc912f 939 NTSTATUS NTAPI NtOpenSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
abbde487 940 NTSTATUS NTAPI NtOpenSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
43f65cdd
CV
941 NTSTATUS NTAPI NtOpenSymbolicLinkObject (PHANDLE, ACCESS_MASK,
942 POBJECT_ATTRIBUTES);
1b61bf15
CV
943 /* WARNING! Don't rely on the timestamp information returned by
944 NtQueryAttributesFile. Only the DOS file attribute info is reliable. */
945 NTSTATUS NTAPI NtQueryAttributesFile (POBJECT_ATTRIBUTES,
946 PFILE_BASIC_INFORMATION);
e9c8cb31
CV
947 NTSTATUS NTAPI NtQueryDirectoryFile(HANDLE, HANDLE, PVOID, PVOID,
948 PIO_STATUS_BLOCK, PVOID, ULONG,
949 FILE_INFORMATION_CLASS, BOOLEAN,
950 PUNICODE_STRING, BOOLEAN);
951 NTSTATUS NTAPI NtQueryDirectoryObject (HANDLE, PVOID, ULONG, BOOLEAN,
70300fdb 952 BOOLEAN, PULONG, PULONG);
4635b6eb
CV
953 NTSTATUS NTAPI NtQueryEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
954 BOOLEAN, PVOID, ULONG, PULONG, BOOLEAN);
636c94d8
CV
955 NTSTATUS NTAPI NtQueryEvent (HANDLE, EVENT_INFORMATION_CLASS, PVOID, ULONG,
956 PULONG);
e25b3402
CV
957 NTSTATUS NTAPI NtQueryFullAttributesFile (POBJECT_ATTRIBUTES,
958 PFILE_NETWORK_OPEN_INFORMATION);
2a24463d 959 NTSTATUS NTAPI NtQueryInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID,
6644c628 960 ULONG, FILE_INFORMATION_CLASS);
d74eced5 961 NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS,
a113a3c5 962 PVOID, ULONG, PULONG);
d74eced5 963 NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, VOID *,
a113a3c5 964 ULONG, ULONG *);
6d87f7d7
CF
965 NTSTATUS NTAPI NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS,
966 PVOID, ULONG, PULONG);
cef5dfd7
CF
967
968 NTSTATUS WINAPI NtQuerySystemTime (PLARGE_INTEGER);
969
71ffba49 970 NTSTATUS NTAPI NtQuerySecurityObject (HANDLE, SECURITY_INFORMATION,
70300fdb 971 PSECURITY_DESCRIPTOR, ULONG, PULONG);
43f65cdd 972 NTSTATUS NTAPI NtQuerySymbolicLinkObject (HANDLE, PUNICODE_STRING, PULONG);
d74eced5 973 NTSTATUS NTAPI NtQueryVirtualMemory (HANDLE, PVOID, MEMORY_INFORMATION_CLASS,
a113a3c5 974 PVOID, ULONG, PULONG);
2a24463d
CV
975 NTSTATUS NTAPI NtQueryVolumeInformationFile (HANDLE, IO_STATUS_BLOCK *,
976 VOID *, ULONG,
977 FS_INFORMATION_CLASS);
d85bcb45
CV
978 NTSTATUS NTAPI NtReadFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
979 PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER,
980 PULONG);
4c153b24 981 NTSTATUS NTAPI NtRollbackTransaction (HANDLE, BOOLEAN);
4635b6eb 982 NTSTATUS NTAPI NtSetEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG);
7636b585
CV
983 NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
984 FILE_INFORMATION_CLASS);
f4ae6dc6
CV
985 NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION,
986 PSECURITY_DESCRIPTOR);
1f5c3042 987 NTSTATUS NTAPI NtUnlockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG);
6d87f7d7 988 NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID);
61c44b72
CV
989 NTSTATUS NTAPI NtWriteFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
990 PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER,
991 PULONG);
9c154abe
CV
992 VOID NTAPI RtlAcquirePebLock ();
993 PVOID NTAPI RtlAllocateHeap (PVOID, ULONG, SIZE_T);
214c3a11
CV
994 NTSTATUS NTAPI RtlAppendUnicodeToString (PUNICODE_STRING, PCWSTR);
995 NTSTATUS NTAPI RtlAppendUnicodeStringToString (PUNICODE_STRING,
996 PUNICODE_STRING);
cbe2437b
CV
997 NTSTATUS NTAPI RtlAnsiStringToUnicodeString (PUNICODE_STRING, PANSI_STRING,
998 BOOLEAN);
214c3a11
CV
999 LONG NTAPI RtlCompareUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1000 BOOLEAN);
7d5f6c18 1001 NTSTATUS NTAPI RtlConvertSidToUnicodeString (PUNICODE_STRING, PSID, BOOLEAN);
214c3a11 1002 VOID NTAPI RtlCopyUnicodeString (PUNICODE_STRING, PUNICODE_STRING);
855e63eb 1003 BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING, PCSTR);
1feea0bf
CV
1004 NTSTATUS NTAPI RtlDowncaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1005 BOOLEAN);
9c154abe 1006 NTSTATUS NTAPI RtlEnterCriticalSection (PRTL_CRITICAL_SECTION);
214c3a11
CV
1007 BOOLEAN NTAPI RtlEqualUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1008 BOOLEAN);
8b5fa210 1009 VOID NTAPI RtlFreeAnsiString (PANSI_STRING);
9c154abe 1010 BOOLEAN NTAPI RtlFreeHeap (PVOID, ULONG, PVOID);
8b5fa210 1011 VOID NTAPI RtlFreeOemString (POEM_STRING);
214c3a11 1012 VOID NTAPI RtlFreeUnicodeString (PUNICODE_STRING);
4c153b24 1013 HANDLE NTAPI RtlGetCurrentTransaction ();
214c3a11 1014 VOID NTAPI RtlInitEmptyUnicodeString (PUNICODE_STRING, PCWSTR, USHORT);
6d87f7d7 1015 VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR);
7d5f6c18 1016 NTSTATUS NTAPI RtlIntegerToUnicodeString (ULONG, ULONG, PUNICODE_STRING);
e9c8cb31 1017 ULONG NTAPI RtlIsDosDeviceName_U (PCWSTR);
9c154abe 1018 NTSTATUS NTAPI RtlLeaveCriticalSection (PRTL_CRITICAL_SECTION);
6d87f7d7 1019 ULONG NTAPI RtlNtStatusToDosError (NTSTATUS);
cbe2437b
CV
1020 NTSTATUS NTAPI RtlOemStringToUnicodeString (PUNICODE_STRING, POEM_STRING,
1021 BOOLEAN);
9235f3ea
CV
1022 BOOLEAN NTAPI RtlPrefixUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1023 BOOLEAN);
dec9daad 1024 VOID NTAPI RtlReleasePebLock ();
214c3a11 1025 VOID NTAPI RtlSecondsSince1970ToTime (ULONG, PLARGE_INTEGER);
1121c57f 1026 NTSTATUS NTAPI RtlSetCurrentDirectory_U (PUNICODE_STRING);
4c153b24 1027 BOOLEAN NTAPI RtlSetCurrentTransaction (HANDLE);
8b5fa210
CV
1028 NTSTATUS NTAPI RtlUnicodeStringToAnsiString (PANSI_STRING, PUNICODE_STRING,
1029 BOOLEAN);
1030 NTSTATUS NTAPI RtlUnicodeStringToOemString (PANSI_STRING, PUNICODE_STRING,
1031 BOOLEAN);
855e63eb 1032 WCHAR NTAPI RtlUpcaseUnicodeChar (WCHAR);
1feea0bf
CV
1033 NTSTATUS NTAPI RtlUpcaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1034 BOOLEAN);
214c3a11
CV
1035
1036 /* A few Rtl functions are either actually macros, or they just don't
61c44b72
CV
1037 exist even though they would be a big help. We implement them here,
1038 partly as inline functions. */
1039
1040 /* RtlInitEmptyUnicodeString is defined as a macro in wdm.h, but that file
1041 is missing entirely in w32api. */
214c3a11
CV
1042 inline
1043 VOID NTAPI RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf,
1044 USHORT len)
1045 {
1046 dest->Length = 0;
1047 dest->MaximumLength = len;
1048 dest->Buffer = (PWSTR) buf;
1049 }
61c44b72
CV
1050 /* Like RtlInitEmptyUnicodeString, but initialize Length to len, too.
1051 This is for instance useful when creating a UNICODE_STRING from an
1052 NtQueryInformationFile info buffer, where the length of the filename
1053 is known, but you can't rely on the string being 0-terminated.
1054 If you know it's 0-terminated, just use RtlInitUnicodeString(). */
214c3a11 1055 inline
74c5e8c7 1056 VOID NTAPI RtlInitCountedUnicodeString (PUNICODE_STRING dest, PCWSTR buf,
70300fdb 1057 USHORT len)
214c3a11
CV
1058 {
1059 dest->Length = dest->MaximumLength = len;
1060 dest->Buffer = (PWSTR) buf;
1061 }
61c44b72
CV
1062 /* Split path into dirname and basename part. This function does not
1063 copy anything! It just initializes the dirname and basename
1064 UNICODE_STRINGs so that their Buffer members point to the right spot
70300fdb 1065 into path's Buffer, and the Length (and MaximumLength) members are set
61c44b72
CV
1066 to match the dirname part and the basename part.
1067 Note that dirname's Length is set so that it also includes the trailing
1068 backslash. If you don't need it, just subtract sizeof(WCHAR) from
1069 dirname.Length. */
ceaf31f4 1070 inline
61c44b72
CV
1071 VOID NTAPI RtlSplitUnicodePath (PUNICODE_STRING path, PUNICODE_STRING dirname,
1072 PUNICODE_STRING basename)
ceaf31f4
CV
1073 {
1074 USHORT len = path->Length / sizeof (WCHAR);
1075 while (len > 0 && path->Buffer[--len] != L'\\')
1076 ;
1077 ++len;
61c44b72
CV
1078 if (dirname)
1079 RtlInitCountedUnicodeString (dirname, path->Buffer, len * sizeof (WCHAR));
1080 if (basename)
1081 RtlInitCountedUnicodeString (basename, &path->Buffer[len],
74c5e8c7
CV
1082 path->Length - len * sizeof (WCHAR));
1083 }
61c44b72 1084 /* Check if prefix is a prefix of path. */
74c5e8c7 1085 inline
8deb4118
CV
1086 BOOLEAN NTAPI RtlEqualUnicodePathPrefix (PUNICODE_STRING path,
1087 PUNICODE_STRING prefix,
81e98baf 1088 BOOLEAN caseinsensitive)
74c5e8c7 1089 {
8deb4118 1090 UNICODE_STRING p;
74c5e8c7 1091
74c5e8c7 1092 RtlInitCountedUnicodeString (&p, path->Buffer,
8deb4118
CV
1093 prefix->Length < path->Length
1094 ? prefix->Length : path->Length);
1095 return RtlEqualUnicodeString (&p, prefix, caseinsensitive);
74c5e8c7 1096 }
61c44b72 1097 /* Check if sufffix is a sufffix of path. */
74c5e8c7 1098 inline
8deb4118
CV
1099 BOOL NTAPI RtlEqualUnicodePathSuffix (PUNICODE_STRING path,
1100 PUNICODE_STRING suffix,
81e98baf 1101 BOOLEAN caseinsensitive)
74c5e8c7 1102 {
8deb4118 1103 UNICODE_STRING p;
74c5e8c7 1104
8deb4118 1105 if (suffix->Length < path->Length)
74c5e8c7 1106 RtlInitCountedUnicodeString (&p, (PWCHAR) ((PBYTE) path->Buffer
8deb4118
CV
1107 + path->Length - suffix->Length),
1108 suffix->Length);
74c5e8c7
CV
1109 else
1110 RtlInitCountedUnicodeString (&p, path->Buffer, path->Length);
8deb4118 1111 return RtlEqualUnicodeString (&p, suffix, caseinsensitive);
ceaf31f4 1112 }
61c44b72
CV
1113 /* Implemented in strfuncs.cc. Create a Hex UNICODE_STRING from a given
1114 64 bit integer value. If append is TRUE, append the hex string,
1feea0bf 1115 otherwise overwrite dest. Returns either STATUS_SUCCESS, or
61c44b72
CV
1116 STATUS_BUFFER_OVERFLOW, if the unicode buffer is too small (hasn't
1117 room for 16 WCHARs). */
1118 NTSTATUS NTAPI RtlInt64ToHexUnicodeString (ULONGLONG value,
1119 PUNICODE_STRING dest,
1120 BOOLEAN append);
669bdeb8
CV
1121 /* Set file attributes. Don't change file times. */
1122 inline
1123 NTSTATUS NTAPI NtSetAttributesFile (HANDLE h, ULONG attr)
1124 {
1125 IO_STATUS_BLOCK io;
1126 FILE_BASIC_INFORMATION fbi;
1127 fbi.CreationTime.QuadPart = fbi.LastAccessTime.QuadPart =
1128 fbi.LastWriteTime.QuadPart = fbi.ChangeTime.QuadPart = 0LL;
1129 fbi.FileAttributes = attr ?: FILE_ATTRIBUTE_NORMAL;
1130 return NtSetInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation);
1131 }
6d87f7d7 1132}
cef5dfd7 1133#endif /*_NTDLL_H*/
This page took 0.468651 seconds and 5 git commands to generate.