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