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