| 1 | /** |
| 2 | * This file has no copyright assigned and is placed in the Public Domain. |
| 3 | * This file is part of the mingw-w64 runtime package. |
| 4 | * No warranty is given; refer to the file DISCLAIMER.PD within this package. |
| 5 | */ |
| 6 | #ifndef _WINTERNL_ |
| 7 | #define _WINTERNL_ |
| 8 | |
| 9 | #include <windef.h> |
| 10 | |
| 11 | #ifndef NT_SUCCESS |
| 12 | #define NT_SUCCESS(status) ((NTSTATUS) (status) >= 0) |
| 13 | #endif |
| 14 | |
| 15 | #ifndef NT_INFORMATION |
| 16 | #define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1) |
| 17 | #endif |
| 18 | |
| 19 | #ifndef NT_WARNING |
| 20 | #define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2) |
| 21 | #endif |
| 22 | |
| 23 | #ifndef NT_ERROR |
| 24 | #define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3) |
| 25 | #endif |
| 26 | |
| 27 | #ifndef DEVICE_TYPE |
| 28 | #define DEVICE_TYPE ULONG |
| 29 | #endif |
| 30 | |
| 31 | #ifdef __cplusplus |
| 32 | extern "C" { |
| 33 | #endif |
| 34 | |
| 35 | #ifndef __UNICODE_STRING_DEFINED |
| 36 | #define __UNICODE_STRING_DEFINED |
| 37 | typedef struct _UNICODE_STRING { |
| 38 | USHORT Length; |
| 39 | USHORT MaximumLength; |
| 40 | PWSTR Buffer; |
| 41 | } UNICODE_STRING; |
| 42 | #endif |
| 43 | |
| 44 | typedef struct _PEB_LDR_DATA { |
| 45 | BYTE Reserved1[8]; |
| 46 | PVOID Reserved2[3]; |
| 47 | LIST_ENTRY InMemoryOrderModuleList; |
| 48 | } PEB_LDR_DATA,*PPEB_LDR_DATA; |
| 49 | |
| 50 | typedef struct _LDR_DATA_TABLE_ENTRY { |
| 51 | PVOID Reserved1[2]; |
| 52 | LIST_ENTRY InMemoryOrderLinks; |
| 53 | PVOID Reserved2[2]; |
| 54 | PVOID DllBase; |
| 55 | PVOID Reserved3[2]; |
| 56 | UNICODE_STRING FullDllName; |
| 57 | BYTE Reserved4[8]; |
| 58 | PVOID Reserved5[3]; |
| 59 | __C89_NAMELESS union { |
| 60 | ULONG CheckSum; |
| 61 | PVOID Reserved6; |
| 62 | }; |
| 63 | ULONG TimeDateStamp; |
| 64 | } LDR_DATA_TABLE_ENTRY,*PLDR_DATA_TABLE_ENTRY; |
| 65 | |
| 66 | typedef struct _RTL_USER_PROCESS_PARAMETERS { |
| 67 | BYTE Reserved1[16]; |
| 68 | PVOID Reserved2[10]; |
| 69 | UNICODE_STRING ImagePathName; |
| 70 | UNICODE_STRING CommandLine; |
| 71 | } RTL_USER_PROCESS_PARAMETERS,*PRTL_USER_PROCESS_PARAMETERS; |
| 72 | |
| 73 | /* This function pointer is undocumented and just valid for windows 2000. |
| 74 | Therefore I guess. */ |
| 75 | typedef VOID (NTAPI *PPS_POST_PROCESS_INIT_ROUTINE)(VOID); |
| 76 | |
| 77 | typedef struct _PEB { |
| 78 | BYTE Reserved1[2]; |
| 79 | BYTE BeingDebugged; |
| 80 | BYTE Reserved2[1]; |
| 81 | PVOID Reserved3[2]; |
| 82 | PPEB_LDR_DATA Ldr; |
| 83 | PRTL_USER_PROCESS_PARAMETERS ProcessParameters; |
| 84 | PVOID Reserved4[3]; |
| 85 | PVOID AtlThunkSListPtr; |
| 86 | PVOID Reserved5; |
| 87 | ULONG Reserved6; |
| 88 | PVOID Reserved7; |
| 89 | ULONG Reserved8; |
| 90 | ULONG AtlThunkSListPtr32; |
| 91 | PVOID Reserved9[45]; |
| 92 | BYTE Reserved10[96]; |
| 93 | PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine; |
| 94 | BYTE Reserved11[128]; |
| 95 | PVOID Reserved12[1]; |
| 96 | ULONG SessionId; |
| 97 | } PEB,*PPEB; |
| 98 | |
| 99 | typedef struct _TEB { |
| 100 | PVOID Reserved1[12]; |
| 101 | PPEB ProcessEnvironmentBlock; |
| 102 | PVOID Reserved2[399]; |
| 103 | BYTE Reserved3[1952]; |
| 104 | PVOID TlsSlots[64]; |
| 105 | BYTE Reserved4[8]; |
| 106 | PVOID Reserved5[26]; |
| 107 | PVOID ReservedForOle; |
| 108 | PVOID Reserved6[4]; |
| 109 | PVOID TlsExpansionSlots; |
| 110 | } TEB; |
| 111 | |
| 112 | typedef TEB *PTEB; |
| 113 | #if !defined (_NTDEF_) && !defined (_NTSTATUS_PSDK) |
| 114 | #define _NTSTATUS_PSDK |
| 115 | typedef LONG NTSTATUS, *PNTSTATUS; |
| 116 | #endif |
| 117 | typedef CONST char *PCSZ; |
| 118 | |
| 119 | #ifndef __STRING_DEFINED |
| 120 | #define __STRING_DEFINED |
| 121 | typedef struct _STRING { |
| 122 | USHORT Length; |
| 123 | USHORT MaximumLength; |
| 124 | PCHAR Buffer; |
| 125 | } STRING; |
| 126 | #endif |
| 127 | |
| 128 | typedef STRING *PSTRING; |
| 129 | typedef STRING ANSI_STRING; |
| 130 | typedef PSTRING PANSI_STRING; |
| 131 | typedef PSTRING PCANSI_STRING; |
| 132 | typedef STRING OEM_STRING; |
| 133 | typedef PSTRING POEM_STRING; |
| 134 | typedef CONST STRING *PCOEM_STRING; |
| 135 | |
| 136 | typedef UNICODE_STRING *PUNICODE_STRING; |
| 137 | typedef const UNICODE_STRING *PCUNICODE_STRING; |
| 138 | |
| 139 | #ifndef __OBJECT_ATTRIBUTES_DEFINED |
| 140 | #define __OBJECT_ATTRIBUTES_DEFINED |
| 141 | typedef struct _OBJECT_ATTRIBUTES { |
| 142 | ULONG Length; |
| 143 | #ifdef _WIN64 |
| 144 | ULONG pad1; |
| 145 | #endif |
| 146 | HANDLE RootDirectory; |
| 147 | PUNICODE_STRING ObjectName; |
| 148 | ULONG Attributes; |
| 149 | #ifdef _WIN64 |
| 150 | ULONG pad2; |
| 151 | #endif |
| 152 | PVOID SecurityDescriptor; |
| 153 | PVOID SecurityQualityOfService; |
| 154 | } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; |
| 155 | #endif |
| 156 | |
| 157 | /* Values for the Attributes member */ |
| 158 | #define OBJ_INHERIT 0x00000002L |
| 159 | #define OBJ_PERMANENT 0x00000010L |
| 160 | #define OBJ_EXCLUSIVE 0x00000020L |
| 161 | #define OBJ_CASE_INSENSITIVE 0x00000040L |
| 162 | #define OBJ_OPENIF 0x00000080L |
| 163 | #define OBJ_OPENLINK 0x00000100L |
| 164 | #define OBJ_KERNEL_HANDLE 0x00000200L |
| 165 | #define OBJ_FORCE_ACCESS_CHECK 0x00000400L |
| 166 | #define OBJ_IGNORE_IMPERSONATED_DEVICEMAP 0x00000800L |
| 167 | #define OBJ_DONT_REPARSE 0x00001000L |
| 168 | #define OBJ_VALID_ATTRIBUTES 0x00001FF2L |
| 169 | |
| 170 | /* Define the create disposition values */ |
| 171 | #define FILE_SUPERSEDE 0x00000000 |
| 172 | #define FILE_OPEN 0x00000001 |
| 173 | #define FILE_CREATE 0x00000002 |
| 174 | #define FILE_OPEN_IF 0x00000003 |
| 175 | #define FILE_OVERWRITE 0x00000004 |
| 176 | #define FILE_OVERWRITE_IF 0x00000005 |
| 177 | #define FILE_MAXIMUM_DISPOSITION 0x00000005 |
| 178 | |
| 179 | /* Define the create/open option flags */ |
| 180 | #define FILE_DIRECTORY_FILE 0x00000001 |
| 181 | #define FILE_WRITE_THROUGH 0x00000002 |
| 182 | #define FILE_SEQUENTIAL_ONLY 0x00000004 |
| 183 | #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 |
| 184 | #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 |
| 185 | #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 |
| 186 | #define FILE_NON_DIRECTORY_FILE 0x00000040 |
| 187 | #define FILE_CREATE_TREE_CONNECTION 0x00000080 |
| 188 | #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 |
| 189 | #define FILE_NO_EA_KNOWLEDGE 0x00000200 |
| 190 | #define FILE_OPEN_REMOTE_INSTANCE 0x00000400 |
| 191 | #define FILE_RANDOM_ACCESS 0x00000800 |
| 192 | #define FILE_DELETE_ON_CLOSE 0x00001000 |
| 193 | #define FILE_OPEN_BY_FILE_ID 0x00002000 |
| 194 | #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 |
| 195 | #define FILE_NO_COMPRESSION 0x00008000 |
| 196 | #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7) |
| 197 | #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000 |
| 198 | #endif |
| 199 | #define FILE_RESERVE_OPFILTER 0x00100000 |
| 200 | #define FILE_OPEN_REPARSE_POINT 0x00200000 |
| 201 | #define FILE_OPEN_NO_RECALL 0x00400000 |
| 202 | #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 |
| 203 | #define FILE_VALID_OPTION_FLAGS 0x00ffffff |
| 204 | #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032 |
| 205 | #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032 |
| 206 | #define FILE_VALID_SET_FLAGS 0x00000036 |
| 207 | |
| 208 | /* Define the I/O status information return values for NtCreateFile/NtOpenFile */ |
| 209 | #define FILE_SUPERSEDED 0x00000000 |
| 210 | #define FILE_OPENED 0x00000001 |
| 211 | #define FILE_CREATED 0x00000002 |
| 212 | #define FILE_OVERWRITTEN 0x00000003 |
| 213 | #define FILE_EXISTS 0x00000004 |
| 214 | #define FILE_DOES_NOT_EXIST 0x00000005 |
| 215 | |
| 216 | /* Helper Macro */ |
| 217 | #ifndef InitializeObjectAttributes |
| 218 | #define InitializeObjectAttributes(p,n,a,r,s) { \ |
| 219 | (p)->Length = sizeof(OBJECT_ATTRIBUTES); \ |
| 220 | (p)->RootDirectory = (r); \ |
| 221 | (p)->Attributes = (a); \ |
| 222 | (p)->ObjectName = (n); \ |
| 223 | (p)->SecurityDescriptor = (s); \ |
| 224 | (p)->SecurityQualityOfService = NULL; \ |
| 225 | } |
| 226 | #endif |
| 227 | |
| 228 | typedef struct _OBJECT_DATA_INFORMATION { |
| 229 | BOOLEAN InheritHandle; |
| 230 | BOOLEAN ProtectFromClose; |
| 231 | } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION; |
| 232 | |
| 233 | typedef struct _OBJECT_BASIC_INFORMATION { |
| 234 | ULONG Attributes; |
| 235 | ACCESS_MASK GrantedAccess; |
| 236 | ULONG HandleCount; |
| 237 | ULONG PointerCount; |
| 238 | ULONG PagedPoolUsage; |
| 239 | ULONG NonPagedPoolUsage; |
| 240 | ULONG Reserved[3]; |
| 241 | ULONG NameInformationLength; |
| 242 | ULONG TypeInformationLength; |
| 243 | ULONG SecurityDescriptorLength; |
| 244 | LARGE_INTEGER CreateTime; |
| 245 | } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION; |
| 246 | |
| 247 | typedef struct _OBJECT_NAME_INFORMATION { |
| 248 | UNICODE_STRING Name; |
| 249 | } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; |
| 250 | |
| 251 | typedef struct _OBJECT_TYPE_INFORMATION { |
| 252 | UNICODE_STRING TypeName; |
| 253 | ULONG TotalNumberOfObjects; |
| 254 | ULONG TotalNumberOfHandles; |
| 255 | ULONG TotalPagedPoolUsage; |
| 256 | ULONG TotalNonPagedPoolUsage; |
| 257 | ULONG TotalNamePoolUsage; |
| 258 | ULONG TotalHandleTableUsage; |
| 259 | ULONG HighWaterNumberOfObjects; |
| 260 | ULONG HighWaterNumberOfHandles; |
| 261 | ULONG HighWaterPagedPoolUsage; |
| 262 | ULONG HighWaterNonPagedPoolUsage; |
| 263 | ULONG HighWaterNamePoolUsage; |
| 264 | ULONG HighWaterHandleTableUsage; |
| 265 | ULONG InvalidAttributes; |
| 266 | GENERIC_MAPPING GenericMapping; |
| 267 | ULONG ValidAccessMask; |
| 268 | BOOLEAN SecurityRequired; |
| 269 | BOOLEAN MaintainHandleCount; |
| 270 | ULONG PoolType; |
| 271 | ULONG DefaultPagedPoolCharge; |
| 272 | ULONG DefaultNonPagedPoolCharge; |
| 273 | } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION; |
| 274 | |
| 275 | typedef struct _OBJECT_ALL_INFORMATION { |
| 276 | ULONG NumberOfObjects; |
| 277 | OBJECT_TYPE_INFORMATION ObjectTypeInformation[1]; |
| 278 | }OBJECT_ALL_INFORMATION, *POBJECT_ALL_INFORMATION; |
| 279 | |
| 280 | typedef enum _FILE_INFORMATION_CLASS { |
| 281 | FileDirectoryInformation = 1, |
| 282 | FileFullDirectoryInformation, |
| 283 | FileBothDirectoryInformation, |
| 284 | FileBasicInformation, |
| 285 | FileStandardInformation, |
| 286 | FileInternalInformation, |
| 287 | FileEaInformation, |
| 288 | FileAccessInformation, |
| 289 | FileNameInformation, |
| 290 | FileRenameInformation, |
| 291 | FileLinkInformation, |
| 292 | FileNamesInformation, |
| 293 | FileDispositionInformation, |
| 294 | FilePositionInformation, |
| 295 | FileFullEaInformation, |
| 296 | FileModeInformation, |
| 297 | FileAlignmentInformation, |
| 298 | FileAllInformation, |
| 299 | FileAllocationInformation, |
| 300 | FileEndOfFileInformation, |
| 301 | FileAlternateNameInformation, |
| 302 | FileStreamInformation, |
| 303 | FilePipeInformation, |
| 304 | FilePipeLocalInformation, |
| 305 | FilePipeRemoteInformation, |
| 306 | FileMailslotQueryInformation, |
| 307 | FileMailslotSetInformation, |
| 308 | FileCompressionInformation, |
| 309 | FileObjectIdInformation, |
| 310 | FileCompletionInformation, |
| 311 | FileMoveClusterInformation, |
| 312 | FileQuotaInformation, |
| 313 | FileReparsePointInformation, |
| 314 | FileNetworkOpenInformation, |
| 315 | FileAttributeTagInformation, |
| 316 | FileTrackingInformation, |
| 317 | FileIdBothDirectoryInformation, |
| 318 | FileIdFullDirectoryInformation, |
| 319 | FileValidDataLengthInformation, |
| 320 | FileShortNameInformation = 40, |
| 321 | FileSfioReserveInformation = 44, |
| 322 | FileSfioVolumeInformation = 45, |
| 323 | FileHardLinkInformation = 46, |
| 324 | FileNormalizedNameInformation = 48, |
| 325 | FileIdGlobalTxDirectoryInformation = 50, |
| 326 | FileStandardLinkInformation = 54, |
| 327 | FileMaximumInformation |
| 328 | } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; |
| 329 | |
| 330 | typedef struct _FILE_DIRECTORY_INFORMATION { |
| 331 | ULONG NextEntryOffset; |
| 332 | ULONG FileIndex; |
| 333 | LARGE_INTEGER CreationTime; |
| 334 | LARGE_INTEGER LastAccessTime; |
| 335 | LARGE_INTEGER LastWriteTime; |
| 336 | LARGE_INTEGER ChangeTime; |
| 337 | LARGE_INTEGER EndOfFile; |
| 338 | LARGE_INTEGER AllocationSize; |
| 339 | ULONG FileAttributes; |
| 340 | ULONG FileNameLength; |
| 341 | WCHAR FileName[ANYSIZE_ARRAY]; |
| 342 | } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; |
| 343 | |
| 344 | typedef struct _FILE_FULL_DIR_INFORMATION { |
| 345 | ULONG NextEntryOffset; |
| 346 | ULONG FileIndex; |
| 347 | LARGE_INTEGER CreationTime; |
| 348 | LARGE_INTEGER LastAccessTime; |
| 349 | LARGE_INTEGER LastWriteTime; |
| 350 | LARGE_INTEGER ChangeTime; |
| 351 | LARGE_INTEGER EndOfFile; |
| 352 | LARGE_INTEGER AllocationSize; |
| 353 | ULONG FileAttributes; |
| 354 | ULONG FileNameLength; |
| 355 | ULONG EaSize; |
| 356 | WCHAR FileName[ANYSIZE_ARRAY]; |
| 357 | } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION; |
| 358 | |
| 359 | typedef struct _FILE_ID_FULL_DIR_INFORMATION { |
| 360 | ULONG NextEntryOffset; |
| 361 | ULONG FileIndex; |
| 362 | LARGE_INTEGER CreationTime; |
| 363 | LARGE_INTEGER LastAccessTime; |
| 364 | LARGE_INTEGER LastWriteTime; |
| 365 | LARGE_INTEGER ChangeTime; |
| 366 | LARGE_INTEGER EndOfFile; |
| 367 | LARGE_INTEGER AllocationSize; |
| 368 | ULONG FileAttributes; |
| 369 | ULONG FileNameLength; |
| 370 | ULONG EaSize; |
| 371 | LARGE_INTEGER FileId; |
| 372 | WCHAR FileName[ANYSIZE_ARRAY]; |
| 373 | } FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION; |
| 374 | |
| 375 | typedef struct _FILE_BOTH_DIR_INFORMATION { |
| 376 | ULONG NextEntryOffset; |
| 377 | 	 ULONG FileIndex; |
| 378 | LARGE_INTEGER CreationTime; |
| 379 | LARGE_INTEGER LastAccessTime; |
| 380 | LARGE_INTEGER LastWriteTime; |
| 381 | LARGE_INTEGER ChangeTime; |
| 382 | LARGE_INTEGER EndOfFile; |
| 383 | LARGE_INTEGER AllocationSize; |
| 384 | ULONG FileAttributes; |
| 385 | ULONG FileNameLength; |
| 386 | ULONG EaSize; |
| 387 | CHAR ShortNameLength; |
| 388 | WCHAR ShortName[12]; |
| 389 | WCHAR FileName[ANYSIZE_ARRAY]; |
| 390 | } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION; |
| 391 | |
| 392 | typedef struct _FILE_ID_BOTH_DIR_INFORMATION { |
| 393 | ULONG NextEntryOffset; |
| 394 | ULONG FileIndex; |
| 395 | LARGE_INTEGER CreationTime; |
| 396 | LARGE_INTEGER LastAccessTime; |
| 397 | LARGE_INTEGER LastWriteTime; |
| 398 | LARGE_INTEGER ChangeTime; |
| 399 | LARGE_INTEGER EndOfFile; |
| 400 | LARGE_INTEGER AllocationSize; |
| 401 | ULONG FileAttributes; |
| 402 | ULONG FileNameLength; |
| 403 | ULONG EaSize; |
| 404 | CHAR ShortNameLength; |
| 405 | WCHAR ShortName[12]; |
| 406 | LARGE_INTEGER FileId; |
| 407 | WCHAR FileName[ANYSIZE_ARRAY]; |
| 408 | } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION; |
| 409 | |
| 410 | /* Old names of dir info structures as (partially) used in Nebbitt's |
| 411 | Native API Reference. Keep for backward compatibility. */ |
| 412 | typedef struct _FILE_FULL_DIR_INFORMATION |
| 413 | FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION; |
| 414 | typedef struct _FILE_ID_FULL_DIR_INFORMATION |
| 415 | FILE_ID_FULL_DIRECTORY_INFORMATION, *PFILE_ID_FULL_DIRECTORY_INFORMATION; |
| 416 | typedef struct _FILE_BOTH_DIR_INFORMATION |
| 417 | FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION; |
| 418 | typedef struct _FILE_ID_BOTH_DIR_INFORMATION |
| 419 | FILE_ID_BOTH_DIRECTORY_INFORMATION, *PFILE_ID_BOTH_DIRECTORY_INFORMATION; |
| 420 | |
| 421 | typedef struct _FILE_BASIC_INFORMATION { |
| 422 | LARGE_INTEGER CreationTime; |
| 423 | LARGE_INTEGER LastAccessTime; |
| 424 | LARGE_INTEGER LastWriteTime; |
| 425 | LARGE_INTEGER ChangeTime; |
| 426 | ULONG FileAttributes; |
| 427 | } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; |
| 428 | |
| 429 | typedef struct _FILE_STANDARD_INFORMATION { |
| 430 | LARGE_INTEGER AllocationSize; |
| 431 | LARGE_INTEGER EndOfFile; |
| 432 | ULONG NumberOfLinks; |
| 433 | BOOLEAN DeletePending; |
| 434 | BOOLEAN Directory; |
| 435 | } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; |
| 436 | |
| 437 | typedef struct _FILE_INTERNAL_INFORMATION { |
| 438 | LARGE_INTEGER IndexNumber; |
| 439 | } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; |
| 440 | |
| 441 | typedef struct _FILE_EA_INFORMATION { |
| 442 | ULONG EaSize; |
| 443 | } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; |
| 444 | |
| 445 | typedef struct _FILE_ACCESS_INFORMATION { |
| 446 | ACCESS_MASK AccessFlags; |
| 447 | } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; |
| 448 | |
| 449 | typedef struct _FILE_LINK_INFORMATION { |
| 450 | BOOLEAN ReplaceIfExists; |
| 451 | HANDLE RootDirectory; |
| 452 | ULONG FileNameLength; |
| 453 | WCHAR FileName[1]; |
| 454 | } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; |
| 455 | |
| 456 | typedef struct _FILE_NAME_INFORMATION { |
| 457 | ULONG FileNameLength; |
| 458 | WCHAR FileName[1]; |
| 459 | } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; |
| 460 | |
| 461 | typedef struct _FILE_RENAME_INFORMATION { |
| 462 | BOOLEAN ReplaceIfExists; |
| 463 | HANDLE RootDirectory; |
| 464 | ULONG FileNameLength; |
| 465 | WCHAR FileName[1]; |
| 466 | } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; |
| 467 | |
| 468 | typedef struct _FILE_NAMES_INFORMATION { |
| 469 | ULONG NextEntryOffset; |
| 470 | ULONG FileIndex; |
| 471 | ULONG FileNameLength; |
| 472 | WCHAR FileName[1]; |
| 473 | } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION; |
| 474 | |
| 475 | typedef struct _FILE_DISPOSITION_INFORMATION { |
| 476 | BOOLEAN DoDeleteFile; |
| 477 | } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; |
| 478 | |
| 479 | typedef struct _FILE_POSITION_INFORMATION { |
| 480 | LARGE_INTEGER CurrentByteOffset; |
| 481 | } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; |
| 482 | |
| 483 | typedef struct _FILE_ALIGNMENT_INFORMATION { |
| 484 | ULONG AlignmentRequirement; |
| 485 | } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; |
| 486 | |
| 487 | typedef struct _FILE_ALLOCATION_INFORMATION { |
| 488 | LARGE_INTEGER AllocationSize; |
| 489 | } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION; |
| 490 | |
| 491 | typedef struct _FILE_END_OF_FILE_INFORMATION { |
| 492 | LARGE_INTEGER EndOfFile; |
| 493 | } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; |
| 494 | |
| 495 | typedef struct _FILE_NETWORK_OPEN_INFORMATION { |
| 496 | LARGE_INTEGER CreationTime; |
| 497 | LARGE_INTEGER LastAccessTime; |
| 498 | LARGE_INTEGER LastWriteTime; |
| 499 | LARGE_INTEGER ChangeTime; |
| 500 | LARGE_INTEGER AllocationSize; |
| 501 | LARGE_INTEGER EndOfFile; |
| 502 | ULONG FileAttributes; |
| 503 | } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; |
| 504 | |
| 505 | typedef struct _FILE_FULL_EA_INFORMATION { |
| 506 | ULONG NextEntryOffset; |
| 507 | UCHAR Flags; |
| 508 | UCHAR EaNameLength; |
| 509 | USHORT EaValueLength; |
| 510 | CHAR EaName[1]; |
| 511 | } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; |
| 512 | |
| 513 | typedef struct _FILE_MODE_INFORMATION { |
| 514 | ULONG Mode; |
| 515 | } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; |
| 516 | |
| 517 | typedef struct _FILE_STREAM_INFORMATION { |
| 518 | ULONG NextEntryOffset; |
| 519 | ULONG StreamNameLength; |
| 520 | LARGE_INTEGER StreamSize; |
| 521 | LARGE_INTEGER StreamAllocationSize; |
| 522 | WCHAR StreamName[1]; |
| 523 | } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION; |
| 524 | |
| 525 | typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { |
| 526 | ULONG FileAttributes; |
| 527 | ULONG ReparseTag; |
| 528 | } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; |
| 529 | |
| 530 | typedef struct _FILE_MAILSLOT_QUERY_INFORMATION { |
| 531 | ULONG MaximumMessageSize; |
| 532 | ULONG MailslotQuota; |
| 533 | ULONG NextMessageSize; |
| 534 | ULONG MessagesAvailable; |
| 535 | LARGE_INTEGER ReadTimeout; |
| 536 | } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION; |
| 537 | |
| 538 | typedef struct _FILE_MAILSLOT_SET_INFORMATION { |
| 539 | LARGE_INTEGER ReadTimeout; |
| 540 | } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; |
| 541 | |
| 542 | typedef struct _FILE_PIPE_LOCAL_INFORMATION { |
| 543 | ULONG NamedPipeType; |
| 544 | ULONG NamedPipeConfiguration; |
| 545 | ULONG MaximumInstances; |
| 546 | ULONG CurrentInstances; |
| 547 | ULONG InboundQuota; |
| 548 | ULONG ReadDataAvailable; |
| 549 | ULONG OutboundQuota; |
| 550 | ULONG WriteQuotaAvailable; |
| 551 | ULONG NamedPipeState; |
| 552 | ULONG NamedPipeEnd; |
| 553 | } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; |
| 554 | |
| 555 | typedef struct _FILE_ALL_INFORMATION { |
| 556 | FILE_BASIC_INFORMATION BasicInformation; |
| 557 | FILE_STANDARD_INFORMATION StandardInformation; |
| 558 | FILE_INTERNAL_INFORMATION InternalInformation; |
| 559 | FILE_EA_INFORMATION EaInformation; |
| 560 | FILE_ACCESS_INFORMATION AccessInformation; |
| 561 | FILE_POSITION_INFORMATION PositionInformation; |
| 562 | FILE_MODE_INFORMATION ModeInformation; |
| 563 | FILE_ALIGNMENT_INFORMATION AlignmentInformation; |
| 564 | FILE_NAME_INFORMATION NameInformation; |
| 565 | } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; |
| 566 | |
| 567 | typedef enum _FSINFOCLASS { |
| 568 | FileFsVolumeInformation = 1, |
| 569 | FileFsLabelInformation, |
| 570 | FileFsSizeInformation, |
| 571 | FileFsDeviceInformation, |
| 572 | FileFsAttributeInformation, |
| 573 | FileFsControlInformation, |
| 574 | FileFsFullSizeInformation, |
| 575 | FileFsObjectIdInformation, |
| 576 | FileFsDriverPathInformation, |
| 577 | FileFsVolumeFlagsInformation, |
| 578 | FileFsMaximumInformation |
| 579 | } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; |
| 580 | |
| 581 | typedef struct _FILE_FS_VOLUME_INFORMATION { |
| 582 | LARGE_INTEGER VolumeCreationTime; |
| 583 | ULONG VolumeSerialNumber; |
| 584 | ULONG VolumeLabelLength; |
| 585 | BOOLEAN SupportsObjects; |
| 586 | WCHAR VolumeLabel[1]; |
| 587 | } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; |
| 588 | |
| 589 | typedef struct _FILE_FS_LABEL_INFORMATION { |
| 590 | ULONG VolumeLabelLength; |
| 591 | WCHAR VolumeLabel[1]; |
| 592 | } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; |
| 593 | |
| 594 | typedef struct _FILE_FS_SIZE_INFORMATION { |
| 595 | LARGE_INTEGER TotalAllocationUnits; |
| 596 | LARGE_INTEGER AvailableAllocationUnits; |
| 597 | ULONG SectorsPerAllocationUnit; |
| 598 | ULONG BytesPerSector; |
| 599 | } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; |
| 600 | |
| 601 | typedef struct _FILE_FS_DEVICE_INFORMATION { |
| 602 | DEVICE_TYPE DeviceType; |
| 603 | ULONG Characteristics; |
| 604 | } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; |
| 605 | |
| 606 | typedef struct _FILE_FS_ATTRIBUTE_INFORMATION { |
| 607 | ULONG FileSystemAttributes; |
| 608 | ULONG MaximumComponentNameLength; |
| 609 | ULONG FileSystemNameLength; |
| 610 | WCHAR FileSystemName[1]; |
| 611 | } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; |
| 612 | |
| 613 | typedef struct _FILE_FS_FULL_SIZE_INFORMATION { |
| 614 | LARGE_INTEGER TotalAllocationUnits; |
| 615 | LARGE_INTEGER CallerAvailableAllocationUnits; |
| 616 | LARGE_INTEGER ActualAvailableAllocationUnits; |
| 617 | ULONG SectorsPerAllocationUnit; |
| 618 | ULONG BytesPerSector; |
| 619 | } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; |
| 620 | |
| 621 | typedef struct _FILE_FS_OBJECTID_INFORMATION { |
| 622 | UCHAR ObjectId[16]; |
| 623 | UCHAR ExtendedInfo[48]; |
| 624 | } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; |
| 625 | |
| 626 | typedef struct _IO_STATUS_BLOCK { |
| 627 | __C89_NAMELESS union { |
| 628 | NTSTATUS Status; |
| 629 | PVOID Pointer; |
| 630 | }; |
| 631 | ULONG_PTR Information; |
| 632 | } IO_STATUS_BLOCK,*PIO_STATUS_BLOCK; |
| 633 | |
| 634 | typedef VOID (NTAPI *PIO_APC_ROUTINE)(PVOID ApcContext,PIO_STATUS_BLOCK IoStatusBlock,ULONG Reserved); |
| 635 | |
| 636 | #ifdef __ia64__ |
| 637 | typedef struct _FRAME_POINTERS { |
| 638 | ULONGLONG MemoryStackFp; |
| 639 | ULONGLONG BackingStoreFp; |
| 640 | } FRAME_POINTERS,*PFRAME_POINTERS; |
| 641 | |
| 642 | #define UNWIND_HISTORY_TABLE_SIZE 12 |
| 643 | |
| 644 | typedef struct _RUNTIME_FUNCTION { |
| 645 | ULONG BeginAddress; |
| 646 | ULONG EndAddress; |
| 647 | ULONG UnwindInfoAddress; |
| 648 | } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION; |
| 649 | |
| 650 | typedef struct _UNWIND_HISTORY_TABLE_ENTRY { |
| 651 | ULONG64 ImageBase; |
| 652 | ULONG64 Gp; |
| 653 | PRUNTIME_FUNCTION FunctionEntry; |
| 654 | } UNWIND_HISTORY_TABLE_ENTRY,*PUNWIND_HISTORY_TABLE_ENTRY; |
| 655 | |
| 656 | typedef struct _UNWIND_HISTORY_TABLE { |
| 657 | ULONG Count; |
| 658 | UCHAR Search; |
| 659 | ULONG64 LowAddress; |
| 660 | ULONG64 HighAddress; |
| 661 | UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE]; |
| 662 | } UNWIND_HISTORY_TABLE,*PUNWIND_HISTORY_TABLE; |
| 663 | #endif |
| 664 | |
| 665 | typedef struct _VM_COUNTERS { |
| 666 | SIZE_T PeakVirtualSize; |
| 667 | SIZE_T VirtualSize; |
| 668 | ULONG PageFaultCount; |
| 669 | SIZE_T PeakWorkingSetSize; |
| 670 | SIZE_T WorkingSetSize; |
| 671 | SIZE_T QuotaPeakPagedPoolUsage; |
| 672 | SIZE_T QuotaPagedPoolUsage; |
| 673 | SIZE_T QuotaPeakNonPagedPoolUsage; |
| 674 | SIZE_T QuotaNonPagedPoolUsage; |
| 675 | SIZE_T PagefileUsage; |
| 676 | SIZE_T PeakPagefileUsage; |
| 677 | } VM_COUNTERS, *PVM_COUNTERS; |
| 678 | |
| 679 | typedef enum _THREAD_STATE { |
| 680 | StateInitialized = 0, |
| 681 | StateReady, StateRunning, StateStandby, StateTerminated, |
| 682 | StateWait, StateTransition, |
| 683 | StateUnknown |
| 684 | } THREAD_STATE; |
| 685 | |
| 686 | typedef struct _CLIENT_ID { |
| 687 | HANDLE UniqueProcess; |
| 688 | HANDLE UniqueThread; |
| 689 | } CLIENT_ID, *PCLIENT_ID; |
| 690 | |
| 691 | typedef LONG KPRIORITY; |
| 692 | |
| 693 | typedef enum _KWAIT_REASON { |
| 694 | Executive = 0, |
| 695 | FreePage, PageIn, PoolAllocation, DelayExecution, |
| 696 | Suspended, UserRequest, WrExecutive, WrFreePage, WrPageIn, |
| 697 | WrPoolAllocation, WrDelayExecution, WrSuspended, |
| 698 | WrUserRequest, WrEventPair, WrQueue, WrLpcReceive, |
| 699 | WrLpcReply, WrVirtualMemory, WrPageOut, WrRendezvous, |
| 700 | Spare2, Spare3, Spare4, Spare5, Spare6, WrKernel, |
| 701 | MaximumWaitReason |
| 702 | } KWAIT_REASON; |
| 703 | |
| 704 | typedef struct _SYSTEM_THREADS |
| 705 | { |
| 706 | LARGE_INTEGER KernelTime; |
| 707 | LARGE_INTEGER UserTime; |
| 708 | LARGE_INTEGER CreateTime; |
| 709 | ULONG WaitTime; |
| 710 | PVOID StartAddress; |
| 711 | CLIENT_ID ClientId; |
| 712 | KPRIORITY Priority; |
| 713 | KPRIORITY BasePriority; |
| 714 | ULONG ContextSwitchCount; |
| 715 | THREAD_STATE State; |
| 716 | KWAIT_REASON WaitReason; |
| 717 | } SYSTEM_THREADS, *PSYSTEM_THREADS; |
| 718 | |
| 719 | typedef struct _PROCESS_BASIC_INFORMATION { |
| 720 | NTSTATUS ExitStatus; |
| 721 | PPEB PebBaseAddress; |
| 722 | KAFFINITY AffinityMask; |
| 723 | KPRIORITY BasePriority; |
| 724 | ULONG_PTR UniqueProcessId; |
| 725 | ULONG_PTR InheritedFromUniqueProcessId; |
| 726 | } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION; |
| 727 | |
| 728 | typedef struct _KERNEL_USER_TIMES { |
| 729 | FILETIME CreateTime; |
| 730 | FILETIME ExitTime; |
| 731 | LARGE_INTEGER KernelTime; |
| 732 | LARGE_INTEGER UserTime; |
| 733 | } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; |
| 734 | |
| 735 | typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { |
| 736 | LARGE_INTEGER IdleTime; |
| 737 | LARGE_INTEGER KernelTime; |
| 738 | LARGE_INTEGER UserTime; |
| 739 | LARGE_INTEGER Reserved1[2]; |
| 740 | ULONG Reserved2; |
| 741 | } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION,*PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION; |
| 742 | |
| 743 | typedef struct _SYSTEM_PROCESS_INFORMATION { |
| 744 | ULONG NextEntryOffset; |
| 745 | ULONG NumberOfThreads; |
| 746 | LARGE_INTEGER Reserved[3]; |
| 747 | LARGE_INTEGER CreateTime; |
| 748 | LARGE_INTEGER UserTime; |
| 749 | LARGE_INTEGER KernelTime; |
| 750 | UNICODE_STRING ImageName; |
| 751 | KPRIORITY BasePriority; |
| 752 | HANDLE UniqueProcessId; |
| 753 | HANDLE InheritedFromUniqueProcessId; |
| 754 | ULONG HandleCount; |
| 755 | ULONG SessionId; |
| 756 | ULONG PageDirectoryBase; |
| 757 | VM_COUNTERS VirtualMemoryCounters; |
| 758 | SIZE_T PrivatePageCount; |
| 759 | IO_COUNTERS IoCounters; |
| 760 | } SYSTEM_PROCESS_INFORMATION,*PSYSTEM_PROCESS_INFORMATION; |
| 761 | |
| 762 | typedef struct _SYSTEM_THREAD_INFORMATION { |
| 763 | LARGE_INTEGER Reserved1[3]; |
| 764 | ULONG Reserved2; |
| 765 | PVOID StartAddress; |
| 766 | CLIENT_ID ClientId; |
| 767 | KPRIORITY Priority; |
| 768 | LONG BasePriority; |
| 769 | ULONG Reserved3; |
| 770 | ULONG ThreadState; |
| 771 | ULONG WaitReason; |
| 772 | } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION; |
| 773 | |
| 774 | typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION { |
| 775 | ULONG RegistryQuotaAllowed; |
| 776 | ULONG RegistryQuotaUsed; |
| 777 | PVOID Reserved1; |
| 778 | } SYSTEM_REGISTRY_QUOTA_INFORMATION,*PSYSTEM_REGISTRY_QUOTA_INFORMATION; |
| 779 | |
| 780 | typedef struct _SYSTEM_BASIC_INFORMATION { |
| 781 | BYTE Reserved1[4]; |
| 782 | ULONG MaximumIncrement; |
| 783 | ULONG PhysicalPageSize; |
| 784 | ULONG NumberOfPhysicalPages; |
| 785 | ULONG LowestPhysicalPage; |
| 786 | ULONG HighestPhysicalPage; |
| 787 | ULONG AllocationGranularity; |
| 788 | ULONG_PTR LowestUserAddress; |
| 789 | ULONG_PTR HighestUserAddress; |
| 790 | ULONG_PTR ActiveProcessors; |
| 791 | CCHAR NumberOfProcessors; |
| 792 | } SYSTEM_BASIC_INFORMATION,*PSYSTEM_BASIC_INFORMATION; |
| 793 | |
| 794 | typedef struct _SYSTEM_PROCESSOR_INFORMATION { |
| 795 | USHORT ProcessorArchitecture; |
| 796 | USHORT ProcessorLevel; |
| 797 | USHORT ProcessorRevision; |
| 798 | USHORT Unknown; |
| 799 | ULONG FeatureBits; |
| 800 | } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION; |
| 801 | |
| 802 | typedef struct _SYSTEM_TIMEOFDAY_INFORMATION { |
| 803 | LARGE_INTEGER BootTime; |
| 804 | LARGE_INTEGER CurrentTime; |
| 805 | LARGE_INTEGER TimeZoneBias; |
| 806 | ULONG CurrentTimeZoneId; |
| 807 | BYTE Reserved1[20]; |
| 808 | } SYSTEM_TIMEOFDAY_INFORMATION,*PSYSTEM_TIMEOFDAY_INFORMATION; |
| 809 | |
| 810 | typedef struct _SYSTEM_PERFORMANCE_INFORMATION { |
| 811 | LARGE_INTEGER IdleTime; |
| 812 | LARGE_INTEGER ReadTransferCount; |
| 813 | LARGE_INTEGER WriteTransferCount; |
| 814 | LARGE_INTEGER OtherTransferCount; |
| 815 | ULONG ReadOperationCount; |
| 816 | ULONG WriteOperationCount; |
| 817 | ULONG OtherOperationCount; |
| 818 | ULONG AvailablePages; |
| 819 | ULONG TotalCommittedPages; |
| 820 | ULONG TotalCommitLimit; |
| 821 | ULONG PeakCommitment; |
| 822 | ULONG PageFaults; |
| 823 | ULONG WriteCopyFaults; |
| 824 | ULONG TransitionFaults; |
| 825 | ULONG CacheTransitionFaults; |
| 826 | ULONG DemandZeroFaults; |
| 827 | ULONG PagesRead; |
| 828 | ULONG PageReadIos; |
| 829 | ULONG CacheReads; |
| 830 | ULONG CacheIos; |
| 831 | ULONG PagefilePagesWritten; |
| 832 | ULONG PagefilePageWriteIos; |
| 833 | ULONG MappedFilePagesWritten; |
| 834 | ULONG MappedFilePageWriteIos; |
| 835 | ULONG PagedPoolUsage; |
| 836 | ULONG NonPagedPoolUsage; |
| 837 | ULONG PagedPoolAllocs; |
| 838 | ULONG PagedPoolFrees; |
| 839 | ULONG NonPagedPoolAllocs; |
| 840 | ULONG NonPagedPoolFrees; |
| 841 | ULONG TotalFreeSystemPtes; |
| 842 | ULONG SystemCodePage; |
| 843 | ULONG TotalSystemDriverPages; |
| 844 | ULONG TotalSystemCodePages; |
| 845 | ULONG SmallNonPagedLookasideListAllocateHits; |
| 846 | ULONG SmallPagedLookasideListAllocateHits; |
| 847 | ULONG Reserved3; |
| 848 | ULONG MmSystemCachePage; |
| 849 | ULONG PagedPoolPage; |
| 850 | ULONG SystemDriverPage; |
| 851 | ULONG FastReadNoWait; |
| 852 | ULONG FastReadWait; |
| 853 | ULONG FastReadResourceMiss; |
| 854 | ULONG FastReadNotPossible; |
| 855 | ULONG FastMdlReadNoWait; |
| 856 | ULONG FastMdlReadWait; |
| 857 | ULONG FastMdlReadResourceMiss; |
| 858 | ULONG FastMdlReadNotPossible; |
| 859 | ULONG MapDataNoWait; |
| 860 | ULONG MapDataWait; |
| 861 | ULONG MapDataNoWaitMiss; |
| 862 | ULONG MapDataWaitMiss; |
| 863 | ULONG PinMappedDataCount; |
| 864 | ULONG PinReadNoWait; |
| 865 | ULONG PinReadWait; |
| 866 | ULONG PinReadNoWaitMiss; |
| 867 | ULONG PinReadWaitMiss; |
| 868 | ULONG CopyReadNoWait; |
| 869 | ULONG CopyReadWait; |
| 870 | ULONG CopyReadNoWaitMiss; |
| 871 | ULONG CopyReadWaitMiss; |
| 872 | ULONG MdlReadNoWait; |
| 873 | ULONG MdlReadWait; |
| 874 | ULONG MdlReadNoWaitMiss; |
| 875 | ULONG MdlReadWaitMiss; |
| 876 | ULONG ReadAheadIos; |
| 877 | ULONG LazyWriteIos; |
| 878 | ULONG LazyWritePages; |
| 879 | ULONG DataFlushes; |
| 880 | ULONG DataPages; |
| 881 | ULONG ContextSwitches; |
| 882 | ULONG FirstLevelTbFills; |
| 883 | ULONG SecondLevelTbFills; |
| 884 | ULONG SystemCalls; |
| 885 | } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION; |
| 886 | |
| 887 | typedef struct _SYSTEM_EXCEPTION_INFORMATION { |
| 888 | BYTE Reserved1[16]; |
| 889 | } SYSTEM_EXCEPTION_INFORMATION,*PSYSTEM_EXCEPTION_INFORMATION; |
| 890 | |
| 891 | typedef struct _SYSTEM_LOOKASIDE_INFORMATION { |
| 892 | BYTE Reserved1[32]; |
| 893 | } SYSTEM_LOOKASIDE_INFORMATION,*PSYSTEM_LOOKASIDE_INFORMATION; |
| 894 | |
| 895 | typedef struct _SYSTEM_INTERRUPT_INFORMATION { |
| 896 | BYTE Reserved1[24]; |
| 897 | } SYSTEM_INTERRUPT_INFORMATION,*PSYSTEM_INTERRUPT_INFORMATION; |
| 898 | |
| 899 | typedef struct _SYSTEM_POLICY_INFORMATION { |
| 900 | PVOID Reserved1[2]; |
| 901 | ULONG Reserved2[3]; |
| 902 | } SYSTEM_POLICY_INFORMATION, *PSYSTEM_POLICY_INFORMATION; |
| 903 | |
| 904 | typedef struct _SYSTEM_HANDLE_ENTRY { |
| 905 | ULONG OwnerPid; |
| 906 | BYTE ObjectType; |
| 907 | BYTE HandleFlags; |
| 908 | USHORT HandleValue; |
| 909 | PVOID ObjectPointer; |
| 910 | ULONG AccessMask; |
| 911 | } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY; |
| 912 | |
| 913 | typedef struct _SYSTEM_HANDLE_INFORMATION { |
| 914 | ULONG Count; |
| 915 | SYSTEM_HANDLE_ENTRY Handle[1]; |
| 916 | } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; |
| 917 | |
| 918 | typedef struct _SYSTEM_PAGEFILE_INFORMATION { |
| 919 | ULONG NextEntryOffset; |
| 920 | ULONG CurrentSize; |
| 921 | ULONG TotalUsed; |
| 922 | ULONG PeakUsed; |
| 923 | UNICODE_STRING FileName; |
| 924 | } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION; |
| 925 | |
| 926 | typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION { |
| 927 | ULONG Attributes; |
| 928 | ACCESS_MASK GrantedAccess; |
| 929 | ULONG HandleCount; |
| 930 | ULONG PointerCount; |
| 931 | ULONG Reserved[10]; |
| 932 | } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION; |
| 933 | |
| 934 | typedef struct __PUBLIC_OBJECT_TYPE_INFORMATION { |
| 935 | UNICODE_STRING TypeName; |
| 936 | ULONG Reserved[22]; |
| 937 | } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION; |
| 938 | |
| 939 | typedef enum _PROCESSINFOCLASS { |
| 940 | ProcessBasicInformation, |
| 941 | ProcessQuotaLimits, |
| 942 | ProcessIoCounters, |
| 943 | ProcessVmCounters, |
| 944 | ProcessTimes, |
| 945 | ProcessBasePriority, |
| 946 | ProcessRaisePriority, |
| 947 | ProcessDebugPort, |
| 948 | ProcessExceptionPort, |
| 949 | ProcessAccessToken, |
| 950 | ProcessLdtInformation, |
| 951 | ProcessLdtSize, |
| 952 | ProcessDefaultHardErrorMode, |
| 953 | ProcessIoPortHandlers, |
| 954 | ProcessPooledUsageAndLimits, |
| 955 | ProcessWorkingSetWatch, |
| 956 | ProcessUserModeIOPL, |
| 957 | ProcessEnableAlignmentFaultFixup, |
| 958 | ProcessPriorityClass, |
| 959 | ProcessWx86Information, |
| 960 | ProcessHandleCount, |
| 961 | ProcessAffinityMask, |
| 962 | ProcessPriorityBoost, |
| 963 | ProcessDeviceMap, |
| 964 | ProcessSessionInformation, |
| 965 | ProcessForegroundInformation, |
| 966 | ProcessWow64Information, |
| 967 | ProcessImageFileName, |
| 968 | ProcessLUIDDeviceMapsEnabled, |
| 969 | ProcessBreakOnTermination, |
| 970 | ProcessDebugObjectHandle, |
| 971 | ProcessDebugFlags, |
| 972 | ProcessHandleTracing, |
| 973 | ProcessIoPriority, |
| 974 | ProcessExecuteFlags, |
| 975 | ProcessTlsInformation, |
| 976 | ProcessCookie, |
| 977 | ProcessImageInformation, |
| 978 | ProcessCycleTime, |
| 979 | ProcessPagePriority, |
| 980 | ProcessInstrumentationCallback, |
| 981 | ProcessThreadStackAllocation, |
| 982 | ProcessWorkingSetWatchEx, |
| 983 | ProcessImageFileNameWin32, |
| 984 | ProcessImageFileMapping, |
| 985 | ProcessAffinityUpdateMode, |
| 986 | ProcessMemoryAllocationMode, |
| 987 | ProcessGroupInformation, |
| 988 | ProcessTokenVirtualizationEnabled, |
| 989 | ProcessConsoleHostProcess, |
| 990 | ProcessWindowInformation, |
| 991 | MaxProcessInfoClass |
| 992 | } PROCESSINFOCLASS; |
| 993 | |
| 994 | typedef enum _THREADINFOCLASS { |
| 995 | ThreadBasicInformation, |
| 996 | ThreadTimes, |
| 997 | ThreadPriority, |
| 998 | ThreadBasePriority, |
| 999 | ThreadAffinityMask, |
| 1000 | ThreadImpersonationToken, |
| 1001 | ThreadDescriptorTableEntry, |
| 1002 | ThreadEnableAlignmentFaultFixup, |
| 1003 | ThreadEventPair, |
| 1004 | ThreadQuerySetWin32StartAddress, |
| 1005 | ThreadZeroTlsCell, |
| 1006 | ThreadPerformanceCount, |
| 1007 | ThreadAmILastThread, |
| 1008 | ThreadIdealProcessor, |
| 1009 | ThreadPriorityBoost, |
| 1010 | ThreadSetTlsArrayAddress, |
| 1011 | ThreadIsIoPending, |
| 1012 | ThreadHideFromDebugger |
| 1013 | } THREADINFOCLASS; |
| 1014 | |
| 1015 | typedef struct _THREAD_NAME_INFORMATION { |
| 1016 | UNICODE_STRING ThreadName; |
| 1017 | } THREAD_NAME_INFORMATION, *PTHREAD_NAME_INFORMATION; |
| 1018 | |
| 1019 | #define CODEINTEGRITY_OPTION_ENABLED 0x01 |
| 1020 | #define CODEINTEGRITY_OPTION_TESTSIGN 0x02 |
| 1021 | #define CODEINTEGRITY_OPTION_UMCI_ENABLED 0x04 |
| 1022 | #define CODEINTEGRITY_OPTION_UMCI_AUDITMODE_ENABLED 0x08 |
| 1023 | #define CODEINTEGRITY_OPTION_UMCI_EXCLUSIONPATHS_ENABLED 0x10 |
| 1024 | #define CODEINTEGRITY_OPTION_TEST_BUILD 0x20 |
| 1025 | #define CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD 0x40 |
| 1026 | #define CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED 0x80 |
| 1027 | #define CODEINTEGRITY_OPTION_FLIGHT_BUILD 0x100 |
| 1028 | #define CODEINTEGRITY_OPTION_FLIGHTING_ENABLED 0x200 |
| 1029 | #define CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED 0x400 |
| 1030 | #define CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED 0x800 |
| 1031 | #define CODEINTEGRITY_OPTION_HVCI_KMCI_STRICTMODE_ENABLED 0x1000 |
| 1032 | #define CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED 0x2000 |
| 1033 | |
| 1034 | typedef struct _SYSTEM_CODEINTEGRITY_INFORMATION { |
| 1035 | ULONG Length; |
| 1036 | ULONG CodeIntegrityOptions; |
| 1037 | } SYSTEM_CODEINTEGRITY_INFORMATION, *PSYSTEM_CODEINTEGRITY_INFORMATION; |
| 1038 | |
| 1039 | typedef enum _SYSTEM_INFORMATION_CLASS { |
| 1040 | SystemBasicInformation = 0, |
| 1041 | SystemProcessorInformation = 1, |
| 1042 | SystemPerformanceInformation = 2, |
| 1043 | SystemTimeOfDayInformation = 3, |
| 1044 | SystemProcessInformation = 5, |
| 1045 | SystemProcessorPerformanceInformation = 8, |
| 1046 | SystemHandleInformation = 16, |
| 1047 | SystemPagefileInformation = 18, |
| 1048 | SystemInterruptInformation = 23, |
| 1049 | SystemExceptionInformation = 33, |
| 1050 | SystemRegistryQuotaInformation = 37, |
| 1051 | SystemLookasideInformation = 45, |
| 1052 | SystemCodeIntegrityInformation = 103, |
| 1053 | SystemPolicyInformation = 134 |
| 1054 | } SYSTEM_INFORMATION_CLASS; |
| 1055 | |
| 1056 | typedef enum _OBJECT_INFORMATION_CLASS { |
| 1057 | ObjectBasicInformation, |
| 1058 | ObjectNameInformation, |
| 1059 | ObjectTypeInformation, |
| 1060 | ObjectAllInformation, |
| 1061 | ObjectDataInformation |
| 1062 | } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS; |
| 1063 | |
| 1064 | #if (_WIN32_WINNT >= 0x0501) |
| 1065 | #define INTERNAL_TS_ACTIVE_CONSOLE_ID (*((volatile ULONG*)(0x7ffe02d8))) |
| 1066 | #endif |
| 1067 | |
| 1068 | #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length)) |
| 1069 | #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length)) |
| 1070 | #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length)) |
| 1071 | |
| 1072 | typedef struct _KEY_VALUE_ENTRY { |
| 1073 | PUNICODE_STRING ValueName; |
| 1074 | ULONG DataLength; |
| 1075 | ULONG DataOffset; |
| 1076 | ULONG Type; |
| 1077 | } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY; |
| 1078 | |
| 1079 | typedef enum _KEY_SET_INFORMATION_CLASS { |
| 1080 | KeyWriteTimeInformation, |
| 1081 | KeyWow64FlagsInformation, |
| 1082 | KeyControlFlagsInformation, |
| 1083 | KeySetVirtualizationInformation, |
| 1084 | KeySetDebugInformation, |
| 1085 | KeySetHandleTagsInformation, |
| 1086 | MaxKeySetInfoClass |
| 1087 | } KEY_SET_INFORMATION_CLASS; |
| 1088 | |
| 1089 | NTSTATUS NTAPI NtClose(HANDLE Handle); |
| 1090 | NTSTATUS NTAPI NtCreateFile(PHANDLE FileHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK IoStatusBlock,PLARGE_INTEGER AllocationSize,ULONG FileAttributes,ULONG ShareAccess,ULONG CreateDisposition,ULONG CreateOptions,PVOID EaBuffer,ULONG EaLength); |
| 1091 | NTSTATUS NTAPI NtOpenFile(PHANDLE FileHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK IoStatusBlock,ULONG ShareAccess,ULONG OpenOptions); |
| 1092 | NTSTATUS NTAPI NtRenameKey(HANDLE KeyHandle, PUNICODE_STRING NewName); |
| 1093 | NTSTATUS NTAPI NtNotifyChangeMultipleKeys(HANDLE MasterKeyHandle, ULONG Count, OBJECT_ATTRIBUTES SubordinateObjects[], HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG CompletionFilter, BOOLEAN WatchTree, PVOID Buffer, ULONG BufferSize, BOOLEAN Asynchronous); |
| 1094 | NTSTATUS NTAPI NtQueryMultipleValueKey(HANDLE KeyHandle, PKEY_VALUE_ENTRY ValueEntries, ULONG EntryCount, PVOID ValueBuffer, PULONG BufferLength, PULONG RequiredBufferLength); |
| 1095 | NTSTATUS NTAPI NtSetInformationKey(HANDLE KeyHandle, KEY_SET_INFORMATION_CLASS KeySetInformationClass, PVOID KeySetInformation, ULONG KeySetInformationLength); |
| 1096 | NTSTATUS NTAPI NtFsControlFile(HANDLE FileHandle,HANDLE Event,PIO_APC_ROUTINE ApcRoutine,PVOID ApcContext,PIO_STATUS_BLOCK IoStatusBlock,ULONG IoControlCode,PVOID InputBuffer,ULONG InputBufferLength,PVOID OutputBuffer,ULONG OutputBufferLength); |
| 1097 | NTSTATUS NTAPI NtDeviceIoControlFile(HANDLE FileHandle,HANDLE Event,PIO_APC_ROUTINE ApcRoutine,PVOID ApcContext,PIO_STATUS_BLOCK IoStatusBlock,ULONG IoControlCode,PVOID InputBuffer,ULONG InputBufferLength,PVOID OutputBuffer,ULONG OutputBufferLength); |
| 1098 | NTSTATUS NTAPI NtWaitForSingleObject(HANDLE Handle,BOOLEAN Alertable,PLARGE_INTEGER Timeout); |
| 1099 | BOOLEAN NTAPI RtlIsNameLegalDOS8Dot3(PUNICODE_STRING Name,POEM_STRING OemName,PBOOLEAN NameContainsSpaces); |
| 1100 | ULONG NTAPI RtlNtStatusToDosError (NTSTATUS Status); |
| 1101 | NTSTATUS NTAPI NtQueryInformationProcess(HANDLE ProcessHandle,PROCESSINFOCLASS ProcessInformationClass,PVOID ProcessInformation,ULONG ProcessInformationLength,PULONG ReturnLength); |
| 1102 | NTSTATUS NTAPI NtQueryInformationThread(HANDLE ThreadHandle,THREADINFOCLASS ThreadInformationClass,PVOID ThreadInformation,ULONG ThreadInformationLength,PULONG ReturnLength); |
| 1103 | NTSTATUS NTAPI NtSetInformationThread(HANDLE ThreadHandle,THREADINFOCLASS ThreadInformationClass,PVOID ThreadInformation,ULONG ThreadInformationLength); |
| 1104 | NTSTATUS NTAPI NtQueryInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass); |
| 1105 | NTSTATUS NTAPI NtQueryObject(HANDLE Handle,OBJECT_INFORMATION_CLASS ObjectInformationClass,PVOID ObjectInformation,ULONG ObjectInformationLength,PULONG ReturnLength); |
| 1106 | NTSTATUS NTAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength,PULONG ReturnLength); |
| 1107 | NTSTATUS NTAPI NtQuerySystemTime(PLARGE_INTEGER SystemTime); |
| 1108 | NTSTATUS NTAPI NtQueryTimerResolution(PULONG MaximumTime,PULONG MinimumTime,PULONG CurrentTime); |
| 1109 | NTSTATUS NTAPI NtQueryVolumeInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FS_INFORMATION_CLASS FsInformationClass); |
| 1110 | NTSTATUS NTAPI NtSetInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass); |
| 1111 | NTSTATUS NTAPI NtSetInformationProcess(HANDLE ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, PVOID ProcessInformation, ULONG ProcessInformationLength); |
| 1112 | NTSTATUS NTAPI NtSetVolumeInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass); |
| 1113 | NTSTATUS NTAPI RtlLocalTimeToSystemTime(PLARGE_INTEGER LocalTime,PLARGE_INTEGER SystemTime); |
| 1114 | BOOLEAN NTAPI RtlTimeToSecondsSince1970(PLARGE_INTEGER Time,PULONG ElapsedSeconds); |
| 1115 | VOID NTAPI RtlFreeAnsiString(PANSI_STRING AnsiString); |
| 1116 | VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString); |
| 1117 | VOID NTAPI RtlFreeOemString(POEM_STRING OemString); |
| 1118 | VOID NTAPI RtlInitString (PSTRING DestinationString,PCSZ SourceString); |
| 1119 | NTSTATUS NTAPI RtlInitStringEx(PSTRING DestinationString, PCSZ SourceString); |
| 1120 | VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString,PCSZ SourceString); |
| 1121 | NTSTATUS NTAPI RtlInitAnsiStringEx(PANSI_STRING DestinationString, PCSZ SourceString); |
| 1122 | VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString,PCWSTR SourceString); |
| 1123 | NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString,PCANSI_STRING SourceString,BOOLEAN AllocateDestinationString); |
| 1124 | NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString,PCUNICODE_STRING SourceString,BOOLEAN AllocateDestinationString); |
| 1125 | NTSTATUS NTAPI RtlUnicodeStringToOemString(POEM_STRING DestinationString,PCUNICODE_STRING SourceString,BOOLEAN AllocateDestinationString); |
| 1126 | NTSTATUS NTAPI RtlUnicodeToMultiByteSize(PULONG BytesInMultiByteString,PWCH UnicodeString,ULONG BytesInUnicodeString); |
| 1127 | NTSTATUS NTAPI RtlCharToInteger (PCSZ String,ULONG Base,PULONG Value); |
| 1128 | NTSTATUS NTAPI RtlConvertSidToUnicodeString(PUNICODE_STRING UnicodeString,PSID Sid,BOOLEAN AllocateDestinationString); |
| 1129 | ULONG NTAPI RtlUniform(PULONG Seed); |
| 1130 | VOID NTAPI RtlUnwind (PVOID TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD ExceptionRecord,PVOID ReturnValue); |
| 1131 | BOOL NTAPI RtlDosPathNameToNtPathName_U(PCWSTR DosPathName, PUNICODE_STRING NtPathName, PCWSTR *NtFileNamePart, VOID *DirectoryInfo); |
| 1132 | BOOLEAN NTAPI RtlPrefixUnicodeString(PCUNICODE_STRING String1, PCUNICODE_STRING String2, BOOLEAN CaseInSensitive); |
| 1133 | BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING target, LPCSTR src); |
| 1134 | #ifdef __ia64__ |
| 1135 | VOID RtlUnwind2(FRAME_POINTERS TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD ExceptionRecord,PVOID ReturnValue,PCONTEXT ContextRecord); |
| 1136 | VOID RtlUnwindEx(FRAME_POINTERS TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD ExceptionRecord,PVOID ReturnValue,PCONTEXT ContextRecord,PUNWIND_HISTORY_TABLE HistoryTable); |
| 1137 | #endif |
| 1138 | |
| 1139 | typedef NTSTATUS (NTAPI *PRTL_HEAP_COMMIT_ROUTINE) (PVOID Base, PVOID *CommitAddress, PSIZE_T CommitSize); |
| 1140 | |
| 1141 | typedef struct _RTL_HEAP_PARAMETERS { |
| 1142 | ULONG Length; |
| 1143 | SIZE_T SegmentReserve; |
| 1144 | SIZE_T SegmentCommit; |
| 1145 | SIZE_T DeCommitFreeBlockThreshold; |
| 1146 | SIZE_T DeCommitTotalFreeThreshold; |
| 1147 | SIZE_T MaximumAllocationSize; |
| 1148 | SIZE_T VirtualMemoryThreshold; |
| 1149 | SIZE_T InitialCommit; |
| 1150 | SIZE_T InitialReserve; |
| 1151 | PRTL_HEAP_COMMIT_ROUTINE CommitRoutine; |
| 1152 | SIZE_T Reserved[ 2 ]; |
| 1153 | } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS; |
| 1154 | |
| 1155 | BOOLEAN NTAPI RtlFreeHeap(PVOID HeapHandle, ULONG Flags, PVOID HeapBase); |
| 1156 | PVOID NTAPI RtlAllocateHeap(PVOID HeapHandle, ULONG Flags, SIZE_T Size); |
| 1157 | PVOID NTAPI RtlCreateHeap(ULONG Flags, PVOID HeapBase, SIZE_T ReserveSize, SIZE_T CommitSize, PVOID Lock, PRTL_HEAP_PARAMETERS Parameters); |
| 1158 | PVOID NTAPI RtlDestroyHeap(PVOID HeapHandle); |
| 1159 | |
| 1160 | #define LOGONID_CURRENT ((ULONG)-1) |
| 1161 | #define SERVERNAME_CURRENT ((HANDLE)NULL) |
| 1162 | |
| 1163 | typedef enum _WINSTATIONINFOCLASS { |
| 1164 | WinStationInformation = 8 |
| 1165 | } WINSTATIONINFOCLASS; |
| 1166 | |
| 1167 | typedef struct _WINSTATIONINFORMATIONW { |
| 1168 | BYTE Reserved2[70]; |
| 1169 | ULONG LogonId; |
| 1170 | BYTE Reserved3[1140]; |
| 1171 | } WINSTATIONINFORMATIONW,*PWINSTATIONINFORMATIONW; |
| 1172 | |
| 1173 | typedef BOOLEAN (NTAPI *PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG); |
| 1174 | |
| 1175 | #ifdef __cplusplus |
| 1176 | } |
| 1177 | #endif |
| 1178 | |
| 1179 | #endif |
| 1180 | |