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