1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
5 /* Added by David Welch at 09/04/99 */
6 typedef struct _PORT_MSG_DATA
11 } PORT_MSG_DATA
, *PPORT_MSG_DATA
;
14 /* Added by EA on 199906160051 */
17 LpcMessageTypeUnknown
, /* invalid */
18 LpcMessageTypeBase
, /* <256 bytes */
19 LpcMessageTypeLarge
, /* >255 bytes */
20 LpcMessageTypeFast
, /* 3.51 GDI */
30 } LPC_REPLY
, * PLPC_REPLY
;
35 LPC_MESSAGE_TYPE Type
;
37 PVOID Buffer
; /* Page aligned! */
38 DWORD Flags
; /* To be defined */
40 } LPC_MESSAGE
, * PLPC_MESSAGE
;
41 #endif /* ndef PROTO_LPC */
43 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
44 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
50 #define EVENT_READ_ACCESS 1
51 #define EVENT_WRITE_ACCESS 2
54 // file disposition values
57 #define FILE_SUPERSEDE 0x0000
58 #define FILE_OPEN 0x0001
59 #define FILE_CREATE 0x0002
60 #define FILE_OPEN_IF 0x0003
61 #define FILE_OVERWRITE 0x0004
62 #define FILE_OVERWRITE_IF 0x0005
63 #define FILE_MAXIMUM_DISPOSITION 0x0005
65 //process query / set information class
67 #define ProcessBasicInformation 0
68 #define ProcessQuotaLimits 1
69 #define ProcessIoCounters 2
70 #define ProcessVmCounters 3
71 #define ProcessTimes 4
72 #define ProcessBasePriority 5
73 #define ProcessRaisePriority 6
74 #define ProcessDebugPort 7
75 #define ProcessExceptionPort 8
76 #define ProcessAccessToken 9
77 #define ProcessLdtInformation 10
78 #define ProcessLdtSize 11
79 #define ProcessDefaultHardErrorMode 12
80 #define ProcessIoPortHandlers 13
81 #define ProcessPooledUsageAndLimits 14
82 #define ProcessWorkingSetWatch 15
83 #define ProcessUserModeIOPL 16
84 #define ProcessEnableAlignmentFaultFixup 17
85 #define ProcessPriorityClass 18
86 #define ProcessWx86Information 19
87 #define ProcessHandleCount 20
88 #define ProcessAffinityMask 21
89 #define MaxProcessInfoClass 22
91 // thread query / set information class
92 #define ThreadBasicInformation 0
94 #define ThreadPriority 2
95 #define ThreadBasePriority 3
96 #define ThreadAffinityMask 4
97 #define ThreadImpersonationToken 5
98 #define ThreadDescriptorTableEntry 6
99 #define ThreadEnableAlignmentFaultFixup 7
100 #define ThreadEventPair 8
101 #define ThreadQuerySetWin32StartAddress 9
102 #define ThreadZeroTlsCell 10
103 #define ThreadPerformanceCount 11
104 #define ThreadAmILastThread 12
105 #define ThreadIdealProcessor 13
106 #define ThreadPriorityBoost 14
107 #define MaxThreadInfoClass 15
109 // object handle information
111 #define ObjectBasicInformation 0
112 #define ObjectNameInformation 1
113 #define ObjectTypeInformation 2
114 #define ObjectAllInformation 3
115 #define ObjectDataInformation 4
117 // semaphore information
119 #define SemaphoreBasicInformation 0
123 #define EventBasicInformation 0
125 // system information
127 #define SystemPerformanceInformation 5
128 #define SystemCacheInformation 21
129 #define SystemTimeAdjustmentInformation 28
133 typedef enum SHUTDOWN_ACTION_TAG
{
146 #define REG_WHOLE_HIVE_VOLATILE 1
147 #define REG_REFRESH_HIVE 2
149 // object type access rights
151 #define OBJECT_TYPE_CREATE 0x0001
152 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
154 // directory access rights
156 #define DIRECTORY_QUERY 0x0001
157 #define DIRECTORY_TRAVERSE 0x0002
158 #define DIRECTORY_CREATE_OBJECT 0x0004
159 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
161 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
163 // symbolic link access rights
165 #define SYMBOLIC_LINK_QUERY 0x0001
166 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
168 typedef struct _PROCESS_WS_WATCH_INFORMATION
172 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
174 typedef struct _PROCESS_BASIC_INFORMATION
177 PNT_PEB PebBaseAddress
;
178 KAFFINITY AffinityMask
;
179 KPRIORITY BasePriority
;
180 ULONG UniqueProcessId
;
181 ULONG InheritedFromUniqueProcessId
;
182 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
184 typedef struct _QUOTA_LIMITS
186 ULONG PagedPoolLimit
;
187 ULONG NonPagedPoolLimit
;
188 ULONG MinimumWorkingSetSize
;
189 ULONG MaximumWorkingSetSize
;
192 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
194 typedef struct _IO_COUNTERS
196 ULONG ReadOperationCount
;
197 ULONG WriteOperationCount
;
198 ULONG OtherOperationCount
;
199 LARGE_INTEGER ReadTransferCount
;
200 LARGE_INTEGER WriteTransferCount
;
201 LARGE_INTEGER OtherTransferCount
;
202 } IO_COUNTERS
, *PIO_COUNTERS
;
205 typedef struct _VM_COUNTERS_
207 ULONG PeakVirtualSize
;
209 ULONG PageFaultCount
;
210 ULONG PeakWorkingSetSize
;
211 ULONG WorkingSetSize
;
212 ULONG QuotaPeakPagedPoolUsage
;
213 ULONG QuotaPagedPoolUsage
;
214 ULONG QuotaPeakNonPagedPoolUsage
;
215 ULONG QuotaNonPagedPoolUsage
;
217 ULONG PeakPagefileUsage
;
218 } VM_COUNTERS
, *PVM_COUNTERS
;
221 typedef struct _POOLED_USAGE_AND_LIMITS_
223 ULONG PeakPagedPoolUsage
;
224 ULONG PagedPoolUsage
;
225 ULONG PagedPoolLimit
;
226 ULONG PeakNonPagedPoolUsage
;
227 ULONG NonPagedPoolUsage
;
228 ULONG NonPagedPoolLimit
;
229 ULONG PeakPagefileUsage
;
232 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
235 typedef struct _PROCESS_ACCESS_TOKEN
239 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
241 typedef struct _KERNEL_USER_TIMES
248 typedef KERNEL_USER_TIMES
*PKERNEL_USER_TIMES
;
250 // thread information
252 // incompatible with MS NT
254 typedef struct _THREAD_BASIC_INFORMATION
257 PVOID TebBaseAddress
;
258 KAFFINITY AffinityMask
;
259 KPRIORITY BasePriority
;
260 ULONG UniqueThreadId
;
261 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
263 // object information
265 typedef struct _OBJECT_NAME_INFORMATION
268 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
272 typedef struct _OBJECT_DATA_INFORMATION
274 BOOLEAN bInheritHandle
;
275 BOOLEAN bProtectFromClose
;
276 } OBJECT_DATA_INFORMATION
, *POBJECT_DATA_INFORMATION
;
279 typedef struct _OBJECT_TYPE_INFORMATION
284 ULONG ReferenceCount
;
285 } OBJECT_TYPE_INFORMATION
, *POBJECT_TYPE_INFORMATION
;
287 // system information
289 typedef struct _SYSTEM_TIME_ADJUSTMENT
291 ULONG TimeAdjustment
;
292 BOOL TimeAdjustmentDisabled
;
293 } SYSTEM_TIME_ADJUSTMENT
, *PSYSTEM_TIME_ADJUSTMENT
;
295 typedef struct _SYSTEM_CONFIGURATION_INFO
{
299 WORD ProcessorArchitecture
;
304 PVOID MinimumApplicationAddress
;
305 PVOID MaximumApplicationAddress
;
306 ULONG ActiveProcessorMask
;
307 ULONG NumberOfProcessors
;
309 ULONG AllocationGranularity
;
311 WORD ProcessorRevision
;
312 } SYSTEM_CONFIGURATION_INFO
, *PSYSTEM_CONFIGURATION_INFO
;
315 typedef struct _SYSTEM_CACHE_INFORMATION
{
318 ULONG PageFaultCount
;
319 ULONG MinimumWorkingSet
;
320 ULONG MaximumWorkingSet
;
322 } SYSTEM_CACHE_INFORMATION
;
324 typedef struct _FILE_BASIC_INFORMATION
330 ULONG FileAttributes
;
331 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
333 typedef struct _FILE_STANDARD_INFORMATION
335 LARGE_INTEGER AllocationSize
;
336 LARGE_INTEGER EndOfFile
;
338 BOOLEAN DeletePending
;
340 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
342 typedef struct _FILE_POSITION_INFORMATION
344 LARGE_INTEGER CurrentByteOffset
;
345 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
347 typedef struct _FILE_ALIGNMENT_INFORMATION
349 ULONG AlignmentRequirement
;
350 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
352 typedef struct _FILE_DISPOSITION_INFORMATION
355 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
357 typedef struct _FILE_END_OF_FILE_INFORMATION
359 LARGE_INTEGER EndOfFile
;
360 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
362 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
367 LARGE_INTEGER AllocationSize
;
368 LARGE_INTEGER EndOfFile
;
369 ULONG FileAttributes
;
370 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
372 typedef struct _FILE_FULL_EA_INFORMATION
374 ULONG NextEntryOffset
;
377 USHORT EaValueLength
;
379 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
382 typedef struct _FILE_EA_INFORMATION
{
384 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
387 typedef struct _FILE_GET_EA_INFORMATION
{
388 ULONG NextEntryOffset
;
391 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
393 typedef struct _FILE_STREAM_INFORMATION
{
394 ULONG NextEntryOffset
;
395 ULONG StreamNameLength
;
396 LARGE_INTEGER StreamSize
;
397 LARGE_INTEGER StreamAllocationSize
;
399 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
401 typedef struct _FILE_ALLOCATION_INFORMATION
{
402 LARGE_INTEGER AllocationSize
;
403 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
405 typedef struct _FILE_NAME_INFORMATION
{
406 ULONG FileNameLength
;
408 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
410 typedef struct _FILE_NAMES_INFORMATION
412 ULONG NextEntryOffset
;
414 ULONG FileNameLength
;
416 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
419 typedef struct _FILE_RENAME_INFORMATION
{
422 ULONG FileNameLength
;
424 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
427 typedef struct _FILE_INTERNAL_INFORMATION
{
428 LARGE_INTEGER IndexNumber
;
429 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
431 typedef struct _FILE_ACCESS_INFORMATION
{
432 ACCESS_MASK AccessFlags
;
433 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
436 typedef struct _FILE_MODE_INFORMATION
{
438 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
440 typedef struct _FILE_COMPRESSION_INFORMATION
{
441 LARGE_INTEGER CompressedFileSize
;
442 USHORT CompressionFormat
;
443 UCHAR CompressionUnitShift
;
447 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
449 typedef struct _FILE_ALL_INFORMATION
{
450 FILE_BASIC_INFORMATION BasicInformation
;
451 FILE_STANDARD_INFORMATION StandardInformation
;
452 FILE_INTERNAL_INFORMATION InternalInformation
;
453 FILE_EA_INFORMATION EaInformation
;
454 FILE_ACCESS_INFORMATION AccessInformation
;
455 FILE_POSITION_INFORMATION PositionInformation
;
456 FILE_MODE_INFORMATION ModeInformation
;
457 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
458 FILE_NAME_INFORMATION NameInformation
;
459 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
461 // file system information structures
463 typedef struct _FILE_FS_DEVICE_INFORMATION
{
464 DEVICE_TYPE DeviceType
;
465 ULONG Characteristics
;
466 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
469 typedef struct _FILE_FS_VOLUME_INFORMATION
{
470 TIME VolumeCreationTime
;
471 ULONG VolumeSerialNumber
;
472 ULONG VolumeLabelLength
;
473 BOOLEAN SupportsObjects
;
474 WCHAR VolumeLabel
[0];
475 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
477 typedef struct _FILE_FS_SIZE_INFORMATION
{
478 LARGE_INTEGER TotalAllocationUnits
;
479 LARGE_INTEGER AvailableAllocationUnits
;
480 ULONG SectorsPerAllocationUnit
;
481 ULONG BytesPerSector
;
482 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
484 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
485 ULONG FileSystemAttributes
;
486 LONG MaximumComponentNameLength
;
487 ULONG FileSystemNameLength
;
488 WCHAR FileSystemName
[0];
489 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
492 FileSystemAttributes is one of the following values:
494 FILE_CASE_SENSITIVE_SEARCH 0x00000001
495 FILE_CASE_PRESERVED_NAMES 0x00000002
496 FILE_UNICODE_ON_DISK 0x00000004
497 FILE_PERSISTENT_ACLS 0x00000008
498 FILE_FILE_COMPRESSION 0x00000010
499 FILE_VOLUME_QUOTAS 0x00000020
500 FILE_VOLUME_IS_COMPRESSED 0x00008000
502 typedef struct _FILE_FS_LABEL_INFORMATION
{
503 ULONG VolumeLabelLength
;
504 WCHAR VolumeLabel
[0];
505 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
507 // read file scatter / write file scatter
508 //FIXME I am a win32 struct aswell
510 typedef union _FILE_SEGMENT_ELEMENT
{
513 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
515 // directory information
517 typedef struct _OBJDIR_INFORMATION
{
518 UNICODE_STRING ObjectName
;
519 UNICODE_STRING ObjectTypeName
; // Directory, Device ...
521 } OBJDIR_INFORMATION
, *POBJDIR_INFORMATION
;
524 typedef struct _FILE_DIRECTORY_INFORMATION
{
525 ULONG NextEntryOffset
;
531 LARGE_INTEGER EndOfFile
;
532 LARGE_INTEGER AllocationSize
;
533 ULONG FileAttributes
;
534 ULONG FileNameLength
;
536 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
538 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
539 ULONG NextEntryOffset
;
545 LARGE_INTEGER EndOfFile
;
546 LARGE_INTEGER AllocationSize
;
547 ULONG FileAttributes
;
548 ULONG FileNameLength
;
550 WCHAR FileName
[0]; // variable size
551 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
,
552 FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
555 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
556 ULONG NextEntryOffset
;
562 LARGE_INTEGER EndOfFile
;
563 LARGE_INTEGER AllocationSize
;
564 ULONG FileAttributes
;
565 ULONG FileNameLength
;
567 CHAR ShortNameLength
;
568 WCHAR ShortName
[12]; // 8.3 name
570 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
,
571 FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
575 NotifyFilter / CompletionFilter:
577 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
578 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
579 FILE_NOTIFY_CHANGE_NAME 0x00000003
580 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
581 FILE_NOTIFY_CHANGE_SIZE 0x00000008
582 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
583 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
584 FILE_NOTIFY_CHANGE_CREATION 0x00000040
585 FILE_NOTIFY_CHANGE_EA 0x00000080
586 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
587 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
588 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
589 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
592 typedef struct _FILE_NOTIFY_INFORMATION
{
594 ULONG FileNameLength
;
596 } FILE_NOTIFY_INFORMATION
;
600 Action is one of the following values:
602 FILE_ACTION_ADDED 0x00000001
603 FILE_ACTION_REMOVED 0x00000002
604 FILE_ACTION_MODIFIED 0x00000003
605 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
606 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
607 FILE_ACTION_ADDED_STREAM 0x00000006
608 FILE_ACTION_REMOVED_STREAM 0x00000007
609 FILE_ACTION_MODIFIED_STREAM 0x00000008
614 //FIXME: I am a win32 object
618 LPVOID lpArgToCompletionRoutine
,
619 DWORD dwTimerLowValue
,
620 DWORD dwTimerHighValue
623 // NtProcessStartup parameters
625 typedef struct _ENVIRONMENT_INFORMATION
{
627 UNICODE_STRING CommandLine
;
628 UNICODE_STRING ImageFile
;
629 } ENVIRONMENT_INFORMATION
, *PENVIRONMENT_INFORMATION
;
632 typedef struct _STARTUP_ARGUMENT
{
634 PENVIRONMENT_INFORMATION Environment
;
635 } STARTUP_ARGUMENT
, *PSTARTUP_ARGUMENT
;
638 // File System Control commands ( related to defragging )
640 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
641 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
642 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
643 #define FSCTL_MOVE_FILE 0x90074
645 typedef struct _MAPPING_PAIR
649 } MAPPING_PAIR
, *PMAPPING_PAIR
;
651 typedef struct _GET_RETRIEVAL_DESCRIPTOR
655 MAPPING_PAIR Pair
[0]; // variable size
656 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
658 typedef struct _BITMAP_DESCRIPTOR
661 ULONGLONG ClustersToEndOfVol
;
662 BYTE Map
[0]; // variable size
663 } BITMAP_DESCRIPTOR
, *PBITMAP_DESCRIPTOR
;
665 typedef struct _MOVEFILE_DESCRIPTOR
669 LARGE_INTEGER StartVcn
;
670 LARGE_INTEGER TargetLcn
;
673 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
676 // semaphore information
678 typedef struct _SEMAPHORE_BASIC_INFORMATION
682 } SEMAPHORE_BASIC_INFORMATION
, *PSEMAPHORE_BASIC_INFORMATION
;
686 typedef struct _EVENT_BASIC_INFORMATION
690 } EVENT_BASIC_INFORMATION
, *PEVENT_INFORMATION
;
692 //typedef enum _TIMER_TYPE
694 // NotificationTimer,
695 // SynchronizationTimer
699 struct _LPC_PORT_BASIC_INFORMATION
716 } LPC_PORT_BASIC_INFORMATION
, * PLPC_PORT_BASIC_INFORMATION
;