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