1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
6 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
7 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
13 #define EVENT_READ_ACCESS 1
14 #define EVENT_WRITE_ACCESS 2
17 // file disposition values
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
31 //process query / set information class
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
57 // thread query / set information class
58 #define ThreadBasicInformation 0
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
77 // key query information class
79 #define KeyBasicInformation 0
80 #define KeyNodeInformation 1
81 #define KeyFullInformation 2
84 // key set information class
86 #define KeyWriteTimeInformation 0
88 // key value information class
90 #define KeyValueBasicInformation 0
91 #define KeyValueFullInformation 1
92 #define KeyValuePartialInformation 2
94 // object handle information
96 #define ObjectBasicInformation 0
97 #define ObjectNameInformation 1
98 #define ObjectTypeInformation 2
99 #define ObjectAllInformation 3
100 #define ObjectDataInformation 4
102 // semaphore information
104 #define SemaphoreBasicInformation 0
108 #define EventBasicInformation 0
111 // system information
113 #define SystemPerformanceInformation 5
114 #define SystemCacheInformation 21
115 #define SystemTimeAdjustmentInformation 28
122 typedef enum SHUTDOWN_ACTION_TAG
{
138 #define REG_WHOLE_HIVE_VOLATILE 1
139 #define REG_REFRESH_HIVE 2
142 // object type access rights
144 #define OBJECT_TYPE_CREATE 0x0001
145 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
148 // directory access rights
150 #define DIRECTORY_QUERY 0x0001
151 #define DIRECTORY_TRAVERSE 0x0002
152 #define DIRECTORY_CREATE_OBJECT 0x0004
153 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
155 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
157 // symbolic link access rights
159 #define SYMBOLIC_LINK_QUERY 0x0001
160 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
162 typedef struct _PROCESS_WS_WATCH_INFORMATION
166 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
168 typedef struct _PROCESS_BASIC_INFORMATION
171 PNT_PEB PebBaseAddress
;
172 KAFFINITY AffinityMask
;
173 KPRIORITY BasePriority
;
174 ULONG UniqueProcessId
;
175 ULONG InheritedFromUniqueProcessId
;
176 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
178 typedef struct _QUOTA_LIMITS
180 ULONG PagedPoolLimit
;
181 ULONG NonPagedPoolLimit
;
182 ULONG MinimumWorkingSetSize
;
183 ULONG MaximumWorkingSetSize
;
186 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
188 typedef struct _IO_COUNTERS
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
;
199 typedef struct _VM_COUNTERS_
201 ULONG PeakVirtualSize
;
203 ULONG PageFaultCount
;
204 ULONG PeakWorkingSetSize
;
205 ULONG WorkingSetSize
;
206 ULONG QuotaPeakPagedPoolUsage
;
207 ULONG QuotaPagedPoolUsage
;
208 ULONG QuotaPeakNonPagedPoolUsage
;
209 ULONG QuotaNonPagedPoolUsage
;
211 ULONG PeakPagefileUsage
;
212 } VM_COUNTERS
, *PVM_COUNTERS
;
215 typedef struct _POOLED_USAGE_AND_LIMITS_
217 ULONG PeakPagedPoolUsage
;
218 ULONG PagedPoolUsage
;
219 ULONG PagedPoolLimit
;
220 ULONG PeakNonPagedPoolUsage
;
221 ULONG NonPagedPoolUsage
;
222 ULONG NonPagedPoolLimit
;
223 ULONG PeakPagefileUsage
;
226 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
229 typedef struct _PROCESS_ACCESS_TOKEN
233 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
235 typedef struct _KERNEL_USER_TIMES
242 typedef KERNEL_USER_TIMES
*PKERNEL_USER_TIMES
;
244 // thread information
246 // incompatible with MS NT
248 typedef struct _THREAD_BASIC_INFORMATION
251 PVOID TebBaseAddress
;
252 KAFFINITY AffinityMask
;
253 KPRIORITY BasePriority
;
254 ULONG UniqueThreadId
;
255 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
257 // object information
259 typedef struct _OBJECT_NAME_INFORMATION
262 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
266 typedef struct _OBJECT_DATA_INFORMATION
268 BOOLEAN bInheritHandle
;
269 BOOLEAN bProtectFromClose
;
270 } OBJECT_DATA_INFORMATION
, *POBJECT_DATA_INFORMATION
;
273 typedef struct _OBJECT_TYPE_INFORMATION
278 ULONG ReferenceCount
;
279 } OBJECT_TYPE_INFORMATION
, *POBJECT_TYPE_INFORMATION
;
281 // system information
283 typedef struct _SYSTEM_TIME_ADJUSTMENT
285 ULONG TimeAdjustment
;
286 BOOL TimeAdjustmentDisabled
;
287 } SYSTEM_TIME_ADJUSTMENT
, *PSYSTEM_TIME_ADJUSTMENT
;
289 typedef struct _SYSTEM_CONFIGURATION_INFO
{
293 WORD ProcessorArchitecture
;
298 PVOID MinimumApplicationAddress
;
299 PVOID MaximumApplicationAddress
;
300 ULONG ActiveProcessorMask
;
301 ULONG NumberOfProcessors
;
303 ULONG AllocationGranularity
;
305 WORD ProcessorRevision
;
306 } SYSTEM_CONFIGURATION_INFO
, *PSYSTEM_CONFIGURATION_INFO
;
309 typedef struct _SYSTEM_CACHE_INFORMATION
{
312 ULONG PageFaultCount
;
313 ULONG MinimumWorkingSet
;
314 ULONG MaximumWorkingSet
;
316 } SYSTEM_CACHE_INFORMATION
;
322 typedef struct _FILE_BASIC_INFORMATION
328 ULONG FileAttributes
;
329 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
331 typedef struct _FILE_STANDARD_INFORMATION
333 LARGE_INTEGER AllocationSize
;
334 LARGE_INTEGER EndOfFile
;
336 BOOLEAN DeletePending
;
338 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
340 typedef struct _FILE_POSITION_INFORMATION
342 LARGE_INTEGER CurrentByteOffset
;
343 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
345 typedef struct _FILE_ALIGNMENT_INFORMATION
347 ULONG AlignmentRequirement
;
348 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
350 typedef struct _FILE_DISPOSITION_INFORMATION
353 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
355 typedef struct _FILE_END_OF_FILE_INFORMATION
357 LARGE_INTEGER EndOfFile
;
358 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
360 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
365 LARGE_INTEGER AllocationSize
;
366 LARGE_INTEGER EndOfFile
;
367 ULONG FileAttributes
;
368 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
370 typedef struct _FILE_FULL_EA_INFORMATION
372 ULONG NextEntryOffset
;
375 USHORT EaValueLength
;
377 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
380 typedef struct _FILE_EA_INFORMATION
{
382 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
385 typedef struct _FILE_GET_EA_INFORMATION
{
386 ULONG NextEntryOffset
;
389 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
391 typedef struct _FILE_STREAM_INFORMATION
{
392 ULONG NextEntryOffset
;
393 ULONG StreamNameLength
;
394 LARGE_INTEGER StreamSize
;
395 LARGE_INTEGER StreamAllocationSize
;
397 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
399 typedef struct _FILE_ALLOCATION_INFORMATION
{
400 LARGE_INTEGER AllocationSize
;
401 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
403 typedef struct _FILE_NAME_INFORMATION
{
404 ULONG FileNameLength
;
406 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
408 typedef struct _FILE_NAMES_INFORMATION
{
409 ULONG NextEntryOffset
;
411 ULONG FileNameLength
;
413 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
416 typedef struct _FILE_RENAME_INFORMATION
{
419 ULONG FileNameLength
;
421 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
424 typedef struct _FILE_INTERNAL_INFORMATION
{
425 LARGE_INTEGER IndexNumber
;
426 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
428 typedef struct _FILE_ACCESS_INFORMATION
{
429 ACCESS_MASK AccessFlags
;
430 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
433 typedef struct _FILE_MODE_INFORMATION
{
435 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
437 typedef struct _FILE_COMPRESSION_INFORMATION
{
438 LARGE_INTEGER CompressedFileSize
;
439 USHORT CompressionFormat
;
440 UCHAR CompressionUnitShift
;
444 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
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
;
458 // file system information structures
460 typedef struct _FILE_FS_DEVICE_INFORMATION
{
461 DEVICE_TYPE DeviceType
;
462 ULONG Characteristics
;
463 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
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
;
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
;
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
;
489 FileSystemAttributes is one of the following values:
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
499 typedef struct _FILE_FS_LABEL_INFORMATION
{
500 ULONG VolumeLabelLength
;
501 WCHAR VolumeLabel
[0];
502 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
504 // read file scatter / write file scatter
505 //FIXME I am a win32 struct aswell
507 typedef union _FILE_SEGMENT_ELEMENT
{
510 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
512 // directory information
514 typedef struct _OBJDIR_INFORMATION
{
515 UNICODE_STRING ObjectName
;
516 UNICODE_STRING ObjectTypeName
; // Directory, Device ...
518 } OBJDIR_INFORMATION
, *POBJDIR_INFORMATION
;
521 typedef struct _FILE_DIRECTORY_INFORMATION
{
522 ULONG NextEntryOffset
;
528 LARGE_INTEGER EndOfFile
;
529 LARGE_INTEGER AllocationSize
;
530 ULONG FileAttributes
;
531 ULONG FileNameLength
;
533 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
535 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
536 ULONG NextEntryOffset
;
542 LARGE_INTEGER EndOfFile
;
543 LARGE_INTEGER AllocationSize
;
544 ULONG FileAttributes
;
545 ULONG FileNameLength
;
547 WCHAR FileName
[0]; // variable size
548 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
;
551 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
552 ULONG NextEntryOffset
;
558 LARGE_INTEGER EndOfFile
;
559 LARGE_INTEGER AllocationSize
;
560 ULONG FileAttributes
;
561 ULONG FileNameLength
;
563 CHAR ShortNameLength
;
564 WCHAR ShortName
[12]; // 8.3 name
566 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
;
570 NotifyFilter / CompletionFilter:
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
587 typedef struct _FILE_NOTIFY_INFORMATION
{
588 ULONG NextEntryOffset
;
590 ULONG FileNameLength
;
592 } FILE_NOTIFY_INFORMATION
;
596 Action is one of the following values:
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
610 //FIXME: I am a win32 object
614 LPVOID lpArgToCompletionRoutine
,
615 DWORD dwTimerLowValue
,
616 DWORD dwTimerHighValue
619 // NtProcessStartup parameters
621 typedef struct _ENVIRONMENT_INFORMATION
{
623 UNICODE_STRING CommandLine
;
624 UNICODE_STRING ImageFile
;
625 } ENVIRONMENT_INFORMATION
, *PENVIRONMENT_INFORMATION
;
628 typedef struct _STARTUP_ARGUMENT
{
630 PENVIRONMENT_INFORMATION Environment
;
631 } STARTUP_ARGUMENT
, *PSTARTUP_ARGUMENT
;
634 // File System Control commands ( related to defragging )
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
641 typedef struct _MAPPING_PAIR
645 } MAPPING_PAIR
, *PMAPPING_PAIR
;
647 typedef struct _GET_RETRIEVAL_DESCRIPTOR
651 MAPPING_PAIR Pair
[0]; // variable size
652 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
654 typedef struct _BITMAP_DESCRIPTOR
657 ULONGLONG ClustersToEndOfVol
;
658 BYTE Map
[0]; // variable size
659 } BITMAP_DESCRIPTOR
, *PBITMAP_DESCRIPTOR
;
661 typedef struct _MOVEFILE_DESCRIPTOR
665 LARGE_INTEGER StartVcn
;
666 LARGE_INTEGER TargetLcn
;
669 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
672 // semaphore information
674 typedef struct _SEMAPHORE_BASIC_INFORMATION
678 } SEMAPHORE_BASIC_INFORMATION
, *PSEMAPHORE_BASIC_INFORMATION
;
682 typedef struct _EVENT_BASIC_INFORMATION
686 } EVENT_BASIC_INFORMATION
, *PEVENT_INFORMATION
;
688 //typedef enum _TIMER_TYPE
690 // NotificationTimer,
691 // SynchronizationTimer