Rolled in various changes from others
[reactos.git] / reactos / include / ddk / zwtypes.h
1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
3
4
5
6 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
7 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
8
9
10
11 // event access mask
12
13 #define EVENT_READ_ACCESS 1
14 #define EVENT_WRITE_ACCESS 2
15
16
17 // file disposition values
18
19
20 #define FILE_SUPERSEDE 0x0000
21 #define FILE_OPEN 0x0001
22 #define FILE_CREATE 0x0002
23 #define FILE_OPEN_IF 0x0003
24 #define FILE_OVERWRITE 0x0004
25 #define FILE_OVERWRITE_IF 0x0005
26 #define FILE_MAXIMUM_DISPOSITION 0x0005
27
28
29
30
31 //process query / set information class
32
33 #define ProcessBasicInformation 0
34 #define ProcessQuotaLimits 1
35 #define ProcessIoCounters 2
36 #define ProcessVmCounters 3
37 #define ProcessTimes 4
38 #define ProcessBasePriority 5
39 #define ProcessRaisePriority 6
40 #define ProcessDebugPort 7
41 #define ProcessExceptionPort 8
42 #define ProcessAccessToken 9
43 #define ProcessLdtInformation 10
44 #define ProcessLdtSize 11
45 #define ProcessDefaultHardErrorMode 12
46 #define ProcessIoPortHandlers 13
47 #define ProcessPooledUsageAndLimits 14
48 #define ProcessWorkingSetWatch 15
49 #define ProcessUserModeIOPL 16
50 #define ProcessEnableAlignmentFaultFixup 17
51 #define ProcessPriorityClass 18
52 #define ProcessWx86Information 19
53 #define ProcessHandleCount 20
54 #define ProcessAffinityMask 21
55 #define MaxProcessInfoClass 22
56
57 // thread query / set information class
58 #define ThreadBasicInformation 0
59 #define ThreadTimes 1
60 #define ThreadPriority 2
61 #define ThreadBasePriority 3
62 #define ThreadAffinityMask 4
63 #define ThreadImpersonationToken 5
64 #define ThreadDescriptorTableEntry 6
65 #define ThreadEnableAlignmentFaultFixup 7
66 #define ThreadEventPair 8
67 #define ThreadQuerySetWin32StartAddress 9
68 #define ThreadZeroTlsCell 10
69 #define ThreadPerformanceCount 11
70 #define ThreadAmILastThread 12
71 #define ThreadIdealProcessor 13
72 #define ThreadPriorityBoost 14
73 #define MaxThreadInfoClass 15
74
75
76
77 // key query information class
78
79 #define KeyBasicInformation 0
80 #define KeyNodeInformation 1
81 #define KeyFullInformation 2
82
83
84 // key set information class
85
86 #define KeyWriteTimeInformation 0
87
88 // key value information class
89
90 #define KeyValueBasicInformation 0
91 #define KeyValueFullInformation 1
92 #define KeyValuePartialInformation 2
93
94 // object handle information
95
96 #define ObjectBasicInformation 0
97 #define ObjectNameInformation 1
98 #define ObjectTypeInformation 2
99 #define ObjectAllInformation 3
100 #define ObjectDataInformation 4
101
102 // semaphore information
103
104 #define SemaphoreBasicInformation 0
105
106 // event information
107
108 #define EventBasicInformation 0
109
110
111 // system information
112
113 #define SystemPerformanceInformation 5
114 #define SystemCacheInformation 21
115 #define SystemTimeAdjustmentInformation 28
116
117
118
119
120 // shutdown action
121
122 typedef enum SHUTDOWN_ACTION_TAG {
123 ShutdownNoReboot,
124 ShutdownReboot,
125 ShutdownPowerOff
126 } SHUTDOWN_ACTION;
127
128
129
130 // wait type
131
132 #define WaitAll 0
133 #define WaitAny 1
134
135
136 // key restore flags
137
138 #define REG_WHOLE_HIVE_VOLATILE 1
139 #define REG_REFRESH_HIVE 2
140
141
142 // object type access rights
143
144 #define OBJECT_TYPE_CREATE 0x0001
145 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
146
147
148 // directory access rights
149
150 #define DIRECTORY_QUERY 0x0001
151 #define DIRECTORY_TRAVERSE 0x0002
152 #define DIRECTORY_CREATE_OBJECT 0x0004
153 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
154
155 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
156
157 // symbolic link access rights
158
159 #define SYMBOLIC_LINK_QUERY 0x0001
160 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
161
162 typedef struct _PROCESS_WS_WATCH_INFORMATION
163 {
164 PVOID FaultingPc;
165 PVOID FaultingVa;
166 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
167
168 typedef struct _PROCESS_BASIC_INFORMATION
169 {
170 NTSTATUS ExitStatus;
171 PNT_PEB PebBaseAddress;
172 KAFFINITY AffinityMask;
173 KPRIORITY BasePriority;
174 ULONG UniqueProcessId;
175 ULONG InheritedFromUniqueProcessId;
176 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
177
178 typedef struct _QUOTA_LIMITS
179 {
180 ULONG PagedPoolLimit;
181 ULONG NonPagedPoolLimit;
182 ULONG MinimumWorkingSetSize;
183 ULONG MaximumWorkingSetSize;
184 ULONG PagefileLimit;
185 TIME TimeLimit;
186 } QUOTA_LIMITS, *PQUOTA_LIMITS;
187
188 typedef struct _IO_COUNTERS
189 {
190 ULONG ReadOperationCount;
191 ULONG WriteOperationCount;
192 ULONG OtherOperationCount;
193 LARGE_INTEGER ReadTransferCount;
194 LARGE_INTEGER WriteTransferCount;
195 LARGE_INTEGER OtherTransferCount;
196 } IO_COUNTERS, *PIO_COUNTERS;
197
198
199 typedef struct _VM_COUNTERS_
200 {
201 ULONG PeakVirtualSize;
202 ULONG VirtualSize;
203 ULONG PageFaultCount;
204 ULONG PeakWorkingSetSize;
205 ULONG WorkingSetSize;
206 ULONG QuotaPeakPagedPoolUsage;
207 ULONG QuotaPagedPoolUsage;
208 ULONG QuotaPeakNonPagedPoolUsage;
209 ULONG QuotaNonPagedPoolUsage;
210 ULONG PagefileUsage;
211 ULONG PeakPagefileUsage;
212 } VM_COUNTERS, *PVM_COUNTERS;
213
214
215 typedef struct _POOLED_USAGE_AND_LIMITS_
216 {
217 ULONG PeakPagedPoolUsage;
218 ULONG PagedPoolUsage;
219 ULONG PagedPoolLimit;
220 ULONG PeakNonPagedPoolUsage;
221 ULONG NonPagedPoolUsage;
222 ULONG NonPagedPoolLimit;
223 ULONG PeakPagefileUsage;
224 ULONG PagefileUsage;
225 ULONG PagefileLimit;
226 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
227
228
229 typedef struct _PROCESS_ACCESS_TOKEN
230 {
231 HANDLE Token;
232 HANDLE Thread;
233 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
234
235 typedef struct _KERNEL_USER_TIMES
236 {
237 TIME CreateTime;
238 TIME ExitTime;
239 TIME KernelTime;
240 TIME UserTime;
241 } KERNEL_USER_TIMES;
242 typedef KERNEL_USER_TIMES *PKERNEL_USER_TIMES;
243
244 // thread information
245
246 // incompatible with MS NT
247
248 typedef struct _THREAD_BASIC_INFORMATION
249 {
250 NTSTATUS ExitStatus;
251 PVOID TebBaseAddress;
252 KAFFINITY AffinityMask;
253 KPRIORITY BasePriority;
254 ULONG UniqueThreadId;
255 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
256
257 // object information
258
259 typedef struct _OBJECT_NAME_INFORMATION
260 {
261 UNICODE_STRING Name;
262 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
263
264
265
266 typedef struct _OBJECT_DATA_INFORMATION
267 {
268 BOOLEAN bInheritHandle;
269 BOOLEAN bProtectFromClose;
270 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
271
272
273 typedef struct _OBJECT_TYPE_INFORMATION
274 {
275 UNICODE_STRING Name;
276 UNICODE_STRING Type;
277 ULONG TotalHandles;
278 ULONG ReferenceCount;
279 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
280
281 // system information
282
283 typedef struct _SYSTEM_TIME_ADJUSTMENT
284 {
285 ULONG TimeAdjustment;
286 BOOL TimeAdjustmentDisabled;
287 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
288
289 typedef struct _SYSTEM_CONFIGURATION_INFO {
290 union {
291 ULONG OemId;
292 struct {
293 WORD ProcessorArchitecture;
294 WORD Reserved;
295 } tag1;
296 } tag2;
297 ULONG PageSize;
298 PVOID MinimumApplicationAddress;
299 PVOID MaximumApplicationAddress;
300 ULONG ActiveProcessorMask;
301 ULONG NumberOfProcessors;
302 ULONG ProcessorType;
303 ULONG AllocationGranularity;
304 WORD ProcessorLevel;
305 WORD ProcessorRevision;
306 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
307
308
309 typedef struct _SYSTEM_CACHE_INFORMATION {
310 ULONG CurrentSize;
311 ULONG PeakSize;
312 ULONG PageFaultCount;
313 ULONG MinimumWorkingSet;
314 ULONG MaximumWorkingSet;
315 ULONG Unused[4];
316 } SYSTEM_CACHE_INFORMATION;
317
318
319
320 // file information
321
322 typedef struct _FILE_BASIC_INFORMATION
323 {
324 TIME CreationTime;
325 TIME LastAccessTime;
326 TIME LastWriteTime;
327 TIME ChangeTime;
328 ULONG FileAttributes;
329 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
330
331 typedef struct _FILE_STANDARD_INFORMATION
332 {
333 LARGE_INTEGER AllocationSize;
334 LARGE_INTEGER EndOfFile;
335 ULONG NumberOfLinks;
336 BOOLEAN DeletePending;
337 BOOLEAN Directory;
338 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
339
340 typedef struct _FILE_POSITION_INFORMATION
341 {
342 LARGE_INTEGER CurrentByteOffset;
343 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
344
345 typedef struct _FILE_ALIGNMENT_INFORMATION
346 {
347 ULONG AlignmentRequirement;
348 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
349
350 typedef struct _FILE_DISPOSITION_INFORMATION
351 {
352 BOOLEAN DeleteFile;
353 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
354
355 typedef struct _FILE_END_OF_FILE_INFORMATION
356 {
357 LARGE_INTEGER EndOfFile;
358 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
359
360 typedef struct _FILE_NETWORK_OPEN_INFORMATION {
361 TIME CreationTime;
362 TIME LastAccessTime;
363 TIME LastWriteTime;
364 TIME ChangeTime;
365 LARGE_INTEGER AllocationSize;
366 LARGE_INTEGER EndOfFile;
367 ULONG FileAttributes;
368 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
369
370 typedef struct _FILE_FULL_EA_INFORMATION
371 {
372 ULONG NextEntryOffset;
373 UCHAR Flags;
374 UCHAR EaNameLength;
375 USHORT EaValueLength;
376 CHAR EaName[0];
377 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
378
379
380 typedef struct _FILE_EA_INFORMATION {
381 ULONG EaSize;
382 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
383
384
385 typedef struct _FILE_GET_EA_INFORMATION {
386 ULONG NextEntryOffset;
387 UCHAR EaNameLength;
388 CHAR EaName[0];
389 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
390
391 typedef struct _FILE_STREAM_INFORMATION {
392 ULONG NextEntryOffset;
393 ULONG StreamNameLength;
394 LARGE_INTEGER StreamSize;
395 LARGE_INTEGER StreamAllocationSize;
396 WCHAR StreamName[0];
397 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
398
399 typedef struct _FILE_ALLOCATION_INFORMATION {
400 LARGE_INTEGER AllocationSize;
401 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
402
403 typedef struct _FILE_NAME_INFORMATION {
404 ULONG FileNameLength;
405 WCHAR FileName[0];
406 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
407
408 typedef struct _FILE_NAMES_INFORMATION {
409 ULONG NextEntryOffset;
410 ULONG FileIndex;
411 ULONG FileNameLength;
412 WCHAR FileName[0];
413 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
414
415
416 typedef struct _FILE_RENAME_INFORMATION {
417 BOOLEAN Replace;
418 HANDLE RootDir;
419 ULONG FileNameLength;
420 WCHAR FileName[0];
421 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
422
423
424 typedef struct _FILE_INTERNAL_INFORMATION {
425 LARGE_INTEGER IndexNumber;
426 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
427
428 typedef struct _FILE_ACCESS_INFORMATION {
429 ACCESS_MASK AccessFlags;
430 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
431
432
433 typedef struct _FILE_MODE_INFORMATION {
434 ULONG Mode;
435 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
436
437 typedef struct _FILE_COMPRESSION_INFORMATION {
438 LARGE_INTEGER CompressedFileSize;
439 USHORT CompressionFormat;
440 UCHAR CompressionUnitShift;
441 UCHAR ChunkShift;
442 UCHAR ClusterShift;
443 UCHAR Reserved[3];
444 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
445
446 typedef struct _FILE_ALL_INFORMATION {
447 FILE_BASIC_INFORMATION BasicInformation;
448 FILE_STANDARD_INFORMATION StandardInformation;
449 FILE_INTERNAL_INFORMATION InternalInformation;
450 FILE_EA_INFORMATION EaInformation;
451 FILE_ACCESS_INFORMATION AccessInformation;
452 FILE_POSITION_INFORMATION PositionInformation;
453 FILE_MODE_INFORMATION ModeInformation;
454 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
455 FILE_NAME_INFORMATION NameInformation;
456 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
457
458 // file system information structures
459
460 typedef struct _FILE_FS_DEVICE_INFORMATION {
461 DEVICE_TYPE DeviceType;
462 ULONG Characteristics;
463 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
464
465
466 typedef struct _FILE_FS_VOLUME_INFORMATION {
467 TIME VolumeCreationTime;
468 ULONG VolumeSerialNumber;
469 ULONG VolumeLabelLength;
470 BOOLEAN SupportsObjects;
471 WCHAR VolumeLabel[0];
472 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
473
474 typedef struct _FILE_FS_SIZE_INFORMATION {
475 LARGE_INTEGER TotalAllocationUnits;
476 LARGE_INTEGER AvailableAllocationUnits;
477 ULONG SectorsPerAllocationUnit;
478 ULONG BytesPerSector;
479 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
480
481 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
482 ULONG FileSystemAttributes;
483 LONG MaximumComponentNameLength;
484 ULONG FileSystemNameLength;
485 WCHAR FileSystemName[0];
486 } FILE_FS_ATTRIBUTE_INFORMATION;
487
488 /*
489 FileSystemAttributes is one of the following values:
490
491 FILE_CASE_SENSITIVE_SEARCH 0x00000001
492 FILE_CASE_PRESERVED_NAMES 0x00000002
493 FILE_UNICODE_ON_DISK 0x00000004
494 FILE_PERSISTENT_ACLS 0x00000008
495 FILE_FILE_COMPRESSION 0x00000010
496 FILE_VOLUME_QUOTAS 0x00000020
497 FILE_VOLUME_IS_COMPRESSED 0x00008000
498 */
499 typedef struct _FILE_FS_LABEL_INFORMATION {
500 ULONG VolumeLabelLength;
501 WCHAR VolumeLabel[0];
502 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
503
504 // read file scatter / write file scatter
505 //FIXME I am a win32 struct aswell
506
507 typedef union _FILE_SEGMENT_ELEMENT {
508 PVOID Buffer;
509 ULONG Alignment;
510 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
511
512 // directory information
513
514 typedef struct _OBJDIR_INFORMATION {
515 UNICODE_STRING ObjectName;
516 UNICODE_STRING ObjectTypeName; // Directory, Device ...
517 UCHAR Data[0];
518 } OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
519
520
521 typedef struct _FILE_DIRECTORY_INFORMATION {
522 ULONG NextEntryOffset;
523 ULONG FileIndex;
524 TIME CreationTime;
525 TIME LastAccessTime;
526 TIME LastWriteTime;
527 TIME ChangeTime;
528 LARGE_INTEGER EndOfFile;
529 LARGE_INTEGER AllocationSize;
530 ULONG FileAttributes;
531 ULONG FileNameLength;
532 WCHAR FileName[0];
533 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
534
535 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
536 ULONG NextEntryOffset;
537 ULONG FileIndex;
538 TIME CreationTime;
539 TIME LastAccessTime;
540 TIME LastWriteTime;
541 TIME ChangeTime;
542 LARGE_INTEGER EndOfFile;
543 LARGE_INTEGER AllocationSize;
544 ULONG FileAttributes;
545 ULONG FileNameLength;
546 ULONG EaSize;
547 WCHAR FileName[0]; // variable size
548 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
549
550
551 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
552 ULONG NextEntryOffset;
553 ULONG FileIndex;
554 TIME CreationTime;
555 TIME LastAccessTime;
556 TIME LastWriteTime;
557 TIME ChangeTime;
558 LARGE_INTEGER EndOfFile;
559 LARGE_INTEGER AllocationSize;
560 ULONG FileAttributes;
561 ULONG FileNameLength;
562 ULONG EaSize;
563 CHAR ShortNameLength;
564 WCHAR ShortName[12]; // 8.3 name
565 WCHAR FileName[0];
566 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION;
567
568
569 /*
570 NotifyFilter / CompletionFilter:
571
572 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
573 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
574 FILE_NOTIFY_CHANGE_NAME 0x00000003
575 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
576 FILE_NOTIFY_CHANGE_SIZE 0x00000008
577 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
578 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
579 FILE_NOTIFY_CHANGE_CREATION 0x00000040
580 FILE_NOTIFY_CHANGE_EA 0x00000080
581 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
582 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
583 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
584 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
585 */
586
587 typedef struct _FILE_NOTIFY_INFORMATION {
588 ULONG NextEntryOffset;
589 ULONG Action;
590 ULONG FileNameLength;
591 WCHAR FileName[0];
592 } FILE_NOTIFY_INFORMATION;
593
594
595 /*
596 Action is one of the following values:
597
598 FILE_ACTION_ADDED 0x00000001
599 FILE_ACTION_REMOVED 0x00000002
600 FILE_ACTION_MODIFIED 0x00000003
601 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
602 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
603 FILE_ACTION_ADDED_STREAM 0x00000006
604 FILE_ACTION_REMOVED_STREAM 0x00000007
605 FILE_ACTION_MODIFIED_STREAM 0x00000008
606
607 */
608
609
610 //FIXME: I am a win32 object
611 typedef
612 VOID
613 (*PTIMERAPCROUTINE)(
614 LPVOID lpArgToCompletionRoutine,
615 DWORD dwTimerLowValue,
616 DWORD dwTimerHighValue
617 );
618
619 // NtProcessStartup parameters
620
621 typedef struct _ENVIRONMENT_INFORMATION {
622 ULONG Unknown[21];
623 UNICODE_STRING CommandLine;
624 UNICODE_STRING ImageFile;
625 } ENVIRONMENT_INFORMATION, *PENVIRONMENT_INFORMATION;
626
627
628 typedef struct _STARTUP_ARGUMENT {
629 ULONG Unknown[3];
630 PENVIRONMENT_INFORMATION Environment;
631 } STARTUP_ARGUMENT, *PSTARTUP_ARGUMENT;
632
633
634 // File System Control commands ( related to defragging )
635
636 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
637 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
638 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
639 #define FSCTL_MOVE_FILE 0x90074
640
641 typedef struct _MAPPING_PAIR
642 {
643 ULONGLONG Vcn;
644 ULONGLONG Lcn;
645 } MAPPING_PAIR, *PMAPPING_PAIR;
646
647 typedef struct _GET_RETRIEVAL_DESCRIPTOR
648 {
649 ULONG NumberOfPairs;
650 ULONGLONG StartVcn;
651 MAPPING_PAIR Pair[0]; // variable size
652 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
653
654 typedef struct _BITMAP_DESCRIPTOR
655 {
656 ULONGLONG StartLcn;
657 ULONGLONG ClustersToEndOfVol;
658 BYTE Map[0]; // variable size
659 } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;
660
661 typedef struct _MOVEFILE_DESCRIPTOR
662 {
663 HANDLE FileHandle;
664 ULONG Reserved;
665 LARGE_INTEGER StartVcn;
666 LARGE_INTEGER TargetLcn;
667 ULONG NumVcns;
668 ULONG Reserved1;
669 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
670
671
672 // semaphore information
673
674 typedef struct _SEMAPHORE_BASIC_INFORMATION
675 {
676 ULONG CurrentCount;
677 ULONG MaximumCount;
678 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
679
680 // event information
681
682 typedef struct _EVENT_BASIC_INFORMATION
683 {
684 BOOL AutomaticReset;
685 BOOL Signaled;
686 } EVENT_BASIC_INFORMATION, *PEVENT_INFORMATION;
687
688 //typedef enum _TIMER_TYPE
689 //{
690 // NotificationTimer,
691 // SynchronizationTimer
692 //} TIMER_TYPE;
693
694
695 #endif