master
   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
  32extern "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
  66typedef 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