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