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