Added SYSTEM_TIME_INFORMATION
[reactos.git] / reactos / include / ddk / zwtypes.h
1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
3
4 #define MAX_MESSAGE_DATA (0x130)
5
6 #define UNUSED_MSG_TYPE (0x0)
7 #define LPC_REQUEST (0x1)
8 #define LPC_REPLY (0x2)
9 #define LPC_DATAGRAM (0x3)
10 #define LPC_LOST_REPLY (0x4)
11 #define LPC_PORT_CLOSED (0x5)
12 #define LPC_CLIENT_DIED (0x6)
13 #define LPC_EXCEPTION (0x7)
14 #define LPC_DEBUG_EVENT (0x8)
15 #define LPC_ERROR_EVENT (0x9)
16 #define LPC_CONNECTION_REQUEST (0xa)
17 #define LPC_CONNECTION_REFUSED (0xb)
18
19 typedef struct _LPCSECTIONINFO
20 {
21 DWORD Length;
22 HANDLE SectionHandle;
23 DWORD Unknown1;
24 DWORD SectionSize;
25 DWORD ClientBaseAddress;
26 DWORD ServerBaseAddress;
27 } LPCSECTION, *PLPCSECTIONINFO;
28
29 typedef struct _LPCSECTIONMAPINFO
30 {
31 DWORD Length;
32 DWORD SectionSize;
33 DWORD ServerBaseAddress;
34 } LPCSECTIONMAPINFO, *PLPCSECTIONMAPINFO;
35
36 typedef struct _LPCMESSAGE
37 {
38 WORD ActualMessageLength;
39 WORD TotalMessageLength;
40 DWORD MessageType;
41 DWORD ClientProcessId;
42 DWORD ClientThreadId;
43 DWORD MessageId;
44 DWORD SharedSectionSize;
45 BYTE MessageData[MAX_MESSAGE_DATA];
46 } LPCMESSAGE, *PLPCMESSAGE;
47
48
49 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
50 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
51
52
53
54 // event access mask
55
56 #define EVENT_READ_ACCESS 1
57 #define EVENT_WRITE_ACCESS 2
58
59
60 // file disposition values
61
62
63 #define FILE_SUPERSEDE 0x0000
64 #define FILE_OPEN 0x0001
65 #define FILE_CREATE 0x0002
66 #define FILE_OPEN_IF 0x0003
67 #define FILE_OVERWRITE 0x0004
68 #define FILE_OVERWRITE_IF 0x0005
69 #define FILE_MAXIMUM_DISPOSITION 0x0005
70
71 //process query / set information class
72
73 #define ProcessBasicInformation 0
74 #define ProcessQuotaLimits 1
75 #define ProcessIoCounters 2
76 #define ProcessVmCounters 3
77 #define ProcessTimes 4
78 #define ProcessBasePriority 5
79 #define ProcessRaisePriority 6
80 #define ProcessDebugPort 7
81 #define ProcessExceptionPort 8
82 #define ProcessAccessToken 9
83 #define ProcessLdtInformation 10
84 #define ProcessLdtSize 11
85 #define ProcessDefaultHardErrorMode 12
86 #define ProcessIoPortHandlers 13
87 #define ProcessPooledUsageAndLimits 14
88 #define ProcessWorkingSetWatch 15
89 #define ProcessUserModeIOPL 16
90 #define ProcessEnableAlignmentFaultFixup 17
91 #define ProcessPriorityClass 18
92 #define ProcessWx86Information 19
93 #define ProcessHandleCount 20
94 #define ProcessAffinityMask 21
95 #define MaxProcessInfoClass 22
96
97 // thread query / set information class
98 #define ThreadBasicInformation 0
99 #define ThreadTimes 1
100 #define ThreadPriority 2
101 #define ThreadBasePriority 3
102 #define ThreadAffinityMask 4
103 #define ThreadImpersonationToken 5
104 #define ThreadDescriptorTableEntry 6
105 #define ThreadEnableAlignmentFaultFixup 7
106 #define ThreadEventPair 8
107 #define ThreadQuerySetWin32StartAddress 9
108 #define ThreadZeroTlsCell 10
109 #define ThreadPerformanceCount 11
110 #define ThreadAmILastThread 12
111 #define ThreadIdealProcessor 13
112 #define ThreadPriorityBoost 14
113 #define MaxThreadInfoClass 15
114
115 // object handle information
116
117 #define ObjectBasicInformation 0
118 #define ObjectNameInformation 1
119 #define ObjectTypeInformation 2
120 #define ObjectAllInformation 3
121 #define ObjectDataInformation 4
122
123 // semaphore information
124
125 #define SemaphoreBasicInformation 0
126
127 // event information
128
129 #define EventBasicInformation 0
130
131 // system information
132
133 #define SystemInformation0 0
134 #define SystemInformation1 1
135 #define SystemPerformanceInformation 2
136 #define SystemTimeInformation 3
137 #define SystemProcessInformation 5
138 #define SystemGlobalFlagInformation 9
139 #define SystemDriverInformation 11
140 #define SystemPageFileInformation 18
141 #define SystemCacheInformation 21
142 #define SystemPoolTagStatsInformation 22
143 #define SystemTimeAdjustmentInformation 28
144 #define SystemTimeZoneInformation 44
145
146 // memory information
147
148 #define MemoryBasicInformation 0
149
150 // shutdown action
151
152 typedef enum SHUTDOWN_ACTION_TAG {
153 ShutdownNoReboot,
154 ShutdownReboot,
155 ShutdownPowerOff
156 } SHUTDOWN_ACTION;
157
158 // wait type
159
160 #define WaitAll 0
161 #define WaitAny 1
162
163 // number of wait objects
164
165 #define THREAD_WAIT_OBJECTS 3
166 //#define MAXIMUM_WAIT_OBJECTS 64
167
168 // key restore flags
169
170 #define REG_WHOLE_HIVE_VOLATILE 1
171 #define REG_REFRESH_HIVE 2
172
173 // object type access rights
174
175 #define OBJECT_TYPE_CREATE 0x0001
176 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
177
178 // directory access rights
179
180 #define DIRECTORY_QUERY 0x0001
181 #define DIRECTORY_TRAVERSE 0x0002
182 #define DIRECTORY_CREATE_OBJECT 0x0004
183 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
184
185 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
186
187 // symbolic link access rights
188
189 #define SYMBOLIC_LINK_QUERY 0x0001
190 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
191
192 typedef struct _PROCESS_WS_WATCH_INFORMATION
193 {
194 PVOID FaultingPc;
195 PVOID FaultingVa;
196 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
197
198 typedef struct _PROCESS_BASIC_INFORMATION
199 {
200 NTSTATUS ExitStatus;
201 PPEB PebBaseAddress;
202 KAFFINITY AffinityMask;
203 KPRIORITY BasePriority;
204 ULONG UniqueProcessId;
205 ULONG InheritedFromUniqueProcessId;
206 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
207
208 typedef struct _QUOTA_LIMITS
209 {
210 ULONG PagedPoolLimit;
211 ULONG NonPagedPoolLimit;
212 ULONG MinimumWorkingSetSize;
213 ULONG MaximumWorkingSetSize;
214 ULONG PagefileLimit;
215 TIME TimeLimit;
216 } QUOTA_LIMITS, *PQUOTA_LIMITS;
217
218 typedef struct _IO_COUNTERS
219 {
220 ULONG ReadOperationCount;
221 ULONG WriteOperationCount;
222 ULONG OtherOperationCount;
223 LARGE_INTEGER ReadTransferCount;
224 LARGE_INTEGER WriteTransferCount;
225 LARGE_INTEGER OtherTransferCount;
226 } IO_COUNTERS, *PIO_COUNTERS;
227
228
229 typedef struct _VM_COUNTERS_
230 {
231 ULONG PeakVirtualSize;
232 ULONG VirtualSize;
233 ULONG PageFaultCount;
234 ULONG PeakWorkingSetSize;
235 ULONG WorkingSetSize;
236 ULONG QuotaPeakPagedPoolUsage;
237 ULONG QuotaPagedPoolUsage;
238 ULONG QuotaPeakNonPagedPoolUsage;
239 ULONG QuotaNonPagedPoolUsage;
240 ULONG PagefileUsage;
241 ULONG PeakPagefileUsage;
242 } VM_COUNTERS, *PVM_COUNTERS;
243
244
245 typedef struct _POOLED_USAGE_AND_LIMITS_
246 {
247 ULONG PeakPagedPoolUsage;
248 ULONG PagedPoolUsage;
249 ULONG PagedPoolLimit;
250 ULONG PeakNonPagedPoolUsage;
251 ULONG NonPagedPoolUsage;
252 ULONG NonPagedPoolLimit;
253 ULONG PeakPagefileUsage;
254 ULONG PagefileUsage;
255 ULONG PagefileLimit;
256 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
257
258
259 typedef struct _PROCESS_ACCESS_TOKEN
260 {
261 HANDLE Token;
262 HANDLE Thread;
263 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
264
265 typedef struct _KERNEL_USER_TIMES
266 {
267 TIME CreateTime;
268 TIME ExitTime;
269 TIME KernelTime;
270 TIME UserTime;
271 } KERNEL_USER_TIMES;
272 typedef KERNEL_USER_TIMES *PKERNEL_USER_TIMES;
273
274 // thread information
275
276 // incompatible with MS NT
277
278 typedef struct _THREAD_BASIC_INFORMATION
279 {
280 NTSTATUS ExitStatus;
281 PVOID TebBaseAddress;
282 KAFFINITY AffinityMask;
283 KPRIORITY BasePriority;
284 ULONG UniqueThreadId;
285 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
286
287 // object information
288
289 typedef struct _OBJECT_NAME_INFORMATION
290 {
291 UNICODE_STRING Name;
292 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
293
294
295
296 typedef struct _OBJECT_DATA_INFORMATION
297 {
298 BOOLEAN bInheritHandle;
299 BOOLEAN bProtectFromClose;
300 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
301
302
303 typedef struct _OBJECT_TYPE_INFORMATION
304 {
305 UNICODE_STRING Name;
306 UNICODE_STRING Type;
307 ULONG TotalHandles;
308 ULONG ReferenceCount;
309 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
310
311 // system information
312
313 #if 0
314 #pragma pack(2)
315 typedef struct _SYSTEM_THREAD_INFORMATION
316 {
317 FILETIME ftCreationTime;
318 DWORD dwUnknown1;
319 PVOID dwStartAddress;
320 DWORD dwOwningPID;
321 DWORD dwThreadID;
322 DWORD dwCurrentPriority;
323 DWORD dwBasePriority;
324 DWORD dwContextSwitches;
325 DWORD dwThreadState;
326 DWORD dwWaitReason;
327 DWORD dwUnknown2 [ 5 ];
328
329
330 } SYSTEM_THREAD_INFORMATION, * PSYSTEM_THREAD_INFORMATION;
331
332
333 typedef struct _SYSTEM_PROCESS_INFORMATION
334 {
335 DWORD dwOffset;
336 DWORD dwThreadCount;
337 DWORD dwUnknown1 [6];
338 FILETIME ftCreationTime;
339 DWORD dwUnknown2 [5];
340 WCHAR * pszProcessName;
341 DWORD dwBasePriority;
342 DWORD dwProcessID;
343 DWORD dwParentProcessID;
344 DWORD dwHandleCount;
345 DWORD dwUnknown3;
346 DWORD dwUnknown4;
347 DWORD dwVirtualBytesPeak;
348 DWORD dwVirtualBytes;
349 DWORD dwPageFaults;
350 DWORD dwWorkingSetPeak;
351 DWORD dwWorkingSet;
352 DWORD dwUnknown5;
353 DWORD dwPagedPool;
354 DWORD dwUnknown6;
355 DWORD dwNonPagedPool;
356 DWORD dwPageFileBytesPeak;
357 DWORD dwPrivateBytes;
358 DWORD dwPageFileBytes;
359 DWORD dwUnknown7 [4];
360 SYSTEM_THREAD_INFORMATION Threads [1];
361
362 } SYSTEM_PROCESS_INFORMATION, * PSYSTEM_PROCESS_INFORMATION;
363 #endif
364
365 typedef struct _SYSTEM_TIME_INFO
366 {
367 LARGE_INTEGER BootTime;
368 LARGE_INTEGER SystemTime;
369 LARGE_INTEGER TimeZoneBias;
370 ULONG TimeZoneId;
371 ULONG Unknown;
372 } SYSTEM_TIME_INFO, *PSYSTEM_TIME_INFO;
373
374 typedef struct _SYSTEM_GLOBAL_FLAGS_INFO
375 {
376 DWORD GlobalFlags;
377
378 } SYSTEM_GLOBAL_FLAGS_INFO, * PSYSTEM_GLOBAL_FLAGS_INFO;
379
380 #if 0
381 #pragma pack(4)
382 typedef struct _SYSTEM_DRIVER_INFO
383 {
384 PVOID BaseAddress;
385 DWORD Unknown1;
386 DWORD Unknown2;
387 DWORD EntryIndex;
388 DWORD Unknown4;
389 CHAR DriverName [256];
390
391 } SYSTEM_DRIVER_INFO, * PSYSTEM_DRIVER_INFO;
392
393
394 typedef struct _SYSTEM_DRIVERS_INFO
395 {
396 DWORD DriverCount;
397 SYSTEM_DRIVER_INFO DriverInfo[1];
398 } SYSTEM_DRIVERS_INFO, *PSYSTEM_DRIVERS_INFO;
399
400 #pragma pack(4)
401 typedef struct _SYSTEM_TIME_ADJUSTMENT
402 {
403 TIME TimeAdjustment;
404 BOOL TimeAdjustmentDisabled;
405
406 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
407
408 typedef struct _SYSTEM_CONFIGURATION_INFO {
409 union {
410 ULONG OemId;
411 struct {
412 WORD ProcessorArchitecture;
413 WORD Reserved;
414 } tag1;
415 } tag2;
416 ULONG PageSize;
417 PVOID MinimumApplicationAddress;
418 PVOID MaximumApplicationAddress;
419 ULONG ActiveProcessorMask;
420 ULONG NumberOfProcessors;
421 ULONG ProcessorType;
422 ULONG AllocationGranularity;
423 WORD ProcessorLevel;
424 WORD ProcessorRevision;
425 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
426
427
428 typedef struct _SYSTEM_PAGEFILE_INFORMATION
429 {
430 DWORD Unknown [6];
431 WCHAR PagefileName [16];
432
433 } SYSTEM_PAGEFILE_INFORMATION, * PSYSTEM_PAGEFILE_INFORMATION;
434
435
436 typedef struct _SYSTEM_CACHE_INFORMATION
437 {
438 ULONG CurrentSize;
439 ULONG PeakSize;
440 ULONG PageFaultCount;
441 ULONG MinimumWorkingSet;
442 ULONG MaximumWorkingSet;
443 ULONG Unused[4];
444 } SYSTEM_CACHE_INFORMATION;
445
446
447 /* SYSTEM_POOL_ENTRY_INFO, SYSTEM_POOL_INFORMATION
448 * found by Klaus P. Gerlicher */
449 typedef
450 struct _SYSTEM_POOL_ENTRY_INFO
451 {
452 ULONG Tag;
453 ULONG NP_Allocs;
454 ULONG NP_Frees;
455 ULONG NP_Used;
456 ULONG P_Allocs;
457 ULONG P_Frees;
458 ULONG P_Used;
459
460 } SYSTEM_POOL_ENTRY_INFO, * PSYSTEM_POOL_ENTRY_INFO;
461
462
463 typedef
464 struct _SYSTEM_POOL_INFORMATION
465 {
466 ULONG Count;
467 SYSTEM_POOL_ENTRY_INFO PoolEntry [1];
468
469 } SYSTEM_POOL_INFORMATION, *PSYSTEM_POOL_INFORMATION;
470
471 #endif
472
473 // file information
474
475 typedef struct _FILE_BASIC_INFORMATION
476 {
477 TIME CreationTime;
478 TIME LastAccessTime;
479 TIME LastWriteTime;
480 TIME ChangeTime;
481 ULONG FileAttributes;
482 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
483
484 typedef struct _FILE_STANDARD_INFORMATION
485 {
486 LARGE_INTEGER AllocationSize;
487 LARGE_INTEGER EndOfFile;
488 ULONG NumberOfLinks;
489 BOOLEAN DeletePending;
490 BOOLEAN Directory;
491 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
492
493 typedef struct _FILE_POSITION_INFORMATION
494 {
495 LARGE_INTEGER CurrentByteOffset;
496 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
497
498 typedef struct _FILE_ALIGNMENT_INFORMATION
499 {
500 ULONG AlignmentRequirement;
501 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
502
503 typedef struct _FILE_DISPOSITION_INFORMATION
504 {
505 BOOLEAN DeleteFile;
506 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
507
508 typedef struct _FILE_END_OF_FILE_INFORMATION
509 {
510 LARGE_INTEGER EndOfFile;
511 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
512
513 typedef struct _FILE_NETWORK_OPEN_INFORMATION
514 {
515 TIME CreationTime;
516 TIME LastAccessTime;
517 TIME LastWriteTime;
518 TIME ChangeTime;
519 LARGE_INTEGER AllocationSize;
520 LARGE_INTEGER EndOfFile;
521 ULONG FileAttributes;
522 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
523
524 typedef struct _FILE_FULL_EA_INFORMATION
525 {
526 ULONG NextEntryOffset;
527 UCHAR Flags;
528 UCHAR EaNameLength;
529 USHORT EaValueLength;
530 CHAR EaName[0];
531 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
532
533
534 typedef struct _FILE_EA_INFORMATION {
535 ULONG EaSize;
536 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
537
538
539 typedef struct _FILE_GET_EA_INFORMATION {
540 ULONG NextEntryOffset;
541 UCHAR EaNameLength;
542 CHAR EaName[0];
543 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
544
545 typedef struct _FILE_STREAM_INFORMATION {
546 ULONG NextEntryOffset;
547 ULONG StreamNameLength;
548 LARGE_INTEGER StreamSize;
549 LARGE_INTEGER StreamAllocationSize;
550 WCHAR StreamName[0];
551 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
552
553 typedef struct _FILE_ALLOCATION_INFORMATION {
554 LARGE_INTEGER AllocationSize;
555 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
556
557 typedef struct _FILE_NAME_INFORMATION {
558 ULONG FileNameLength;
559 WCHAR FileName[0];
560 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
561
562 typedef struct _FILE_NAMES_INFORMATION
563 {
564 ULONG NextEntryOffset;
565 ULONG FileIndex;
566 ULONG FileNameLength;
567 WCHAR FileName[0];
568 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
569
570
571 typedef struct _FILE_RENAME_INFORMATION {
572 BOOLEAN Replace;
573 HANDLE RootDir;
574 ULONG FileNameLength;
575 WCHAR FileName[0];
576 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
577
578
579 typedef struct _FILE_INTERNAL_INFORMATION {
580 LARGE_INTEGER IndexNumber;
581 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
582
583 typedef struct _FILE_ACCESS_INFORMATION {
584 ACCESS_MASK AccessFlags;
585 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
586
587
588 typedef struct _FILE_MODE_INFORMATION {
589 ULONG Mode;
590 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
591
592 typedef struct _FILE_COMPRESSION_INFORMATION {
593 LARGE_INTEGER CompressedFileSize;
594 USHORT CompressionFormat;
595 UCHAR CompressionUnitShift;
596 UCHAR ChunkShift;
597 UCHAR ClusterShift;
598 UCHAR Reserved[3];
599 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
600
601 typedef struct _FILE_ALL_INFORMATION {
602 FILE_BASIC_INFORMATION BasicInformation;
603 FILE_STANDARD_INFORMATION StandardInformation;
604 FILE_INTERNAL_INFORMATION InternalInformation;
605 FILE_EA_INFORMATION EaInformation;
606 FILE_ACCESS_INFORMATION AccessInformation;
607 FILE_POSITION_INFORMATION PositionInformation;
608 FILE_MODE_INFORMATION ModeInformation;
609 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
610 FILE_NAME_INFORMATION NameInformation;
611 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
612
613 // file system information structures
614
615 typedef struct _FILE_FS_DEVICE_INFORMATION {
616 DEVICE_TYPE DeviceType;
617 ULONG Characteristics;
618 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
619
620
621 typedef struct _FILE_FS_VOLUME_INFORMATION {
622 TIME VolumeCreationTime;
623 ULONG VolumeSerialNumber;
624 ULONG VolumeLabelLength;
625 BOOLEAN SupportsObjects;
626 WCHAR VolumeLabel[0];
627 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
628
629 typedef struct _FILE_FS_SIZE_INFORMATION {
630 LARGE_INTEGER TotalAllocationUnits;
631 LARGE_INTEGER AvailableAllocationUnits;
632 ULONG SectorsPerAllocationUnit;
633 ULONG BytesPerSector;
634 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
635
636 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
637 ULONG FileSystemAttributes;
638 LONG MaximumComponentNameLength;
639 ULONG FileSystemNameLength;
640 WCHAR FileSystemName[0];
641 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
642
643 /*
644 FileSystemAttributes is one of the following values:
645
646 FILE_CASE_SENSITIVE_SEARCH 0x00000001
647 FILE_CASE_PRESERVED_NAMES 0x00000002
648 FILE_UNICODE_ON_DISK 0x00000004
649 FILE_PERSISTENT_ACLS 0x00000008
650 FILE_FILE_COMPRESSION 0x00000010
651 FILE_VOLUME_QUOTAS 0x00000020
652 FILE_VOLUME_IS_COMPRESSED 0x00008000
653 */
654 typedef struct _FILE_FS_LABEL_INFORMATION {
655 ULONG VolumeLabelLength;
656 WCHAR VolumeLabel[0];
657 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
658
659 // read file scatter / write file scatter
660 //FIXME I am a win32 struct aswell
661
662 typedef union _FILE_SEGMENT_ELEMENT {
663 PVOID Buffer;
664 ULONG Alignment;
665 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
666
667 // directory information
668
669 typedef struct _OBJDIR_INFORMATION {
670 UNICODE_STRING ObjectName;
671 UNICODE_STRING ObjectTypeName; // Directory, Device ...
672 UCHAR Data[0];
673 } OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
674
675
676 typedef struct _FILE_DIRECTORY_INFORMATION {
677 ULONG NextEntryOffset;
678 ULONG FileIndex;
679 TIME CreationTime;
680 TIME LastAccessTime;
681 TIME LastWriteTime;
682 TIME ChangeTime;
683 LARGE_INTEGER EndOfFile;
684 LARGE_INTEGER AllocationSize;
685 ULONG FileAttributes;
686 ULONG FileNameLength;
687 WCHAR FileName[0];
688 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
689
690 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
691 ULONG NextEntryOffset;
692 ULONG FileIndex;
693 TIME CreationTime;
694 TIME LastAccessTime;
695 TIME LastWriteTime;
696 TIME ChangeTime;
697 LARGE_INTEGER EndOfFile;
698 LARGE_INTEGER AllocationSize;
699 ULONG FileAttributes;
700 ULONG FileNameLength;
701 ULONG EaSize;
702 WCHAR FileName[0]; // variable size
703 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
704 FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
705
706
707 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
708 ULONG NextEntryOffset;
709 ULONG FileIndex;
710 TIME CreationTime;
711 TIME LastAccessTime;
712 TIME LastWriteTime;
713 TIME ChangeTime;
714 LARGE_INTEGER EndOfFile;
715 LARGE_INTEGER AllocationSize;
716 ULONG FileAttributes;
717 ULONG FileNameLength;
718 ULONG EaSize;
719 CHAR ShortNameLength;
720 WCHAR ShortName[12]; // 8.3 name
721 WCHAR FileName[0];
722 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
723 FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
724
725
726 /*
727 NotifyFilter / CompletionFilter:
728
729 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
730 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
731 FILE_NOTIFY_CHANGE_NAME 0x00000003
732 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
733 FILE_NOTIFY_CHANGE_SIZE 0x00000008
734 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
735 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
736 FILE_NOTIFY_CHANGE_CREATION 0x00000040
737 FILE_NOTIFY_CHANGE_EA 0x00000080
738 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
739 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
740 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
741 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
742 */
743
744 typedef struct _FILE_NOTIFY_INFORMATION {
745 ULONG Action;
746 ULONG FileNameLength;
747 WCHAR FileName[0];
748 } FILE_NOTIFY_INFORMATION;
749
750
751 /*
752 Action is one of the following values:
753
754 FILE_ACTION_ADDED 0x00000001
755 FILE_ACTION_REMOVED 0x00000002
756 FILE_ACTION_MODIFIED 0x00000003
757 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
758 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
759 FILE_ACTION_ADDED_STREAM 0x00000006
760 FILE_ACTION_REMOVED_STREAM 0x00000007
761 FILE_ACTION_MODIFIED_STREAM 0x00000008
762
763 */
764
765
766 //FIXME: I am a win32 object
767 typedef
768 VOID
769 (*PTIMERAPCROUTINE)(
770 LPVOID lpArgToCompletionRoutine,
771 DWORD dwTimerLowValue,
772 DWORD dwTimerHighValue
773 );
774
775
776 // File System Control commands ( related to defragging )
777
778 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
779 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
780 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
781 #define FSCTL_MOVE_FILE 0x90074
782
783 typedef struct _MAPPING_PAIR
784 {
785 ULONGLONG Vcn;
786 ULONGLONG Lcn;
787 } MAPPING_PAIR, *PMAPPING_PAIR;
788
789 typedef struct _GET_RETRIEVAL_DESCRIPTOR
790 {
791 ULONG NumberOfPairs;
792 ULONGLONG StartVcn;
793 MAPPING_PAIR Pair[0]; // variable size
794 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
795
796 typedef struct _BITMAP_DESCRIPTOR
797 {
798 ULONGLONG StartLcn;
799 ULONGLONG ClustersToEndOfVol;
800 BYTE Map[0]; // variable size
801 } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;
802
803 typedef struct _MOVEFILE_DESCRIPTOR
804 {
805 HANDLE FileHandle;
806 ULONG Reserved;
807 LARGE_INTEGER StartVcn;
808 LARGE_INTEGER TargetLcn;
809 ULONG NumVcns;
810 ULONG Reserved1;
811 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
812
813
814 // semaphore information
815
816 typedef struct _SEMAPHORE_BASIC_INFORMATION
817 {
818 ULONG CurrentCount;
819 ULONG MaximumCount;
820 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
821
822 // event information
823
824 typedef struct _EVENT_BASIC_INFORMATION
825 {
826 BOOL AutomaticReset;
827 BOOL Signaled;
828 } EVENT_BASIC_INFORMATION, *PEVENT_INFORMATION;
829
830 //typedef enum _TIMER_TYPE
831 //{
832 // NotificationTimer,
833 // SynchronizationTimer
834 //} TIMER_TYPE;
835
836 typedef
837 struct _LPC_PORT_BASIC_INFORMATION
838 {
839 DWORD Unknown0;
840 DWORD Unknown1;
841 DWORD Unknown2;
842 DWORD Unknown3;
843 DWORD Unknown4;
844 DWORD Unknown5;
845 DWORD Unknown6;
846 DWORD Unknown7;
847 DWORD Unknown8;
848 DWORD Unknown9;
849 DWORD Unknown10;
850 DWORD Unknown11;
851 DWORD Unknown12;
852 DWORD Unknown13;
853
854 } LPC_PORT_BASIC_INFORMATION, * PLPC_PORT_BASIC_INFORMATION;
855
856 #endif