1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
4 /* Added by David Welch at 09/04/99 */
5 typedef struct _PORT_MSG_DATA
10 } PORT_MSG_DATA
, *PPORT_MSG_DATA
;
13 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
14 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
20 #define EVENT_READ_ACCESS 1
21 #define EVENT_WRITE_ACCESS 2
24 // file disposition values
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
35 //process query / set information class
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
61 // thread query / set information class
62 #define ThreadBasicInformation 0
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
79 // object handle information
81 #define ObjectBasicInformation 0
82 #define ObjectNameInformation 1
83 #define ObjectTypeInformation 2
84 #define ObjectAllInformation 3
85 #define ObjectDataInformation 4
87 // semaphore information
89 #define SemaphoreBasicInformation 0
93 #define EventBasicInformation 0
97 #define SystemPerformanceInformation 5
98 #define SystemCacheInformation 21
99 #define SystemTimeAdjustmentInformation 28
103 typedef enum SHUTDOWN_ACTION_TAG
{
116 #define REG_WHOLE_HIVE_VOLATILE 1
117 #define REG_REFRESH_HIVE 2
119 // object type access rights
121 #define OBJECT_TYPE_CREATE 0x0001
122 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
124 // directory access rights
126 #define DIRECTORY_QUERY 0x0001
127 #define DIRECTORY_TRAVERSE 0x0002
128 #define DIRECTORY_CREATE_OBJECT 0x0004
129 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
131 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
133 // symbolic link access rights
135 #define SYMBOLIC_LINK_QUERY 0x0001
136 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
138 typedef struct _PROCESS_WS_WATCH_INFORMATION
142 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
144 typedef struct _PROCESS_BASIC_INFORMATION
147 PNT_PEB PebBaseAddress
;
148 KAFFINITY AffinityMask
;
149 KPRIORITY BasePriority
;
150 ULONG UniqueProcessId
;
151 ULONG InheritedFromUniqueProcessId
;
152 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
154 typedef struct _QUOTA_LIMITS
156 ULONG PagedPoolLimit
;
157 ULONG NonPagedPoolLimit
;
158 ULONG MinimumWorkingSetSize
;
159 ULONG MaximumWorkingSetSize
;
162 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
164 typedef struct _IO_COUNTERS
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
;
175 typedef struct _VM_COUNTERS_
177 ULONG PeakVirtualSize
;
179 ULONG PageFaultCount
;
180 ULONG PeakWorkingSetSize
;
181 ULONG WorkingSetSize
;
182 ULONG QuotaPeakPagedPoolUsage
;
183 ULONG QuotaPagedPoolUsage
;
184 ULONG QuotaPeakNonPagedPoolUsage
;
185 ULONG QuotaNonPagedPoolUsage
;
187 ULONG PeakPagefileUsage
;
188 } VM_COUNTERS
, *PVM_COUNTERS
;
191 typedef struct _POOLED_USAGE_AND_LIMITS_
193 ULONG PeakPagedPoolUsage
;
194 ULONG PagedPoolUsage
;
195 ULONG PagedPoolLimit
;
196 ULONG PeakNonPagedPoolUsage
;
197 ULONG NonPagedPoolUsage
;
198 ULONG NonPagedPoolLimit
;
199 ULONG PeakPagefileUsage
;
202 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
205 typedef struct _PROCESS_ACCESS_TOKEN
209 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
211 typedef struct _KERNEL_USER_TIMES
218 typedef KERNEL_USER_TIMES
*PKERNEL_USER_TIMES
;
220 // thread information
222 // incompatible with MS NT
224 typedef struct _THREAD_BASIC_INFORMATION
227 PVOID TebBaseAddress
;
228 KAFFINITY AffinityMask
;
229 KPRIORITY BasePriority
;
230 ULONG UniqueThreadId
;
231 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
233 // object information
235 typedef struct _OBJECT_NAME_INFORMATION
238 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
242 typedef struct _OBJECT_DATA_INFORMATION
244 BOOLEAN bInheritHandle
;
245 BOOLEAN bProtectFromClose
;
246 } OBJECT_DATA_INFORMATION
, *POBJECT_DATA_INFORMATION
;
249 typedef struct _OBJECT_TYPE_INFORMATION
254 ULONG ReferenceCount
;
255 } OBJECT_TYPE_INFORMATION
, *POBJECT_TYPE_INFORMATION
;
257 // system information
259 typedef struct _SYSTEM_TIME_ADJUSTMENT
261 ULONG TimeAdjustment
;
262 BOOL TimeAdjustmentDisabled
;
263 } SYSTEM_TIME_ADJUSTMENT
, *PSYSTEM_TIME_ADJUSTMENT
;
265 typedef struct _SYSTEM_CONFIGURATION_INFO
{
269 WORD ProcessorArchitecture
;
274 PVOID MinimumApplicationAddress
;
275 PVOID MaximumApplicationAddress
;
276 ULONG ActiveProcessorMask
;
277 ULONG NumberOfProcessors
;
279 ULONG AllocationGranularity
;
281 WORD ProcessorRevision
;
282 } SYSTEM_CONFIGURATION_INFO
, *PSYSTEM_CONFIGURATION_INFO
;
285 typedef struct _SYSTEM_CACHE_INFORMATION
{
288 ULONG PageFaultCount
;
289 ULONG MinimumWorkingSet
;
290 ULONG MaximumWorkingSet
;
292 } SYSTEM_CACHE_INFORMATION
;
294 typedef struct _FILE_BASIC_INFORMATION
300 ULONG FileAttributes
;
301 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
303 typedef struct _FILE_STANDARD_INFORMATION
305 LARGE_INTEGER AllocationSize
;
306 LARGE_INTEGER EndOfFile
;
308 BOOLEAN DeletePending
;
310 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
312 typedef struct _FILE_POSITION_INFORMATION
314 LARGE_INTEGER CurrentByteOffset
;
315 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
317 typedef struct _FILE_ALIGNMENT_INFORMATION
319 ULONG AlignmentRequirement
;
320 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
322 typedef struct _FILE_DISPOSITION_INFORMATION
325 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
327 typedef struct _FILE_END_OF_FILE_INFORMATION
329 LARGE_INTEGER EndOfFile
;
330 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
332 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
337 LARGE_INTEGER AllocationSize
;
338 LARGE_INTEGER EndOfFile
;
339 ULONG FileAttributes
;
340 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
342 typedef struct _FILE_FULL_EA_INFORMATION
344 ULONG NextEntryOffset
;
347 USHORT EaValueLength
;
349 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
352 typedef struct _FILE_EA_INFORMATION
{
354 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
357 typedef struct _FILE_GET_EA_INFORMATION
{
358 ULONG NextEntryOffset
;
361 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
363 typedef struct _FILE_STREAM_INFORMATION
{
364 ULONG NextEntryOffset
;
365 ULONG StreamNameLength
;
366 LARGE_INTEGER StreamSize
;
367 LARGE_INTEGER StreamAllocationSize
;
369 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
371 typedef struct _FILE_ALLOCATION_INFORMATION
{
372 LARGE_INTEGER AllocationSize
;
373 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
375 typedef struct _FILE_NAME_INFORMATION
{
376 ULONG FileNameLength
;
378 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
380 typedef struct _FILE_NAMES_INFORMATION
382 ULONG NextEntryOffset
;
384 ULONG FileNameLength
;
386 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
389 typedef struct _FILE_RENAME_INFORMATION
{
392 ULONG FileNameLength
;
394 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
397 typedef struct _FILE_INTERNAL_INFORMATION
{
398 LARGE_INTEGER IndexNumber
;
399 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
401 typedef struct _FILE_ACCESS_INFORMATION
{
402 ACCESS_MASK AccessFlags
;
403 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
406 typedef struct _FILE_MODE_INFORMATION
{
408 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
410 typedef struct _FILE_COMPRESSION_INFORMATION
{
411 LARGE_INTEGER CompressedFileSize
;
412 USHORT CompressionFormat
;
413 UCHAR CompressionUnitShift
;
417 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
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
;
431 // file system information structures
433 typedef struct _FILE_FS_DEVICE_INFORMATION
{
434 DEVICE_TYPE DeviceType
;
435 ULONG Characteristics
;
436 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
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
;
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
;
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
;
462 FileSystemAttributes is one of the following values:
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
472 typedef struct _FILE_FS_LABEL_INFORMATION
{
473 ULONG VolumeLabelLength
;
474 WCHAR VolumeLabel
[0];
475 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
477 // read file scatter / write file scatter
478 //FIXME I am a win32 struct aswell
480 typedef union _FILE_SEGMENT_ELEMENT
{
483 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
485 // directory information
487 typedef struct _OBJDIR_INFORMATION
{
488 UNICODE_STRING ObjectName
;
489 UNICODE_STRING ObjectTypeName
; // Directory, Device ...
491 } OBJDIR_INFORMATION
, *POBJDIR_INFORMATION
;
494 typedef struct _FILE_DIRECTORY_INFORMATION
{
495 ULONG NextEntryOffset
;
501 LARGE_INTEGER EndOfFile
;
502 LARGE_INTEGER AllocationSize
;
503 ULONG FileAttributes
;
504 ULONG FileNameLength
;
506 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
508 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
509 ULONG NextEntryOffset
;
515 LARGE_INTEGER EndOfFile
;
516 LARGE_INTEGER AllocationSize
;
517 ULONG FileAttributes
;
518 ULONG FileNameLength
;
520 WCHAR FileName
[0]; // variable size
521 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
,
522 FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
525 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
526 ULONG NextEntryOffset
;
532 LARGE_INTEGER EndOfFile
;
533 LARGE_INTEGER AllocationSize
;
534 ULONG FileAttributes
;
535 ULONG FileNameLength
;
537 CHAR ShortNameLength
;
538 WCHAR ShortName
[12]; // 8.3 name
540 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
,
541 FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
545 NotifyFilter / CompletionFilter:
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
562 typedef struct _FILE_NOTIFY_INFORMATION
{
564 ULONG FileNameLength
;
566 } FILE_NOTIFY_INFORMATION
;
570 Action is one of the following values:
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
584 //FIXME: I am a win32 object
588 LPVOID lpArgToCompletionRoutine
,
589 DWORD dwTimerLowValue
,
590 DWORD dwTimerHighValue
593 // NtProcessStartup parameters
595 typedef struct _ENVIRONMENT_INFORMATION
{
597 UNICODE_STRING CommandLine
;
598 UNICODE_STRING ImageFile
;
599 } ENVIRONMENT_INFORMATION
, *PENVIRONMENT_INFORMATION
;
602 typedef struct _STARTUP_ARGUMENT
{
604 PENVIRONMENT_INFORMATION Environment
;
605 } STARTUP_ARGUMENT
, *PSTARTUP_ARGUMENT
;
608 // File System Control commands ( related to defragging )
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
615 typedef struct _MAPPING_PAIR
619 } MAPPING_PAIR
, *PMAPPING_PAIR
;
621 typedef struct _GET_RETRIEVAL_DESCRIPTOR
625 MAPPING_PAIR Pair
[0]; // variable size
626 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
628 typedef struct _BITMAP_DESCRIPTOR
631 ULONGLONG ClustersToEndOfVol
;
632 BYTE Map
[0]; // variable size
633 } BITMAP_DESCRIPTOR
, *PBITMAP_DESCRIPTOR
;
635 typedef struct _MOVEFILE_DESCRIPTOR
639 LARGE_INTEGER StartVcn
;
640 LARGE_INTEGER TargetLcn
;
643 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
646 // semaphore information
648 typedef struct _SEMAPHORE_BASIC_INFORMATION
652 } SEMAPHORE_BASIC_INFORMATION
, *PSEMAPHORE_BASIC_INFORMATION
;
656 typedef struct _EVENT_BASIC_INFORMATION
660 } EVENT_BASIC_INFORMATION
, *PEVENT_INFORMATION
;
662 //typedef enum _TIMER_TYPE
664 // NotificationTimer,
665 // SynchronizationTimer