]> sourceware.org Git - newlib-cygwin.git/blame - winsup/cygwin/ntdll.h
Throughout, update copyrights to reflect dates which correspond to main-branch
[newlib-cygwin.git] / winsup / cygwin / ntdll.h
CommitLineData
f5c1d231 1/* ntdll.h. Contains ntdll specific stuff not defined elsewhere.
8c8d0db4 2
bc837d22
CF
3 Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
4 2011, 2012 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
962f9a2c 12#pragma once
8912b2e5 13
5ab123f4
CV
14#include <ntstatus.h>
15
dc4e4aab
CW
16/* custom status code: */
17#define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269)
93d606f6 18
8912b2e5
CV
19#define NtCurrentProcess() ((HANDLE) 0xffffffff)
20#define NtCurrentThread() ((HANDLE) 0xfffffffe)
9ba913a5 21
06e429fd 22/* Creation information returned in IO_STATUS_BLOCK. */
61c44b72
CV
23#define FILE_SUPERSEDED 0
24#define FILE_OPENED 1
25#define FILE_CREATED 2
26#define FILE_OVERWRITTEN 3
27#define FILE_EXISTS 4
28#define FILE_DOES_NOT_EXIST 5
29
8912b2e5 30/* Relative file position values in NtWriteFile call. */
6ce2c241
CV
31#define FILE_WRITE_TO_END_OF_FILE (-1LL)
32#define FILE_USE_FILE_POINTER_POSITION (-2LL)
33
d3dd7d36
CV
34/* Device Characteristics. */
35#define FILE_REMOVABLE_MEDIA 0x00000001
36#define FILE_READ_ONLY_DEVICE 0x00000002
37#define FILE_FLOPPY_DISKETTE 0x00000004
38#define FILE_WRITE_ONCE_MEDIA 0x00000008
39#define FILE_REMOTE_DEVICE 0x00000010
40#define FILE_DEVICE_IS_MOUNTED 0x00000020
41#define FILE_VIRTUAL_VOLUME 0x00000040
42#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
43#define FILE_DEVICE_SECURE_OPEN 0x00000100
44
8912b2e5
CV
45/* Allocation type values in NtMapViewOfSection call. */
46#define AT_EXTENDABLE_FILE 0x00002000
47#define AT_ROUND_TO_PAGE 0x40000000
48
49/* Lock type in NtLockVirtualMemory/NtUnlockVirtualMemory call. */
50#define MAP_PROCESS 1
51#define MAP_SYSTEM 2
52
53/* Directory access rights (only in NT namespace). */
54#define DIRECTORY_QUERY 1
55#define DIRECTORY_TRAVERSE 2
56#define DIRECTORY_CREATE_OBJECT 4
57#define DIRECTORY_CREATE_SUBDIRECTORY 8
58#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x0f)
59
60/* Symbolic link access rights (only in NT namespace). */
61#define SYMBOLIC_LINK_QUERY 1
62
4c153b24
CV
63/* Transaction access rights. */
64#define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x3F)
65
8912b2e5
CV
66/* Event object access rights. */
67#define EVENT_QUERY_STATE 1
68
69/* Semaphore access rights. */
70#define SEMAPHORE_QUERY_STATE 1
71
72/* Specific ACCESS_MASKSs for objects created in Cygwin. */
73#define CYG_SHARED_DIR_ACCESS (DIRECTORY_QUERY \
74 | DIRECTORY_TRAVERSE \
75 | DIRECTORY_CREATE_SUBDIRECTORY \
76 | DIRECTORY_CREATE_OBJECT \
77 | READ_CONTROL)
78#define CYG_MUTANT_ACCESS (MUTANT_QUERY_STATE \
79 | SYNCHRONIZE \
80 | READ_CONTROL)
81#define CYG_EVENT_ACCESS (EVENT_QUERY_STATE \
82 | EVENT_MODIFY_STATE \
83 | SYNCHRONIZE \
84 | READ_CONTROL)
85#define CYG_SEMAPHORE_ACCESS (SEMAPHORE_QUERY_STATE \
86 | SEMAPHORE_MODIFY_STATE \
87 | SYNCHRONIZE \
88 | READ_CONTROL)
89
90/* Definitions for first parameter of RtlQueryRegistryValues. */
91#define RTL_REGISTRY_ABSOLUTE 0
92#define RTL_REGISTRY_SERVICES 1
93#define RTL_REGISTRY_CONTROL 2
94#define RTL_REGISTRY_WINDOWS_NT 3
95#define RTL_REGISTRY_DEVICEMAP 4
96#define RTL_REGISTRY_USER 5
97#define RTL_REGISTRY_HANDLE 0x40000000
98#define RTL_REGISTRY_OPTIONAL 0x80000000
99
100/* Flags values for QueryTable parameter of RtlQueryRegistryValues. */
101#define RTL_QUERY_REGISTRY_SUBKEY 0x01
102#define RTL_QUERY_REGISTRY_TOPKEY 0x02
103#define RTL_QUERY_REGISTRY_REQUIRED 0x04
104#define RTL_QUERY_REGISTRY_NOVALUE 0x08
105#define RTL_QUERY_REGISTRY_NOEXPAND 0x10
106#define RTL_QUERY_REGISTRY_DIRECT 0x20
107#define RTL_QUERY_REGISTRY_DELETE 0x40
108#define RTL_QUERY_REGISTRY_NOSTRING 0x80
109
110/* What RtlQueryProcessDebugInformation shall return. */
111#define PDI_MODULES 0x01
112#define PDI_HEAPS 0x04
113#define PDI_HEAP_BLOCKS 0x10
114
115/* VM working set list protection values. Returned by NtQueryVirtualMemory. */
116#define WSLE_PAGE_READONLY 0x001
117#define WSLE_PAGE_EXECUTE 0x002
118#define WSLE_PAGE_EXECUTE_READ 0x003
119#define WSLE_PAGE_READWRITE 0x004
120#define WSLE_PAGE_WRITECOPY 0x005
121#define WSLE_PAGE_EXECUTE_READWRITE 0x006
122#define WSLE_PAGE_EXECUTE_WRITECOPY 0x007
123#define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0
124#define WSLE_PAGE_SHAREABLE 0x100
125
126/* Known debug heap flags */
127#define HEAP_FLAG_NOSERIALIZE 0x1
128#define HEAP_FLAG_GROWABLE 0x2
129#define HEAP_FLAG_EXCEPTIONS 0x4
130#define HEAP_FLAG_NONDEFAULT 0x1000
131#define HEAP_FLAG_SHAREABLE 0x8000
132#define HEAP_FLAG_EXECUTABLE 0x40000
133#define HEAP_FLAG_DEBUGGED 0x40000000
134
135/* IOCTL code to impersonate client of named pipe. */
136#define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, \
137 METHOD_BUFFERED, FILE_ANY_ACCESS)
138
742e27be
CF
139typedef enum _FILE_INFORMATION_CLASS
140{
141 FileDirectoryInformation = 1,
142 FileFullDirectoryInformation, // 2
143 FileBothDirectoryInformation, // 3
144 FileBasicInformation, // 4 wdm
145 FileStandardInformation, // 5 wdm
146 FileInternalInformation, // 6
147 FileEaInformation, // 7
148 FileAccessInformation, // 8
149 FileNameInformation, // 9
150 FileRenameInformation, // 10
151 FileLinkInformation, // 11
152 FileNamesInformation, // 12
153 FileDispositionInformation, // 13
154 FilePositionInformation, // 14 wdm
155 FileFullEaInformation, // 15
156 FileModeInformation, // 16
157 FileAlignmentInformation, // 17
158 FileAllInformation, // 18
159 FileAllocationInformation, // 19
160 FileEndOfFileInformation, // 20 wdm
161 FileAlternateNameInformation, // 21
162 FileStreamInformation, // 22
163 FilePipeInformation, // 23
164 FilePipeLocalInformation, // 24
165 FilePipeRemoteInformation, // 25
166 FileMailslotQueryInformation, // 26
167 FileMailslotSetInformation, // 27
168 FileCompressionInformation, // 28
169 FileObjectIdInformation, // 29
170 FileCompletionInformation, // 30
171 FileMoveClusterInformation, // 31
172 FileQuotaInformation, // 32
173 FileReparsePointInformation, // 33
174 FileNetworkOpenInformation, // 34
175 FileAttributeTagInformation, // 35
176 FileTrackingInformation, // 36
177 FileIdBothDirectoryInformation, // 37
178 FileIdFullDirectoryInformation, // 38
179 FileValidDataLengthInformation, // 39
180 FileShortNameInformation, // 40
181 FileMaximumInformation
182} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
183
788e7da1
CV
184typedef struct _FILE_NAMES_INFORMATION
185{
186 ULONG NextEntryOffset;
187 ULONG FileIndex;
188 ULONG FileNameLength;
189 WCHAR FileName[1];
190} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
191
214c3a11
CV
192typedef struct _FILE_DIRECTORY_INFORMATION {
193 ULONG NextEntryOffset;
194 ULONG FileIndex;
195 LARGE_INTEGER CreationTime;
196 LARGE_INTEGER LastAccessTime;
197 LARGE_INTEGER LastWriteTime;
198 LARGE_INTEGER ChangeTime;
199 LARGE_INTEGER EndOfFile;
200 LARGE_INTEGER AllocationSize;
201 ULONG FileAttributes;
202 ULONG FileNameLength;
203 WCHAR FileName[1];
204} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
205
3432d6f1 206typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
742e27be
CF
207{
208 ULONG NextEntryOffset;
209 ULONG FileIndex;
210 LARGE_INTEGER CreationTime;
211 LARGE_INTEGER LastAccessTime;
212 LARGE_INTEGER LastWriteTime;
213 LARGE_INTEGER ChangeTime;
214 LARGE_INTEGER EndOfFile;
215 LARGE_INTEGER AllocationSize;
216 ULONG FileAttributes;
217 ULONG FileNameLength;
218 ULONG EaSize;
219 CCHAR ShortNameLength;
220 WCHAR ShortName[12];
221 WCHAR FileName[1];
3432d6f1 222} FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION;
742e27be
CF
223
224typedef struct _FILE_ID_BOTH_DIR_INFORMATION
225{
226 ULONG NextEntryOffset;
227 ULONG FileIndex;
228 LARGE_INTEGER CreationTime;
229 LARGE_INTEGER LastAccessTime;
230 LARGE_INTEGER LastWriteTime;
231 LARGE_INTEGER ChangeTime;
232 LARGE_INTEGER EndOfFile;
233 LARGE_INTEGER AllocationSize;
234 ULONG FileAttributes;
235 ULONG FileNameLength;
236 ULONG EaSize;
237 CCHAR ShortNameLength;
238 WCHAR ShortName[12];
239 LARGE_INTEGER FileId;
240 WCHAR FileName[1];
241} FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
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,
44d2fc0a 252 SystemHandleInformation = 16,
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,
6f94526c
CV
490 ProcessWow64Information = 26,
491 ProcessImageFileName = 27
9ba913a5
CF
492} PROCESSINFOCLASS;
493
494typedef struct _DEBUG_BUFFER
495{
496 HANDLE SectionHandle;
497 PVOID SectionBase;
498 PVOID RemoteSectionBase;
499 ULONG SectionBaseDelta;
500 HANDLE EventPairHandle;
501 ULONG Unknown[2];
502 HANDLE RemoteThreadHandle;
503 ULONG InfoClassMask;
504 ULONG SizeOfInfo;
505 ULONG AllocatedSize;
506 ULONG SectionSize;
507 PVOID ModuleInformation;
508 PVOID BackTraceInformation;
509 PVOID HeapInformation;
510 PVOID LockInformation;
511 PVOID Reserved[9];
512} DEBUG_BUFFER, *PDEBUG_BUFFER;
513
514typedef struct _DEBUG_HEAP_INFORMATION
515{
516 ULONG Base;
517 ULONG Flags;
518 USHORT Granularity;
519 USHORT Unknown;
520 ULONG Allocated;
521 ULONG Committed;
522 ULONG TagCount;
523 ULONG BlockCount;
524 ULONG Reserved[7];
525 PVOID Tags;
526 PVOID Blocks;
527} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
528
b4966f91
CV
529typedef struct _DEBUG_HEAP_ARRAY
530{
531 ULONG Count;
532 DEBUG_HEAP_INFORMATION Heaps[1];
533} DEBUG_HEAP_ARRAY, *PDEBUG_HEAP_ARRAY;
534
535typedef struct _DEBUG_HEAP_BLOCK
536{
537 ULONG Size;
538 ULONG Flags;
539 ULONG Committed;
540 ULONG Address;
541} DEBUG_HEAP_BLOCK, *PDEBUG_HEAP_BLOCK;
542
9ba913a5
CF
543typedef struct _DEBUG_MODULE_INFORMATION
544{
545 ULONG Reserved[2];
546 ULONG Base;
547 ULONG Size;
548 ULONG Flags;
549 USHORT Index;
550 USHORT Unknown;
551 USHORT LoadCount;
552 USHORT ModuleNameOffset;
553 CHAR ImageName[256];
554} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
555
31ddf45d
CV
556typedef struct _DEBUG_MODULE_ARRAY
557{
558 ULONG Count;
559 DEBUG_MODULE_INFORMATION Modules[1];
560} DEBUG_MODULE_ARRAY, *PDEBUG_MODULE_ARRAY;
561
9ba913a5
CF
562typedef struct _KERNEL_USER_TIMES
563{
564 LARGE_INTEGER CreateTime;
565 LARGE_INTEGER ExitTime;
566 LARGE_INTEGER KernelTime;
567 LARGE_INTEGER UserTime;
568} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
569
833db548
CV
570typedef struct _LDR_DATA_TABLE_ENTRY
571{
572 LIST_ENTRY InLoadOrderLinks;
573 LIST_ENTRY InMemoryOrderLinks;
574 LIST_ENTRY InInitializationOrderLinks;
575 PVOID DllBase;
576 PVOID EntryPoint;
577 ULONG SizeOfImage;
578 UNICODE_STRING FullDllName;
579 UNICODE_STRING BaseDllName;
580 ULONG Flags;
581 WORD LoadCount;
582 /* More follows. Left out since it's just not used. The aforementioned
583 part of the structure is stable from at least NT4 up to Windows 7,
584 including WOW64. */
585} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
586
587typedef struct _PEB_LDR_DATA
588{
589 ULONG Length;
590 UCHAR Initialized;
591 PVOID SsHandle;
592 LIST_ENTRY InLoadOrderModuleList;
593 LIST_ENTRY InMemoryOrderModuleList;
594 LIST_ENTRY InInitializationOrderModuleList;
595 PVOID EntryInProgress;
596} PEB_LDR_DATA, *PPEB_LDR_DATA;
597
cbe2437b
CV
598typedef struct _RTL_USER_PROCESS_PARAMETERS
599{
600 ULONG AllocationSize;
601 ULONG Size;
602 ULONG Flags;
603 ULONG DebugFlags;
604 HANDLE hConsole;
605 ULONG ProcessGroup;
606 HANDLE hStdInput;
607 HANDLE hStdOutput;
608 HANDLE hStdError;
609 UNICODE_STRING CurrentDirectoryName;
610 HANDLE CurrentDirectoryHandle;
611 UNICODE_STRING DllPath;
612 UNICODE_STRING ImagePathName;
613 UNICODE_STRING CommandLine;
614 PWSTR Environment;
615 ULONG dwX;
616 ULONG dwY;
617 ULONG dwXSize;
618 ULONG dwYSize;
619 ULONG dwXCountChars;
620 ULONG dwYCountChars;
621 ULONG dwFillAttribute;
622 ULONG dwFlags;
623 ULONG wShowWindow;
624 UNICODE_STRING WindowTitle;
625 UNICODE_STRING DesktopInfo;
626 UNICODE_STRING ShellInfo;
627 UNICODE_STRING RuntimeInfo;
628} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
629
630typedef struct _PEB
631{
632 BYTE Reserved1[2];
633 BYTE BeingDebugged;
634 BYTE Reserved2[9];
833db548 635 PPEB_LDR_DATA Ldr;
cbe2437b 636 PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
9c154abe
CV
637 BYTE Reserved3[4];
638 PVOID ProcessHeap;
639 PRTL_CRITICAL_SECTION FastPebLock;
1cb14724
CV
640 BYTE Reserved4[8];
641 ULONG EnvironmentUpdateCount;
642 BYTE Reserved5[424];
cbe2437b
CV
643 ULONG SessionId;
644} PEB, *PPEB;
9ba913a5 645
89d3c72d 646/* Simplified definition, just to get stuff we're interested in. */
09ecdc85
CV
647typedef struct _TEB
648{
cdb42313
CV
649 NT_TIB Tib;
650 PVOID EnvironmentPointer;
651 CLIENT_ID ClientId;
652 PVOID ActiveRpcHandle;
653 PVOID ThreadLocalStoragePointer;
654 PPEB Peb;
89d3c72d
CV
655 ULONG LastErrorValue;
656 ULONG CountOfOwnedCriticalSections;
657 PVOID _reserved1[2];
658 ULONG _reserved2[31];
659 PVOID WOW32Reserved;
660 ULONG CurrentLocale;
661 ULONG FpSoftwareStatusRegister;
662 PVOID SystemReserved1[54];
663 LONG ExceptionCode;
664 PVOID ActivationContextStackPointer;
665 UCHAR SpareBytes1[36];
666 ULONG TxFsContext;
667 ULONG GdiTebBatch[312];
668 CLIENT_ID RealClientId;
669 PVOID GdiCachedProcessHandle;
670 ULONG GdiClientPID;
671 ULONG GdiClientTID;
672 PVOID GdiThreadLocalInfo;
673 ULONG Win32ClientInfo[62];
674 PVOID glDispatchTable[233];
675 ULONG glReserved1[29];
676 PVOID glReserved2[6];
677 ULONG LastStatusValue;
678 UNICODE_STRING StaticUnicodeString;
679 WCHAR StaticUnicodeBuffer[261];
680 PVOID DeallocationStack;
09ecdc85
CV
681 /* A lot more follows... */
682} TEB, *PTEB;
683
cd506492
CV
684typedef struct _KSYSTEM_TIME
685{
686 ULONG LowPart;
687 LONG High1Time;
688 LONG High2Time;
689} KSYSTEM_TIME, *PKSYSTEM_TIME;
690
9c154abe
CV
691typedef struct _KUSER_SHARED_DATA
692{
cd506492
CV
693 BYTE Reserved1[0x08];
694 KSYSTEM_TIME InterruptTime;
695 BYTE Reserved2[0x2c8];
9c154abe
CV
696 ULONG DismountCount;
697 /* A lot more follows... */
698} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
699
9ba913a5
CF
700typedef struct _PROCESS_BASIC_INFORMATION
701{
702 NTSTATUS ExitStatus;
703 PPEB PebBaseAddress;
704 KAFFINITY AffinityMask;
705 KPRIORITY BasePriority;
706 ULONG UniqueProcessId;
707 ULONG InheritedFromUniqueProcessId;
708} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
709
abbde487
CV
710typedef struct _PROCESS_SESSION_INFORMATION
711{
712 ULONG SessionId;
713} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
714
9ba913a5
CF
715typedef enum _MEMORY_INFORMATION_CLASS
716{
717 MemoryBasicInformation,
718 MemoryWorkingSetList,
719 MemorySectionName,
9f0d3f37 720 MemoryBasicVlmInformation
9ba913a5
CF
721} MEMORY_INFORMATION_CLASS;
722
2402700d
CF
723typedef struct _MEMORY_WORKING_SET_LIST
724{
9ba913a5
CF
725 ULONG NumberOfPages;
726 ULONG WorkingSetList[1];
727} MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
728
8285dae5
CV
729typedef struct _MEMORY_SECTION_NAME
730{
731 UNICODE_STRING SectionFileName;
732} MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
733
2a24463d
CV
734typedef struct _FILE_BASIC_INFORMATION {
735 LARGE_INTEGER CreationTime;
736 LARGE_INTEGER LastAccessTime;
737 LARGE_INTEGER LastWriteTime;
738 LARGE_INTEGER ChangeTime;
739 ULONG FileAttributes;
740} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
741
742typedef struct _FILE_STANDARD_INFORMATION {
743 LARGE_INTEGER AllocationSize;
744 LARGE_INTEGER EndOfFile;
745 ULONG NumberOfLinks;
746 BOOLEAN DeletePending;
747 BOOLEAN Directory;
748} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
749
e25b3402
CV
750typedef struct _FILE_NETWORK_OPEN_INFORMATION {
751 LARGE_INTEGER CreationTime;
752 LARGE_INTEGER LastAccessTime;
753 LARGE_INTEGER LastWriteTime;
754 LARGE_INTEGER ChangeTime;
755 LARGE_INTEGER AllocationSize;
756 LARGE_INTEGER EndOfFile;
757 ULONG FileAttributes;
758} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
759
2a24463d 760typedef struct _FILE_INTERNAL_INFORMATION {
9e5f45ed 761 LARGE_INTEGER FileId;
2a24463d
CV
762} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
763
764typedef struct _FILE_EA_INFORMATION {
765 ULONG EaSize;
766} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
767
768typedef struct _FILE_ACCESS_INFORMATION {
769 ACCESS_MASK AccessFlags;
770} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
771
1c9b2968
CV
772typedef struct _FILE_DISPOSITION_INFORMATION {
773 BOOLEAN DeleteFile;
774} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
775
05726ddd
CF
776typedef struct _FILE_POSITION_INFORMATION {
777 LARGE_INTEGER CurrentByteOffset;
778} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
2a24463d 779
7636b585
CV
780typedef struct _FILE_END_OF_FILE_INFORMATION {
781 LARGE_INTEGER EndOfFile;
782} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
783
2a24463d
CV
784typedef struct _FILE_MODE_INFORMATION {
785 ULONG Mode;
786} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
787
788typedef struct _FILE_ALIGNMENT_INFORMATION {
789 ULONG AlignmentRequirement;
790} FILE_ALIGNMENT_INFORMATION;
791
05726ddd
CF
792typedef struct _FILE_NAME_INFORMATION {
793 ULONG FileNameLength;
794 WCHAR FileName[1];
795} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
2a24463d 796
745c29fe
CV
797typedef struct _FILE_LINK_INFORMATION {
798 BOOLEAN ReplaceIfExists;
799 HANDLE RootDirectory;
800 ULONG FileNameLength;
801 WCHAR FileName[1];
802} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
803
cbfb7b1b
CV
804typedef struct _FILE_RENAME_INFORMATION {
805 BOOLEAN ReplaceIfExists;
806 HANDLE RootDirectory;
807 ULONG FileNameLength;
808 WCHAR FileName[1];
809} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
810
2a24463d
CV
811typedef struct _FILE_ALL_INFORMATION {
812 FILE_BASIC_INFORMATION BasicInformation;
813 FILE_STANDARD_INFORMATION StandardInformation;
814 FILE_INTERNAL_INFORMATION InternalInformation;
815 FILE_EA_INFORMATION EaInformation;
816 FILE_ACCESS_INFORMATION AccessInformation;
817 FILE_POSITION_INFORMATION PositionInformation;
818 FILE_MODE_INFORMATION ModeInformation;
819 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
820 FILE_NAME_INFORMATION NameInformation;
821} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
2402700d 822
665f9a59
CF
823enum
824{
825 FILE_PIPE_DISCONNECTED_STATE = 1,
826 FILE_PIPE_LISTENING_STATE = 2,
827 FILE_PIPE_CONNECTED_STATE = 3,
828 FILE_PIPE_CLOSING_STATE = 4
829};
830
6644c628
CF
831typedef struct _FILE_PIPE_LOCAL_INFORMATION
832{
833 ULONG NamedPipeType;
834 ULONG NamedPipeConfiguration;
835 ULONG MaximumInstances;
836 ULONG CurrentInstances;
837 ULONG InboundQuota;
838 ULONG ReadDataAvailable;
839 ULONG OutboundQuota;
840 ULONG WriteQuotaAvailable;
841 ULONG NamedPipeState;
842 ULONG NamedPipeEnd;
843} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
844
b8eac1de
CV
845typedef struct _FILE_COMPRESSION_INFORMATION
846{
b75971ef 847 LARGE_INTEGER CompressedFileSize;
b8eac1de
CV
848 USHORT CompressionFormat;
849 UCHAR CompressionUnitShift;
b75971ef
CV
850 UCHAR ChunkShift;
851 UCHAR ClusterShift;
852 UCHAR Reserved[3];
b8eac1de
CV
853} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
854
d3dd7d36
CV
855typedef struct _FILE_FS_DEVICE_INFORMATION
856{
857 ULONG DeviceType;
858 ULONG Characteristics;
859} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
860
3323df7e
CV
861typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
862{
863 ULONG FileSystemAttributes;
864 ULONG MaximumComponentNameLength;
865 ULONG FileSystemNameLength;
866 WCHAR FileSystemName[1];
867} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
868
f65c5a0a 869#pragma pack(push,4)
2a24463d
CV
870typedef struct _FILE_FS_VOLUME_INFORMATION
871{
872 LARGE_INTEGER VolumeCreationTime;
873 ULONG VolumeSerialNumber;
874 ULONG VolumeLabelLength;
875 BOOLEAN SupportsObjects;
f65c5a0a 876 BOOLEAN __dummy;
2a24463d
CV
877 WCHAR VolumeLabel[1];
878} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
f65c5a0a 879#pragma pack(pop)
2a24463d 880
3ff1a063 881typedef struct _FILE_FS_SIZE_INFORMATION
2a24463d 882{
3ff1a063
CV
883 LARGE_INTEGER TotalAllocationUnits;
884 LARGE_INTEGER AvailableAllocationUnits;
885 ULONG SectorsPerAllocationUnit;
886 ULONG BytesPerSector;
887} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
888
3323df7e
CV
889typedef struct _FILE_FS_FULL_SIZE_INFORMATION
890{
891 LARGE_INTEGER TotalAllocationUnits;
892 LARGE_INTEGER CallerAvailableAllocationUnits;
893 LARGE_INTEGER ActualAvailableAllocationUnits;
894 ULONG SectorsPerAllocationUnit;
895 ULONG BytesPerSector;
896} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
897
4a96b0aa
CV
898typedef struct _FILE_FS_OBJECTID_INFORMATION {
899 UCHAR ObjectId[16];
900 UCHAR ExtendedInfo[48];
901} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
902
3ff1a063
CV
903typedef enum _FSINFOCLASS {
904 FileFsVolumeInformation = 1,
905 FileFsLabelInformation,
906 FileFsSizeInformation,
907 FileFsDeviceInformation,
908 FileFsAttributeInformation,
909 FileFsControlInformation,
910 FileFsFullSizeInformation,
911 FileFsObjectIdInformation,
912 FileFsDriverPathInformation,
913 FileFsMaximumInformation
2a24463d
CV
914} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
915
2402700d
CF
916typedef enum _OBJECT_INFORMATION_CLASS
917{
b8eac1de
CV
918 ObjectBasicInformation = 0,
919 ObjectNameInformation = 1,
920 ObjectHandleInformation = 4
2402700d
CF
921 // and many more
922} OBJECT_INFORMATION_CLASS;
923
a998dd70
CV
924typedef struct _OBJECT_BASIC_INFORMATION
925{
926 ULONG Attributes;
927 ACCESS_MASK GrantedAccess;
928 ULONG HandleCount;
929 ULONG PointerCount;
930 ULONG PagedPoolUsage;
931 ULONG NonPagedPoolUsage;
932 ULONG Reserved[3];
933 ULONG NameInformationLength;
934 ULONG TypeInformationLength;
935 ULONG SecurityDescriptorLength;
936 LARGE_INTEGER CreateTime;
937} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
938
2402700d
CF
939typedef struct _OBJECT_NAME_INFORMATION
940{
941 UNICODE_STRING Name;
942} OBJECT_NAME_INFORMATION;
943
e9c8cb31
CV
944typedef struct _DIRECTORY_BASIC_INFORMATION
945{
946 UNICODE_STRING ObjectName;
947 UNICODE_STRING ObjectTypeName;
948} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
949
4635b6eb
CV
950typedef struct _FILE_GET_EA_INFORMATION
951{
952 ULONG NextEntryOffset;
953 UCHAR EaNameLength;
954 CHAR EaName[1];
955} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
956
4635b6eb
CV
957typedef struct _FILE_FULL_EA_INFORMATION
958{
959 ULONG NextEntryOffset;
960 UCHAR Flags;
961 UCHAR EaNameLength;
962 USHORT EaValueLength;
963 CHAR EaName[1];
964} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
965
19afaa1a
CV
966typedef struct _FILE_MAILSLOT_SET_INFORMATION
967{
968 LARGE_INTEGER ReadTimeout;
969} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
970
61c44b72
CV
971typedef VOID NTAPI (*PIO_APC_ROUTINE)(PVOID, PIO_STATUS_BLOCK, ULONG);
972
636c94d8
CV
973typedef struct _EVENT_BASIC_INFORMATION
974{
975 EVENT_TYPE EventType;
976 LONG SignalState;
977} EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
978
979typedef enum _EVENT_INFORMATION_CLASS
980{
981 EventBasicInformation = 0
982} EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;
983
e17c7745
CV
984typedef enum _THREAD_INFORMATION_CLASS
985{
705a187e 986 ThreadBasicInformation = 0,
c8ce5429 987 ThreadTimes = 1,
e17c7745
CV
988 ThreadImpersonationToken = 5
989} THREAD_INFORMATION_CLASS, *PTHREAD_INFORMATION_CLASS;
990
705a187e
YS
991typedef struct _THREAD_BASIC_INFORMATION {
992 NTSTATUS ExitStatus;
993 PNT_TIB TebBaseAddress;
994 CLIENT_ID ClientId;
995 KAFFINITY AffinityMask;
996 KPRIORITY Priority;
997 KPRIORITY BasePriority;
998} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
999
f0968c1e
YS
1000typedef enum _TIMER_INFORMATION_CLASS {
1001 TimerBasicInformation = 0
1002} TIMER_INFORMATION_CLASS, *PTIMER_INFORMATION_CLASS;
1003
1004typedef struct _TIMER_BASIC_INFORMATION {
1005 LARGE_INTEGER TimeRemaining;
1006 BOOLEAN SignalState;
1007} TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
1008
e17c7745
CV
1009typedef NTSTATUS (*PRTL_QUERY_REGISTRY_ROUTINE)
1010 (PWSTR, ULONG, PVOID, ULONG, PVOID, PVOID);
1011
1012typedef struct _RTL_QUERY_REGISTRY_TABLE
1013{
1014 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
1015 ULONG Flags;
1016 PCWSTR Name;
1017 PVOID EntryContext;
1018 ULONG DefaultType;
1019 PVOID DefaultData;
1020 ULONG DefaultLength;
1021} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
1022
1023typedef enum _KEY_VALUE_INFORMATION_CLASS
1024{
1025 KeyValueBasicInformation = 0,
1026 KeyValueFullInformation,
1027 KeyValuePartialInformation
1028} KEY_VALUE_INFORMATION_CLASS, *PKEY_VALUE_INFORMATION_CLASS;
b86f999a 1029
e17c7745
CV
1030typedef struct _KEY_VALUE_PARTIAL_INFORMATION
1031{
1032 ULONG TitleIndex;
1033 ULONG Type;
1034 ULONG DataLength;
1035 UCHAR Data[1];
1036} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
1037
25f3ea84
CV
1038typedef enum _SECTION_INHERIT
1039{
1040 ViewShare = 1,
1041 ViewUnmap = 2
1042} SECTION_INHERIT;
86bf572e
CV
1043
1044typedef VOID (APIENTRY *PTIMER_APC_ROUTINE)(PVOID, ULONG, ULONG);
1045
6d87f7d7
CF
1046/* Function declarations for ntdll.dll. These don't appear in any
1047 standard Win32 header. */
f16706de 1048
e17c7745 1049#ifdef __cplusplus
cd506492 1050/* This is the mapping of the KUSER_SHARED_DATA structure into the 32 bit
8ea72215
CV
1051 user address space. We need it here to access the current DismountCount
1052 and InterruptTime. */
1053static volatile KUSER_SHARED_DATA &SharedUserData
1054 = *(volatile KUSER_SHARED_DATA *) 0x7ffe0000;
cd506492 1055
6d87f7d7
CF
1056extern "C"
1057{
e17c7745
CV
1058#endif
1059 NTSTATUS NTAPI NtAccessCheck (PSECURITY_DESCRIPTOR, HANDLE, ACCESS_MASK,
1060 PGENERIC_MAPPING, PPRIVILEGE_SET, PULONG,
1061 PACCESS_MASK, PNTSTATUS);
cce28460
CV
1062 NTSTATUS NTAPI NtAdjustPrivilegesToken (HANDLE, BOOLEAN, PTOKEN_PRIVILEGES,
1063 ULONG, PTOKEN_PRIVILEGES, PULONG);
e17c7745 1064 NTSTATUS NTAPI NtAllocateLocallyUniqueId (PLUID);
5f660ecf 1065 NTSTATUS NTAPI NtAllocateUuids (PLARGE_INTEGER, PULONG, PULONG, PUCHAR);
86bf572e 1066 NTSTATUS NTAPI NtCancelTimer (HANDLE, PBOOLEAN);
e9c8cb31 1067 NTSTATUS NTAPI NtClose (HANDLE);
4c153b24 1068 NTSTATUS NTAPI NtCommitTransaction (HANDLE, BOOLEAN);
a998dd70
CV
1069 NTSTATUS NTAPI NtCreateDirectoryObject (PHANDLE, ACCESS_MASK,
1070 POBJECT_ATTRIBUTES);
e17c7745
CV
1071 NTSTATUS NTAPI NtCreateKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG,
1072 PUNICODE_STRING, ULONG, PULONG);
a998dd70 1073 NTSTATUS NTAPI NtCreateEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
025c1fac 1074 EVENT_TYPE, BOOLEAN);
e8597065
CV
1075 NTSTATUS NTAPI NtCreateFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1076 PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG,
1077 ULONG, ULONG, PVOID, ULONG);
19afaa1a
CV
1078 NTSTATUS NTAPI NtCreateMailslotFile(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1079 PIO_STATUS_BLOCK, ULONG, ULONG, ULONG,
1080 PLARGE_INTEGER);
a998dd70
CV
1081 NTSTATUS NTAPI NtCreateMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1082 BOOLEAN);
f90e23f2 1083 NTSTATUS NTAPI NtCreateSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
70300fdb 1084 PLARGE_INTEGER, ULONG, ULONG, HANDLE);
abbde487
CV
1085 NTSTATUS NTAPI NtCreateSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1086 LONG, LONG);
86bf572e
CV
1087 NTSTATUS NTAPI NtCreateTimer (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1088 TIMER_TYPE);
1fcc912f 1089 NTSTATUS NTAPI NtCreateToken (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1ff9f4b9
CF
1090 TOKEN_TYPE, PLUID, PLARGE_INTEGER, PTOKEN_USER,
1091 PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_OWNER,
1092 PTOKEN_PRIMARY_GROUP, PTOKEN_DEFAULT_DACL,
1093 PTOKEN_SOURCE);
4c153b24
CV
1094 NTSTATUS NTAPI NtCreateTransaction (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1095 LPGUID, HANDLE, ULONG, ULONG, ULONG,
1096 PLARGE_INTEGER, PUNICODE_STRING);
e17c7745
CV
1097 NTSTATUS NTAPI NtDuplicateToken (HANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1098 BOOLEAN, TOKEN_TYPE, PHANDLE);
61c44b72 1099 NTSTATUS NTAPI NtFsControlFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
214c3a11
CV
1100 PIO_STATUS_BLOCK, ULONG, PVOID, ULONG,
1101 PVOID, ULONG);
0d6f2b01 1102 NTSTATUS NTAPI NtFlushBuffersFile (HANDLE, PIO_STATUS_BLOCK);
e17c7745 1103 NTSTATUS NTAPI NtLoadKey (POBJECT_ATTRIBUTES, POBJECT_ATTRIBUTES);
1f5c3042 1104 NTSTATUS NTAPI NtLockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG);
6d87f7d7
CF
1105 NTSTATUS NTAPI NtMapViewOfSection (HANDLE, HANDLE, PVOID *, ULONG, ULONG,
1106 PLARGE_INTEGER, PULONG, SECTION_INHERIT,
1107 ULONG, ULONG);
1b61bf15 1108 NTSTATUS NTAPI NtNotifyChangeDirectoryFile (HANDLE, HANDLE, PIO_APC_ROUTINE,
70300fdb 1109 PVOID, PIO_STATUS_BLOCK,
1b61bf15
CV
1110 PFILE_NOTIFY_INFORMATION, ULONG,
1111 ULONG, BOOLEAN);
e9c8cb31 1112 NTSTATUS NTAPI NtOpenDirectoryObject (PHANDLE, ACCESS_MASK,
70300fdb 1113 POBJECT_ATTRIBUTES);
a998dd70 1114 NTSTATUS NTAPI NtOpenEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
99069065
CV
1115 NTSTATUS NTAPI NtOpenFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
1116 PIO_STATUS_BLOCK, ULONG, ULONG);
e17c7745 1117 NTSTATUS NTAPI NtOpenKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
a998dd70 1118 NTSTATUS NTAPI NtOpenMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
e17c7745
CV
1119 NTSTATUS NTAPI NtOpenProcessToken (HANDLE, ACCESS_MASK, PHANDLE);
1120 NTSTATUS NTAPI NtOpenThreadToken (HANDLE, ACCESS_MASK, BOOLEAN, PHANDLE);
1fcc912f 1121 NTSTATUS NTAPI NtOpenSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
abbde487 1122 NTSTATUS NTAPI NtOpenSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
43f65cdd
CV
1123 NTSTATUS NTAPI NtOpenSymbolicLinkObject (PHANDLE, ACCESS_MASK,
1124 POBJECT_ATTRIBUTES);
1b61bf15
CV
1125 /* WARNING! Don't rely on the timestamp information returned by
1126 NtQueryAttributesFile. Only the DOS file attribute info is reliable. */
e17c7745 1127 NTSTATUS NTAPI NtPrivilegeCheck (HANDLE, PPRIVILEGE_SET, PBOOLEAN);
1b61bf15
CV
1128 NTSTATUS NTAPI NtQueryAttributesFile (POBJECT_ATTRIBUTES,
1129 PFILE_BASIC_INFORMATION);
e9c8cb31
CV
1130 NTSTATUS NTAPI NtQueryDirectoryFile(HANDLE, HANDLE, PVOID, PVOID,
1131 PIO_STATUS_BLOCK, PVOID, ULONG,
1132 FILE_INFORMATION_CLASS, BOOLEAN,
1133 PUNICODE_STRING, BOOLEAN);
1134 NTSTATUS NTAPI NtQueryDirectoryObject (HANDLE, PVOID, ULONG, BOOLEAN,
70300fdb 1135 BOOLEAN, PULONG, PULONG);
4635b6eb
CV
1136 NTSTATUS NTAPI NtQueryEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
1137 BOOLEAN, PVOID, ULONG, PULONG, BOOLEAN);
636c94d8
CV
1138 NTSTATUS NTAPI NtQueryEvent (HANDLE, EVENT_INFORMATION_CLASS, PVOID, ULONG,
1139 PULONG);
e25b3402
CV
1140 NTSTATUS NTAPI NtQueryFullAttributesFile (POBJECT_ATTRIBUTES,
1141 PFILE_NETWORK_OPEN_INFORMATION);
2a24463d 1142 NTSTATUS NTAPI NtQueryInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID,
6644c628 1143 ULONG, FILE_INFORMATION_CLASS);
d74eced5 1144 NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS,
a113a3c5 1145 PVOID, ULONG, PULONG);
705a187e
YS
1146 NTSTATUS NTAPI NtQueryInformationThread (HANDLE, THREAD_INFORMATION_CLASS,
1147 PVOID, ULONG, PULONG);
e17c7745
CV
1148 NTSTATUS NTAPI NtQueryInformationToken (HANDLE, TOKEN_INFORMATION_CLASS,
1149 PVOID, ULONG, PULONG);
d74eced5 1150 NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, VOID *,
a113a3c5 1151 ULONG, ULONG *);
6d87f7d7
CF
1152 NTSTATUS NTAPI NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS,
1153 PVOID, ULONG, PULONG);
cef5dfd7 1154 NTSTATUS WINAPI NtQuerySystemTime (PLARGE_INTEGER);
71ffba49 1155 NTSTATUS NTAPI NtQuerySecurityObject (HANDLE, SECURITY_INFORMATION,
70300fdb 1156 PSECURITY_DESCRIPTOR, ULONG, PULONG);
43f65cdd 1157 NTSTATUS NTAPI NtQuerySymbolicLinkObject (HANDLE, PUNICODE_STRING, PULONG);
f0968c1e
YS
1158 NTSTATUS NTAPI NtQueryTimer (HANDLE, TIMER_INFORMATION_CLASS, PVOID,
1159 ULONG, PULONG);
cd506492 1160 NTSTATUS NTAPI NtQueryTimerResolution (PULONG, PULONG, PULONG);
e17c7745
CV
1161 NTSTATUS NTAPI NtQueryValueKey (HANDLE, PUNICODE_STRING,
1162 KEY_VALUE_INFORMATION_CLASS, PVOID, ULONG,
1163 PULONG);
d74eced5 1164 NTSTATUS NTAPI NtQueryVirtualMemory (HANDLE, PVOID, MEMORY_INFORMATION_CLASS,
a113a3c5 1165 PVOID, ULONG, PULONG);
2a24463d
CV
1166 NTSTATUS NTAPI NtQueryVolumeInformationFile (HANDLE, IO_STATUS_BLOCK *,
1167 VOID *, ULONG,
1168 FS_INFORMATION_CLASS);
d85bcb45
CV
1169 NTSTATUS NTAPI NtReadFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
1170 PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER,
1171 PULONG);
4c153b24 1172 NTSTATUS NTAPI NtRollbackTransaction (HANDLE, BOOLEAN);
4635b6eb 1173 NTSTATUS NTAPI NtSetEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG);
f4ec8743 1174 NTSTATUS NTAPI NtSetEvent (HANDLE, PULONG);
7636b585
CV
1175 NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
1176 FILE_INFORMATION_CLASS);
e17c7745
CV
1177 NTSTATUS NTAPI NtSetInformationThread (HANDLE, THREAD_INFORMATION_CLASS,
1178 PVOID, ULONG);
1179 NTSTATUS NTAPI NtSetInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, PVOID,
1180 ULONG);
f4ae6dc6
CV
1181 NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION,
1182 PSECURITY_DESCRIPTOR);
86bf572e
CV
1183 NTSTATUS NTAPI NtSetTimer (HANDLE, PLARGE_INTEGER, PTIMER_APC_ROUTINE, PVOID,
1184 BOOLEAN, LONG, PBOOLEAN);
cd506492 1185 NTSTATUS NTAPI NtSetTimerResolution (ULONG, BOOLEAN, PULONG);
e17c7745
CV
1186 NTSTATUS NTAPI NtSetValueKey (HANDLE, PUNICODE_STRING, ULONG, ULONG, PVOID,
1187 ULONG);
1f5c3042 1188 NTSTATUS NTAPI NtUnlockVirtualMemory (HANDLE, PVOID *, ULONG *, ULONG);
6d87f7d7 1189 NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID);
61c44b72
CV
1190 NTSTATUS NTAPI NtWriteFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
1191 PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER,
1192 PULONG);
e17c7745
CV
1193 NTSTATUS NTAPI RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR,
1194 PSECURITY_DESCRIPTOR, PULONG);
9c154abe 1195 VOID NTAPI RtlAcquirePebLock ();
e17c7745 1196 NTSTATUS NTAPI RtlAddAccessAllowedAce (PACL, ULONG, ACCESS_MASK, PSID);
115d74b9
CV
1197 NTSTATUS NTAPI RtlAddAccessAllowedAceEx (PACL, ULONG, ULONG, ACCESS_MASK,
1198 PSID);
e17c7745 1199 NTSTATUS NTAPI RtlAddAccessDeniedAce (PACL, ULONG, ACCESS_MASK, PSID);
115d74b9
CV
1200 NTSTATUS NTAPI RtlAddAccessDeniedAceEx (PACL, ULONG, ULONG, ACCESS_MASK,
1201 PSID);
e17c7745 1202 NTSTATUS NTAPI RtlAddAce (PACL, ULONG, ULONG, PVOID, ULONG);
9c154abe 1203 PVOID NTAPI RtlAllocateHeap (PVOID, ULONG, SIZE_T);
214c3a11
CV
1204 NTSTATUS NTAPI RtlAppendUnicodeToString (PUNICODE_STRING, PCWSTR);
1205 NTSTATUS NTAPI RtlAppendUnicodeStringToString (PUNICODE_STRING,
1206 PUNICODE_STRING);
cbe2437b
CV
1207 NTSTATUS NTAPI RtlAnsiStringToUnicodeString (PUNICODE_STRING, PANSI_STRING,
1208 BOOLEAN);
e17c7745 1209 NTSTATUS NTAPI RtlCheckRegistryKey (ULONG, PCWSTR);
214c3a11
CV
1210 LONG NTAPI RtlCompareUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1211 BOOLEAN);
7d5f6c18 1212 NTSTATUS NTAPI RtlConvertSidToUnicodeString (PUNICODE_STRING, PSID, BOOLEAN);
f9761297 1213 NTSTATUS NTAPI RtlConvertToAutoInheritSecurityObject (PSECURITY_DESCRIPTOR,
b86f999a 1214 PSECURITY_DESCRIPTOR,
f9761297
CV
1215 PSECURITY_DESCRIPTOR *,
1216 GUID *, BOOLEAN,
1217 PGENERIC_MAPPING);
e17c7745 1218 NTSTATUS NTAPI RtlCopySid (ULONG, PSID, PSID);
f9761297 1219 VOID NTAPI RtlCopyUnicodeString (PUNICODE_STRING, PUNICODE_STRING);
e17c7745 1220 NTSTATUS NTAPI RtlCreateAcl (PACL, ULONG, ULONG);
31ddf45d 1221 PDEBUG_BUFFER NTAPI RtlCreateQueryDebugBuffer (ULONG, BOOLEAN);
e17c7745
CV
1222 NTSTATUS NTAPI RtlCreateRegistryKey (ULONG, PCWSTR);
1223 NTSTATUS NTAPI RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR, ULONG);
855e63eb 1224 BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING, PCSTR);
f9761297 1225 NTSTATUS NTAPI RtlDeleteSecurityObject (PSECURITY_DESCRIPTOR *);
31ddf45d 1226 NTSTATUS NTAPI RtlDestroyQueryDebugBuffer (PDEBUG_BUFFER);
1feea0bf
CV
1227 NTSTATUS NTAPI RtlDowncaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1228 BOOLEAN);
9c154abe 1229 NTSTATUS NTAPI RtlEnterCriticalSection (PRTL_CRITICAL_SECTION);
e17c7745
CV
1230 BOOLEAN NTAPI RtlEqualPrefixSid (PSID, PSID);
1231 BOOLEAN NTAPI RtlEqualSid (PSID, PSID);
214c3a11
CV
1232 BOOLEAN NTAPI RtlEqualUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1233 BOOLEAN);
8b5fa210 1234 VOID NTAPI RtlFreeAnsiString (PANSI_STRING);
9c154abe 1235 BOOLEAN NTAPI RtlFreeHeap (PVOID, ULONG, PVOID);
8b5fa210 1236 VOID NTAPI RtlFreeOemString (POEM_STRING);
214c3a11 1237 VOID NTAPI RtlFreeUnicodeString (PUNICODE_STRING);
e17c7745
CV
1238 BOOLEAN NTAPI RtlFirstFreeAce (PACL, PVOID *);
1239 NTSTATUS NTAPI RtlGetAce (PACL, ULONG, PVOID);
f9761297
CV
1240 NTSTATUS NTAPI RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR,
1241 PSECURITY_DESCRIPTOR_CONTROL,
1242 PULONG);
4c153b24 1243 HANDLE NTAPI RtlGetCurrentTransaction ();
e17c7745
CV
1244 NTSTATUS NTAPI RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, PBOOLEAN,
1245 PACL *, PBOOLEAN);
1246 NTSTATUS NTAPI RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *,
b86f999a 1247 PBOOLEAN);
e17c7745 1248 NTSTATUS NTAPI RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *,
b86f999a 1249 PBOOLEAN);
e17c7745 1250 PSID_IDENTIFIER_AUTHORITY NTAPI RtlIdentifierAuthoritySid (PSID);
214c3a11 1251 VOID NTAPI RtlInitEmptyUnicodeString (PUNICODE_STRING, PCWSTR, USHORT);
6f94526c 1252 VOID NTAPI RtlInitAnsiString (PANSI_STRING, PCSTR);
e17c7745 1253 NTSTATUS NTAPI RtlInitializeSid (PSID, PSID_IDENTIFIER_AUTHORITY, UCHAR);
6d87f7d7 1254 VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR);
7d5f6c18 1255 NTSTATUS NTAPI RtlIntegerToUnicodeString (ULONG, ULONG, PUNICODE_STRING);
e9c8cb31 1256 ULONG NTAPI RtlIsDosDeviceName_U (PCWSTR);
9c154abe 1257 NTSTATUS NTAPI RtlLeaveCriticalSection (PRTL_CRITICAL_SECTION);
f9761297 1258 ULONG NTAPI RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR);
e17c7745 1259 ULONG NTAPI RtlLengthSid (PSID);
6d87f7d7 1260 ULONG NTAPI RtlNtStatusToDosError (NTSTATUS);
cbe2437b
CV
1261 NTSTATUS NTAPI RtlOemStringToUnicodeString (PUNICODE_STRING, POEM_STRING,
1262 BOOLEAN);
9235f3ea
CV
1263 BOOLEAN NTAPI RtlPrefixUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1264 BOOLEAN);
31ddf45d 1265 NTSTATUS NTAPI RtlQueryProcessDebugInformation (ULONG, ULONG, PDEBUG_BUFFER);
e17c7745
CV
1266 NTSTATUS NTAPI RtlQueryRegistryValues (ULONG, PCWSTR,
1267 PRTL_QUERY_REGISTRY_TABLE, PVOID,
1268 PVOID);
dec9daad 1269 VOID NTAPI RtlReleasePebLock ();
214c3a11 1270 VOID NTAPI RtlSecondsSince1970ToTime (ULONG, PLARGE_INTEGER);
1121c57f 1271 NTSTATUS NTAPI RtlSetCurrentDirectory_U (PUNICODE_STRING);
4c153b24 1272 BOOLEAN NTAPI RtlSetCurrentTransaction (HANDLE);
e17c7745
CV
1273 NTSTATUS NTAPI RtlSetControlSecurityDescriptor (PSECURITY_DESCRIPTOR,
1274 SECURITY_DESCRIPTOR_CONTROL,
1275 SECURITY_DESCRIPTOR_CONTROL);
1276 NTSTATUS NTAPI RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, BOOLEAN,
1277 PACL, BOOLEAN);
1278 NTSTATUS NTAPI RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID,
b86f999a 1279 BOOLEAN);
e17c7745 1280 NTSTATUS NTAPI RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID,
b86f999a 1281 BOOLEAN);
e17c7745
CV
1282 PUCHAR NTAPI RtlSubAuthorityCountSid (PSID);
1283 PULONG NTAPI RtlSubAuthoritySid (PSID, ULONG);
6f94526c 1284 ULONG NTAPI RtlUnicodeStringToAnsiSize (PUNICODE_STRING);
8b5fa210
CV
1285 NTSTATUS NTAPI RtlUnicodeStringToAnsiString (PANSI_STRING, PUNICODE_STRING,
1286 BOOLEAN);
1287 NTSTATUS NTAPI RtlUnicodeStringToOemString (PANSI_STRING, PUNICODE_STRING,
1288 BOOLEAN);
855e63eb 1289 WCHAR NTAPI RtlUpcaseUnicodeChar (WCHAR);
1feea0bf
CV
1290 NTSTATUS NTAPI RtlUpcaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
1291 BOOLEAN);
e17c7745
CV
1292 NTSTATUS NTAPI RtlWriteRegistryValue (ULONG, PCWSTR, PCWSTR, ULONG, PVOID,
1293 ULONG);
214c3a11 1294
e17c7745 1295#ifdef __cplusplus
214c3a11 1296 /* A few Rtl functions are either actually macros, or they just don't
61c44b72
CV
1297 exist even though they would be a big help. We implement them here,
1298 partly as inline functions. */
1299
1300 /* RtlInitEmptyUnicodeString is defined as a macro in wdm.h, but that file
1301 is missing entirely in w32api. */
214c3a11
CV
1302 inline
1303 VOID NTAPI RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf,
1304 USHORT len)
1305 {
1306 dest->Length = 0;
1307 dest->MaximumLength = len;
1308 dest->Buffer = (PWSTR) buf;
1309 }
61c44b72
CV
1310 /* Like RtlInitEmptyUnicodeString, but initialize Length to len, too.
1311 This is for instance useful when creating a UNICODE_STRING from an
1312 NtQueryInformationFile info buffer, where the length of the filename
1313 is known, but you can't rely on the string being 0-terminated.
1314 If you know it's 0-terminated, just use RtlInitUnicodeString(). */
214c3a11 1315 inline
74c5e8c7 1316 VOID NTAPI RtlInitCountedUnicodeString (PUNICODE_STRING dest, PCWSTR buf,
70300fdb 1317 USHORT len)
214c3a11
CV
1318 {
1319 dest->Length = dest->MaximumLength = len;
1320 dest->Buffer = (PWSTR) buf;
1321 }
61c44b72
CV
1322 /* Split path into dirname and basename part. This function does not
1323 copy anything! It just initializes the dirname and basename
1324 UNICODE_STRINGs so that their Buffer members point to the right spot
70300fdb 1325 into path's Buffer, and the Length (and MaximumLength) members are set
61c44b72
CV
1326 to match the dirname part and the basename part.
1327 Note that dirname's Length is set so that it also includes the trailing
1328 backslash. If you don't need it, just subtract sizeof(WCHAR) from
1329 dirname.Length. */
ceaf31f4 1330 inline
61c44b72
CV
1331 VOID NTAPI RtlSplitUnicodePath (PUNICODE_STRING path, PUNICODE_STRING dirname,
1332 PUNICODE_STRING basename)
ceaf31f4
CV
1333 {
1334 USHORT len = path->Length / sizeof (WCHAR);
1335 while (len > 0 && path->Buffer[--len] != L'\\')
1336 ;
1337 ++len;
61c44b72
CV
1338 if (dirname)
1339 RtlInitCountedUnicodeString (dirname, path->Buffer, len * sizeof (WCHAR));
1340 if (basename)
1341 RtlInitCountedUnicodeString (basename, &path->Buffer[len],
74c5e8c7
CV
1342 path->Length - len * sizeof (WCHAR));
1343 }
61c44b72 1344 /* Check if prefix is a prefix of path. */
74c5e8c7 1345 inline
8deb4118
CV
1346 BOOLEAN NTAPI RtlEqualUnicodePathPrefix (PUNICODE_STRING path,
1347 PUNICODE_STRING prefix,
81e98baf 1348 BOOLEAN caseinsensitive)
74c5e8c7 1349 {
8deb4118 1350 UNICODE_STRING p;
74c5e8c7 1351
74c5e8c7 1352 RtlInitCountedUnicodeString (&p, path->Buffer,
8deb4118
CV
1353 prefix->Length < path->Length
1354 ? prefix->Length : path->Length);
1355 return RtlEqualUnicodeString (&p, prefix, caseinsensitive);
74c5e8c7 1356 }
f4529884 1357 /* Check if suffix is a suffix of path. */
74c5e8c7 1358 inline
8deb4118
CV
1359 BOOL NTAPI RtlEqualUnicodePathSuffix (PUNICODE_STRING path,
1360 PUNICODE_STRING suffix,
81e98baf 1361 BOOLEAN caseinsensitive)
74c5e8c7 1362 {
8deb4118 1363 UNICODE_STRING p;
74c5e8c7 1364
8deb4118 1365 if (suffix->Length < path->Length)
74c5e8c7 1366 RtlInitCountedUnicodeString (&p, (PWCHAR) ((PBYTE) path->Buffer
8deb4118
CV
1367 + path->Length - suffix->Length),
1368 suffix->Length);
74c5e8c7
CV
1369 else
1370 RtlInitCountedUnicodeString (&p, path->Buffer, path->Length);
8deb4118 1371 return RtlEqualUnicodeString (&p, suffix, caseinsensitive);
ceaf31f4 1372 }
61c44b72
CV
1373 /* Implemented in strfuncs.cc. Create a Hex UNICODE_STRING from a given
1374 64 bit integer value. If append is TRUE, append the hex string,
1feea0bf 1375 otherwise overwrite dest. Returns either STATUS_SUCCESS, or
61c44b72
CV
1376 STATUS_BUFFER_OVERFLOW, if the unicode buffer is too small (hasn't
1377 room for 16 WCHARs). */
1378 NTSTATUS NTAPI RtlInt64ToHexUnicodeString (ULONGLONG value,
1379 PUNICODE_STRING dest,
1380 BOOLEAN append);
669bdeb8
CV
1381 /* Set file attributes. Don't change file times. */
1382 inline
1383 NTSTATUS NTAPI NtSetAttributesFile (HANDLE h, ULONG attr)
1384 {
1385 IO_STATUS_BLOCK io;
1386 FILE_BASIC_INFORMATION fbi;
1387 fbi.CreationTime.QuadPart = fbi.LastAccessTime.QuadPart =
1388 fbi.LastWriteTime.QuadPart = fbi.ChangeTime.QuadPart = 0LL;
1389 fbi.FileAttributes = attr ?: FILE_ATTRIBUTE_NORMAL;
1390 return NtSetInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation);
1391 }
bd139e52
CV
1392
1393 /* This test for a signalled event is twice as fast as calling
1394 WaitForSingleObject (event, 0). */
1395 inline
1396 BOOL NTAPI IsEventSignalled (HANDLE event)
1397 {
1398 EVENT_BASIC_INFORMATION ebi;
1399 return NT_SUCCESS (NtQueryEvent (event, EventBasicInformation,
1400 &ebi, sizeof ebi, NULL))
1401 && ebi.SignalState != 0;
1402
1403 }
6d87f7d7 1404}
e17c7745 1405#endif
This page took 0.511946 seconds and 5 git commands to generate.