ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ntddk.h
Go to the documentation of this file.
00001 /*
00002  * ntddk.h
00003  *
00004  * Windows NT Device Driver Kit
00005  *
00006  * This file is part of the ReactOS DDK package.
00007  *
00008  * Contributors:
00009  *   Amine Khaldi
00010  *   Timo Kreuzer (timo.kreuzer@reactos.org)
00011  *
00012  * THIS SOFTWARE IS NOT COPYRIGHTED
00013  *
00014  * This source code is offered for use in the public domain. You may
00015  * use, modify or distribute it freely.
00016  *
00017  * This code is distributed in the hope that it will be useful but
00018  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00019  * DISCLAIMED. This includes but is not limited to warranties of
00020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00021  *
00022  */
00023 
00024 #pragma once
00025 
00026 #define _NTDDK_
00027 
00028 #if !defined(_NTHAL_) && !defined(_NTIFS_)
00029 #define _NTDDK_INCLUDED_
00030 #define _DDK_DRIVER_
00031 #endif
00032 
00033 /* Dependencies */
00034 
00035 #define NT_INCLUDED
00036 #define _CTYPE_DISABLE_MACROS
00037 
00038 #include <wdm.h>
00039 #include <excpt.h>
00040 #include <ntdef.h>
00041 #include <ntstatus.h>
00042 #include <mce.h>
00043 #include <bugcodes.h>
00044 #include <ntiologc.h>
00045 
00046 #include <stdarg.h> // FIXME
00047 #include <basetyps.h> // FIXME
00048 
00049 
00050 #ifdef __cplusplus
00051 extern "C" {
00052 #endif
00053 
00054 /* GUID and UUID */
00055 #ifndef _NTLSA_IFS_
00056 #ifndef _NTLSA_AUDIT_
00057 #define _NTLSA_AUDIT_
00058 
00059 #ifndef GUID_DEFINED
00060 #include <guiddef.h>
00061 #endif
00062 
00063 #endif /* _NTLSA_AUDIT_ */
00064 #endif /* _NTLSA_IFS_ */
00065 
00066 typedef GUID UUID;
00067 
00068 struct _LOADER_PARAMETER_BLOCK;
00069 struct _CREATE_DISK;
00070 struct _DRIVE_LAYOUT_INFORMATION_EX;
00071 struct _SET_PARTITION_INFORMATION_EX;
00072 
00073 typedef struct _BUS_HANDLER *PBUS_HANDLER;
00074 typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
00075 #if defined(_NTHAL_INCLUDED_)
00076 typedef struct _KAFFINITY_EX *PKAFFINITY_EX;
00077 #endif
00078 typedef struct _PEB *PPEB;
00079 
00080 #ifndef _NTIMAGE_
00081 
00082 typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32;
00083 typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64;
00084 
00085 #ifdef _WIN64
00086 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
00087 #else
00088 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
00089 #endif
00090 
00091 #endif /* _NTIMAGE_ */
00092 
00093 /******************************************************************************
00094  *                            Executive Types                                 *
00095  ******************************************************************************/
00096 typedef struct _ZONE_SEGMENT_HEADER {
00097   SINGLE_LIST_ENTRY SegmentList;
00098   PVOID Reserved;
00099 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
00100 
00101 typedef struct _ZONE_HEADER {
00102   SINGLE_LIST_ENTRY FreeList;
00103   SINGLE_LIST_ENTRY SegmentList;
00104   ULONG BlockSize;
00105   ULONG TotalSegmentSize;
00106 } ZONE_HEADER, *PZONE_HEADER;
00107 
00108 #define PROTECTED_POOL                    0x80000000
00109 
00110 /******************************************************************************
00111  *                         I/O Manager Types                                  *
00112  ******************************************************************************/
00113 
00114 /* DEVICE_OBJECT.Flags */
00115 #define DO_DEVICE_HAS_NAME                0x00000040
00116 #define DO_SYSTEM_BOOT_PARTITION          0x00000100
00117 #define DO_LONG_TERM_REQUESTS             0x00000200
00118 #define DO_NEVER_LAST_DEVICE              0x00000400
00119 #define DO_LOW_PRIORITY_FILESYSTEM        0x00010000
00120 #define DO_SUPPORTS_TRANSACTIONS          0x00040000
00121 #define DO_FORCE_NEITHER_IO               0x00080000
00122 #define DO_VOLUME_DEVICE_OBJECT           0x00100000
00123 #define DO_SYSTEM_SYSTEM_PARTITION        0x00200000
00124 #define DO_SYSTEM_CRITICAL_PARTITION      0x00400000
00125 #define DO_DISALLOW_EXECUTE               0x00800000
00126 
00127 #ifndef _ARC_DDK_
00128 #define _ARC_DDK_
00129 typedef enum _CONFIGURATION_TYPE {
00130   ArcSystem,
00131   CentralProcessor,
00132   FloatingPointProcessor,
00133   PrimaryIcache,
00134   PrimaryDcache,
00135   SecondaryIcache,
00136   SecondaryDcache,
00137   SecondaryCache,
00138   EisaAdapter,
00139   TcAdapter,
00140   ScsiAdapter,
00141   DtiAdapter,
00142   MultiFunctionAdapter,
00143   DiskController,
00144   TapeController,
00145   CdromController,
00146   WormController,
00147   SerialController,
00148   NetworkController,
00149   DisplayController,
00150   ParallelController,
00151   PointerController,
00152   KeyboardController,
00153   AudioController,
00154   OtherController,
00155   DiskPeripheral,
00156   FloppyDiskPeripheral,
00157   TapePeripheral,
00158   ModemPeripheral,
00159   MonitorPeripheral,
00160   PrinterPeripheral,
00161   PointerPeripheral,
00162   KeyboardPeripheral,
00163   TerminalPeripheral,
00164   OtherPeripheral,
00165   LinePeripheral,
00166   NetworkPeripheral,
00167   SystemMemory,
00168   DockingInformation,
00169   RealModeIrqRoutingTable,
00170   RealModePCIEnumeration,
00171   MaximumType
00172 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
00173 #endif /* !_ARC_DDK_ */
00174 
00175 /*
00176 ** IRP function codes
00177 */
00178 
00179 #define IRP_MN_QUERY_DIRECTORY            0x01
00180 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY    0x02
00181 
00182 #define IRP_MN_USER_FS_REQUEST            0x00
00183 #define IRP_MN_MOUNT_VOLUME               0x01
00184 #define IRP_MN_VERIFY_VOLUME              0x02
00185 #define IRP_MN_LOAD_FILE_SYSTEM           0x03
00186 #define IRP_MN_TRACK_LINK                 0x04
00187 #define IRP_MN_KERNEL_CALL                0x04
00188 
00189 #define IRP_MN_LOCK                       0x01
00190 #define IRP_MN_UNLOCK_SINGLE              0x02
00191 #define IRP_MN_UNLOCK_ALL                 0x03
00192 #define IRP_MN_UNLOCK_ALL_BY_KEY          0x04
00193 
00194 #define IRP_MN_FLUSH_AND_PURGE          0x01
00195 
00196 #define IRP_MN_NORMAL                     0x00
00197 #define IRP_MN_DPC                        0x01
00198 #define IRP_MN_MDL                        0x02
00199 #define IRP_MN_COMPLETE                   0x04
00200 #define IRP_MN_COMPRESSED                 0x08
00201 
00202 #define IRP_MN_MDL_DPC                    (IRP_MN_MDL | IRP_MN_DPC)
00203 #define IRP_MN_COMPLETE_MDL               (IRP_MN_COMPLETE | IRP_MN_MDL)
00204 #define IRP_MN_COMPLETE_MDL_DPC           (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
00205 
00206 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
00207 
00208 #define IO_CHECK_CREATE_PARAMETERS      0x0200
00209 #define IO_ATTACH_DEVICE                0x0400
00210 #define IO_IGNORE_SHARE_ACCESS_CHECK    0x0800
00211 
00212 typedef NTSTATUS
00213 (NTAPI *PIO_QUERY_DEVICE_ROUTINE)(
00214   _In_ PVOID Context,
00215   _In_ PUNICODE_STRING PathName,
00216   _In_ INTERFACE_TYPE BusType,
00217   _In_ ULONG BusNumber,
00218   _In_ PKEY_VALUE_FULL_INFORMATION *BusInformation,
00219   _In_ CONFIGURATION_TYPE ControllerType,
00220   _In_ ULONG ControllerNumber,
00221   _In_ PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
00222   _In_ CONFIGURATION_TYPE PeripheralType,
00223   _In_ ULONG PeripheralNumber,
00224   _In_ PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
00225 
00226 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
00227   IoQueryDeviceIdentifier = 0,
00228   IoQueryDeviceConfigurationData,
00229   IoQueryDeviceComponentInformation,
00230   IoQueryDeviceMaxData
00231 } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
00232 
00233 typedef VOID
00234 (NTAPI *PDRIVER_REINITIALIZE)(
00235   _In_ struct _DRIVER_OBJECT *DriverObject,
00236   _In_opt_ PVOID Context,
00237   _In_ ULONG Count);
00238 
00239 typedef struct _CONTROLLER_OBJECT {
00240   CSHORT Type;
00241   CSHORT Size;
00242   PVOID ControllerExtension;
00243   KDEVICE_QUEUE DeviceWaitQueue;
00244   ULONG Spare1;
00245   LARGE_INTEGER Spare2;
00246 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
00247 
00248 #define DRVO_REINIT_REGISTERED          0x00000008
00249 #define DRVO_INITIALIZED                0x00000010
00250 #define DRVO_BOOTREINIT_REGISTERED      0x00000020
00251 #define DRVO_LEGACY_RESOURCES           0x00000040
00252 
00253 typedef struct _CONFIGURATION_INFORMATION {
00254   ULONG DiskCount;
00255   ULONG FloppyCount;
00256   ULONG CdRomCount;
00257   ULONG TapeCount;
00258   ULONG ScsiPortCount;
00259   ULONG SerialCount;
00260   ULONG ParallelCount;
00261   BOOLEAN AtDiskPrimaryAddressClaimed;
00262   BOOLEAN AtDiskSecondaryAddressClaimed;
00263   ULONG Version;
00264   ULONG MediumChangerCount;
00265 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
00266 
00267 typedef struct _DISK_SIGNATURE {
00268   ULONG PartitionStyle;
00269   _ANONYMOUS_UNION union {
00270     struct {
00271       ULONG Signature;
00272       ULONG CheckSum;
00273     } Mbr;
00274     struct {
00275       GUID DiskId;
00276     } Gpt;
00277   } DUMMYUNIONNAME;
00278 } DISK_SIGNATURE, *PDISK_SIGNATURE;
00279 
00280 typedef struct _TXN_PARAMETER_BLOCK {
00281   USHORT Length;
00282   USHORT TxFsContext;
00283   PVOID TransactionObject;
00284 } TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK;
00285 
00286 #define TXF_MINIVERSION_DEFAULT_VIEW        (0xFFFE)
00287 
00288 typedef struct _IO_DRIVER_CREATE_CONTEXT {
00289   CSHORT Size;
00290   struct _ECP_LIST *ExtraCreateParameter;
00291   PVOID DeviceObjectHint;
00292   PTXN_PARAMETER_BLOCK TxnParameters;
00293 } IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT;
00294 
00295 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD {
00296   USHORT Size;
00297   USHORT Version;
00298   PVOID Context;
00299   PINTERFACE_REFERENCE InterfaceReference;
00300   PINTERFACE_DEREFERENCE InterfaceDereference;
00301   PGET_SET_DEVICE_DATA SetBusData;
00302   PGET_SET_DEVICE_DATA GetBusData;
00303   UCHAR CapabilityID;
00304 } AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD;
00305 
00306 _IRQL_requires_max_(PASSIVE_LEVEL)
00307 _Must_inspect_result_
00308 typedef NTSTATUS
00309 (NTAPI *PGET_LOCATION_STRING)(
00310   _Inout_opt_ PVOID Context,
00311   _Outptr_
00312   _At_(*LocationStrings,
00313     _When_(return == 0, __drv_allocatesMem(Mem)))
00314     PZZWSTR *LocationStrings);
00315 
00316 typedef struct _PNP_LOCATION_INTERFACE {
00317   USHORT Size;
00318   USHORT Version;
00319   PVOID Context;
00320   PINTERFACE_REFERENCE InterfaceReference;
00321   PINTERFACE_DEREFERENCE InterfaceDereference;
00322   PGET_LOCATION_STRING GetLocationString;
00323 } PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE;
00324 
00325 typedef enum _ARBITER_ACTION {
00326   ArbiterActionTestAllocation,
00327   ArbiterActionRetestAllocation,
00328   ArbiterActionCommitAllocation,
00329   ArbiterActionRollbackAllocation,
00330   ArbiterActionQueryAllocatedResources,
00331   ArbiterActionWriteReservedResources,
00332   ArbiterActionQueryConflict,
00333   ArbiterActionQueryArbitrate,
00334   ArbiterActionAddReserved,
00335   ArbiterActionBootAllocation
00336 } ARBITER_ACTION, *PARBITER_ACTION;
00337 
00338 typedef struct _ARBITER_CONFLICT_INFO {
00339   PDEVICE_OBJECT OwningObject;
00340   ULONGLONG Start;
00341   ULONGLONG End;
00342 } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
00343 
00344 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS {
00345   _Inout_ PLIST_ENTRY ArbitrationList;
00346   _In_ ULONG AllocateFromCount;
00347   _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
00348 } ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS;
00349 
00350 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS {
00351   _Inout_ PLIST_ENTRY ArbitrationList;
00352   _In_ ULONG AllocateFromCount;
00353   _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
00354 } ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS;
00355 
00356 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS {
00357   _Inout_ PLIST_ENTRY ArbitrationList;
00358 } ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS;
00359 
00360 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS {
00361   _Out_ PCM_PARTIAL_RESOURCE_LIST *AllocatedResources;
00362 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS;
00363 
00364 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS {
00365   _In_ PDEVICE_OBJECT PhysicalDeviceObject;
00366   _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource;
00367   _Out_ PULONG ConflictCount;
00368   _Out_ PARBITER_CONFLICT_INFO *Conflicts;
00369 } ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS;
00370 
00371 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS {
00372   _In_ PLIST_ENTRY ArbitrationList;
00373 } ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS;
00374 
00375 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS {
00376   _In_ PDEVICE_OBJECT ReserveDevice;
00377 } ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS;
00378 
00379 typedef struct _ARBITER_PARAMETERS {
00380   union {
00381     ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation;
00382     ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation;
00383     ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation;
00384     ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources;
00385     ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict;
00386     ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate;
00387     ARBITER_ADD_RESERVED_PARAMETERS AddReserved;
00388   } Parameters;
00389 } ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
00390 
00391 typedef enum _ARBITER_REQUEST_SOURCE {
00392   ArbiterRequestUndefined = -1,
00393   ArbiterRequestLegacyReported,
00394   ArbiterRequestHalReported,
00395   ArbiterRequestLegacyAssigned,
00396   ArbiterRequestPnpDetected,
00397   ArbiterRequestPnpEnumerated
00398 } ARBITER_REQUEST_SOURCE;
00399 
00400 typedef enum _ARBITER_RESULT {
00401   ArbiterResultUndefined = -1,
00402   ArbiterResultSuccess,
00403   ArbiterResultExternalConflict,
00404   ArbiterResultNullRequest
00405 } ARBITER_RESULT;
00406 
00407 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
00408 
00409 typedef struct _ARBITER_LIST_ENTRY {
00410   LIST_ENTRY ListEntry;
00411   ULONG AlternativeCount;
00412   PIO_RESOURCE_DESCRIPTOR Alternatives;
00413   PDEVICE_OBJECT PhysicalDeviceObject;
00414   ARBITER_REQUEST_SOURCE RequestSource;
00415   ULONG Flags;
00416   LONG_PTR WorkSpace;
00417   INTERFACE_TYPE InterfaceType;
00418   ULONG SlotNumber;
00419   ULONG BusNumber;
00420   PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment;
00421   PIO_RESOURCE_DESCRIPTOR SelectedAlternative;
00422   ARBITER_RESULT Result;
00423 } ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY;
00424 
00425 typedef NTSTATUS
00426 (NTAPI *PARBITER_HANDLER)(
00427   _Inout_opt_ PVOID Context,
00428   _In_ ARBITER_ACTION Action,
00429   _Inout_ PARBITER_PARAMETERS Parameters);
00430 
00431 #define ARBITER_PARTIAL 0x00000001
00432 
00433 typedef struct _ARBITER_INTERFACE {
00434   USHORT Size;
00435   USHORT Version;
00436   PVOID Context;
00437   PINTERFACE_REFERENCE InterfaceReference;
00438   PINTERFACE_DEREFERENCE InterfaceDereference;
00439   PARBITER_HANDLER ArbiterHandler;
00440   ULONG Flags;
00441 } ARBITER_INTERFACE, *PARBITER_INTERFACE;
00442 
00443 typedef enum _RESOURCE_TRANSLATION_DIRECTION {
00444   TranslateChildToParent,
00445   TranslateParentToChild
00446 } RESOURCE_TRANSLATION_DIRECTION;
00447 
00448 typedef NTSTATUS
00449 (NTAPI *PTRANSLATE_RESOURCE_HANDLER)(
00450   _Inout_opt_ PVOID Context,
00451   _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
00452   _In_ RESOURCE_TRANSLATION_DIRECTION Direction,
00453   _In_opt_ ULONG AlternativesCount,
00454   _In_reads_opt_(AlternativesCount) IO_RESOURCE_DESCRIPTOR Alternatives[],
00455   _In_ PDEVICE_OBJECT PhysicalDeviceObject,
00456   _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Target);
00457 
00458 typedef NTSTATUS
00459 (NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
00460   _Inout_opt_ PVOID Context,
00461   _In_ PIO_RESOURCE_DESCRIPTOR Source,
00462   _In_ PDEVICE_OBJECT PhysicalDeviceObject,
00463   _Out_ PULONG TargetCount,
00464   _Out_writes_(*TargetCount) PIO_RESOURCE_DESCRIPTOR *Target);
00465 
00466 typedef struct _TRANSLATOR_INTERFACE {
00467   USHORT Size;
00468   USHORT Version;
00469   PVOID Context;
00470   PINTERFACE_REFERENCE InterfaceReference;
00471   PINTERFACE_DEREFERENCE InterfaceDereference;
00472   PTRANSLATE_RESOURCE_HANDLER TranslateResources;
00473   PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
00474 } TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
00475 
00476 typedef struct _PCI_AGP_CAPABILITY {
00477   PCI_CAPABILITIES_HEADER Header;
00478   USHORT Minor:4;
00479   USHORT Major:4;
00480   USHORT Rsvd1:8;
00481   struct _PCI_AGP_STATUS {
00482     ULONG Rate:3;
00483     ULONG Agp3Mode:1;
00484     ULONG FastWrite:1;
00485     ULONG FourGB:1;
00486     ULONG HostTransDisable:1;
00487     ULONG Gart64:1;
00488     ULONG ITA_Coherent:1;
00489     ULONG SideBandAddressing:1;
00490     ULONG CalibrationCycle:3;
00491     ULONG AsyncRequestSize:3;
00492     ULONG Rsvd1:1;
00493     ULONG Isoch:1;
00494     ULONG Rsvd2:6;
00495     ULONG RequestQueueDepthMaximum:8;
00496   } AGPStatus;
00497   struct _PCI_AGP_COMMAND {
00498     ULONG Rate:3;
00499     ULONG Rsvd1:1;
00500     ULONG FastWriteEnable:1;
00501     ULONG FourGBEnable:1;
00502     ULONG Rsvd2:1;
00503     ULONG Gart64:1;
00504     ULONG AGPEnable:1;
00505     ULONG SBAEnable:1;
00506     ULONG CalibrationCycle:3;
00507     ULONG AsyncReqSize:3;
00508     ULONG Rsvd3:8;
00509     ULONG RequestQueueDepth:8;
00510   } AGPCommand;
00511 } PCI_AGP_CAPABILITY, *PPCI_AGP_CAPABILITY;
00512 
00513 typedef enum _EXTENDED_AGP_REGISTER {
00514   IsochStatus,
00515   AgpControl,
00516   ApertureSize,
00517   AperturePageSize,
00518   GartLow,
00519   GartHigh,
00520   IsochCommand
00521 } EXTENDED_AGP_REGISTER, *PEXTENDED_AGP_REGISTER;
00522 
00523 typedef struct _PCI_AGP_ISOCH_STATUS {
00524   ULONG ErrorCode:2;
00525   ULONG Rsvd1:1;
00526   ULONG Isoch_L:3;
00527   ULONG Isoch_Y:2;
00528   ULONG Isoch_N:8;
00529   ULONG Rsvd2:16;
00530 } PCI_AGP_ISOCH_STATUS, *PPCI_AGP_ISOCH_STATUS;
00531 
00532 typedef struct _PCI_AGP_CONTROL {
00533   ULONG Rsvd1:7;
00534   ULONG GTLB_Enable:1;
00535   ULONG AP_Enable:1;
00536   ULONG CAL_Disable:1;
00537   ULONG Rsvd2:22;
00538 } PCI_AGP_CONTROL, *PPCI_AGP_CONTROL;
00539 
00540 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE {
00541   USHORT PageSizeMask:11;
00542   USHORT Rsvd1:1;
00543   USHORT PageSizeSelect:4;
00544 } PCI_AGP_APERTURE_PAGE_SIZE, *PPCI_AGP_APERTURE_PAGE_SIZE;
00545 
00546 typedef struct _PCI_AGP_ISOCH_COMMAND {
00547   USHORT Rsvd1:6;
00548   USHORT Isoch_Y:2;
00549   USHORT Isoch_N:8;
00550 } PCI_AGP_ISOCH_COMMAND, *PPCI_AGP_ISOCH_COMMAND;
00551 
00552 typedef struct PCI_AGP_EXTENDED_CAPABILITY {
00553   PCI_AGP_ISOCH_STATUS IsochStatus;
00554   PCI_AGP_CONTROL AgpControl;
00555   USHORT ApertureSize;
00556   PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize;
00557   ULONG GartLow;
00558   ULONG GartHigh;
00559   PCI_AGP_ISOCH_COMMAND IsochCommand;
00560 } PCI_AGP_EXTENDED_CAPABILITY, *PPCI_AGP_EXTENDED_CAPABILITY;
00561 
00562 #define PCI_AGP_RATE_1X     0x1
00563 #define PCI_AGP_RATE_2X     0x2
00564 #define PCI_AGP_RATE_4X     0x4
00565 
00566 #define PCIX_MODE_CONVENTIONAL_PCI  0x0
00567 #define PCIX_MODE1_66MHZ            0x1
00568 #define PCIX_MODE1_100MHZ           0x2
00569 #define PCIX_MODE1_133MHZ           0x3
00570 #define PCIX_MODE2_266_66MHZ        0x9
00571 #define PCIX_MODE2_266_100MHZ       0xA
00572 #define PCIX_MODE2_266_133MHZ       0xB
00573 #define PCIX_MODE2_533_66MHZ        0xD
00574 #define PCIX_MODE2_533_100MHZ       0xE
00575 #define PCIX_MODE2_533_133MHZ       0xF
00576 
00577 #define PCIX_VERSION_MODE1_ONLY     0x0
00578 #define PCIX_VERSION_MODE2_ECC      0x1
00579 #define PCIX_VERSION_DUAL_MODE_ECC  0x2
00580 
00581 typedef struct _PCIX_BRIDGE_CAPABILITY {
00582   PCI_CAPABILITIES_HEADER Header;
00583   union {
00584     _ANONYMOUS_STRUCT struct {
00585       USHORT Bus64Bit:1;
00586       USHORT Bus133MHzCapable:1;
00587       USHORT SplitCompletionDiscarded:1;
00588       USHORT UnexpectedSplitCompletion:1;
00589       USHORT SplitCompletionOverrun:1;
00590       USHORT SplitRequestDelayed:1;
00591       USHORT BusModeFrequency:4;
00592       USHORT Rsvd:2;
00593       USHORT Version:2;
00594       USHORT Bus266MHzCapable:1;
00595       USHORT Bus533MHzCapable:1;
00596     } DUMMYSTRUCTNAME;
00597   USHORT AsUSHORT;
00598   } SecondaryStatus;
00599   union {
00600     _ANONYMOUS_STRUCT struct {
00601       ULONG FunctionNumber:3;
00602       ULONG DeviceNumber:5;
00603       ULONG BusNumber:8;
00604       ULONG Device64Bit:1;
00605       ULONG Device133MHzCapable:1;
00606       ULONG SplitCompletionDiscarded:1;
00607       ULONG UnexpectedSplitCompletion:1;
00608       ULONG SplitCompletionOverrun:1;
00609       ULONG SplitRequestDelayed:1;
00610       ULONG Rsvd:7;
00611       ULONG DIMCapable:1;
00612       ULONG Device266MHzCapable:1;
00613       ULONG Device533MHzCapable:1;
00614     } DUMMYSTRUCTNAME;
00615     ULONG AsULONG;
00616   } BridgeStatus;
00617   USHORT UpstreamSplitTransactionCapacity;
00618   USHORT UpstreamSplitTransactionLimit;
00619   USHORT DownstreamSplitTransactionCapacity;
00620   USHORT DownstreamSplitTransactionLimit;
00621   union {
00622     _ANONYMOUS_STRUCT struct {
00623       ULONG SelectSecondaryRegisters:1;
00624       ULONG ErrorPresentInOtherBank:1;
00625       ULONG AdditionalCorrectableError:1;
00626       ULONG AdditionalUncorrectableError:1;
00627       ULONG ErrorPhase:3;
00628       ULONG ErrorCorrected:1;
00629       ULONG Syndrome:8;
00630       ULONG ErrorFirstCommand:4;
00631       ULONG ErrorSecondCommand:4;
00632       ULONG ErrorUpperAttributes:4;
00633       ULONG ControlUpdateEnable:1;
00634       ULONG Rsvd:1;
00635       ULONG DisableSingleBitCorrection:1;
00636       ULONG EccMode:1;
00637     } DUMMYSTRUCTNAME;
00638   ULONG AsULONG;
00639   } EccControlStatus;
00640   ULONG EccFirstAddress;
00641   ULONG EccSecondAddress;
00642   ULONG EccAttribute;
00643 } PCIX_BRIDGE_CAPABILITY, *PPCIX_BRIDGE_CAPABILITY;
00644 
00645 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY {
00646   PCI_CAPABILITIES_HEADER Header;
00647   USHORT Reserved;
00648   USHORT SubVendorID;
00649   USHORT SubSystemID;
00650 } PCI_SUBSYSTEM_IDS_CAPABILITY, *PPCI_SUBSYSTEM_IDS_CAPABILITY;
00651 
00652 #define OSC_FIRMWARE_FAILURE                            0x02
00653 #define OSC_UNRECOGNIZED_UUID                           0x04
00654 #define OSC_UNRECOGNIZED_REVISION                       0x08
00655 #define OSC_CAPABILITIES_MASKED                         0x10
00656 
00657 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION     0x01
00658 
00659 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD {
00660   union {
00661     _ANONYMOUS_STRUCT struct {
00662       ULONG ExtendedConfigOpRegions:1;
00663       ULONG ActiveStatePowerManagement:1;
00664       ULONG ClockPowerManagement:1;
00665       ULONG SegmentGroups:1;
00666       ULONG MessageSignaledInterrupts:1;
00667       ULONG WindowsHardwareErrorArchitecture:1;
00668       ULONG Reserved:26;
00669     } DUMMYSTRUCTNAME;
00670     ULONG AsULONG;
00671   } u;
00672 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD;
00673 
00674 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD {
00675   union {
00676     _ANONYMOUS_STRUCT struct {
00677       ULONG ExpressNativeHotPlug:1;
00678       ULONG ShpcNativeHotPlug:1;
00679       ULONG ExpressNativePME:1;
00680       ULONG ExpressAdvancedErrorReporting:1;
00681       ULONG ExpressCapabilityStructure:1;
00682       ULONG Reserved:27;
00683     } DUMMYSTRUCTNAME;
00684   ULONG AsULONG;
00685   } u;
00686 } PCI_ROOT_BUS_OSC_CONTROL_FIELD, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD;
00687 
00688 typedef enum _PCI_HARDWARE_INTERFACE {
00689   PciConventional,
00690   PciXMode1,
00691   PciXMode2,
00692   PciExpress
00693 } PCI_HARDWARE_INTERFACE, *PPCI_HARDWARE_INTERFACE;
00694 
00695 typedef enum {
00696   BusWidth32Bits,
00697   BusWidth64Bits
00698 } PCI_BUS_WIDTH;
00699 
00700 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY {
00701   PCI_HARDWARE_INTERFACE SecondaryInterface;
00702   _ANONYMOUS_STRUCT struct {
00703     BOOLEAN BusCapabilitiesFound;
00704     ULONG CurrentSpeedAndMode;
00705     ULONG SupportedSpeedsAndModes;
00706     BOOLEAN DeviceIDMessagingCapable;
00707     PCI_BUS_WIDTH SecondaryBusWidth;
00708   } DUMMYSTRUCTNAME;
00709   PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport;
00710   PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest;
00711   PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted;
00712 } PCI_ROOT_BUS_HARDWARE_CAPABILITY, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY;
00713 
00714 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER {
00715   _ANONYMOUS_STRUCT struct {
00716     USHORT CapabilityVersion:4;
00717     USHORT DeviceType:4;
00718     USHORT SlotImplemented:1;
00719     USHORT InterruptMessageNumber:5;
00720     USHORT Rsvd:2;
00721   } DUMMYSTRUCTNAME;
00722   USHORT AsUSHORT;
00723 } PCI_EXPRESS_CAPABILITIES_REGISTER, *PPCI_EXPRESS_CAPABILITIES_REGISTER;
00724 
00725 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER {
00726   _ANONYMOUS_STRUCT struct {
00727     ULONG MaxPayloadSizeSupported:3;
00728     ULONG PhantomFunctionsSupported:2;
00729     ULONG ExtendedTagSupported:1;
00730     ULONG L0sAcceptableLatency:3;
00731     ULONG L1AcceptableLatency:3;
00732     ULONG Undefined:3;
00733     ULONG RoleBasedErrorReporting:1;
00734     ULONG Rsvd1:2;
00735     ULONG CapturedSlotPowerLimit:8;
00736     ULONG CapturedSlotPowerLimitScale:2;
00737     ULONG Rsvd2:4;
00738   } DUMMYSTRUCTNAME;
00739   ULONG AsULONG;
00740 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER;
00741 
00742 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
00743 
00744 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER {
00745   _ANONYMOUS_STRUCT struct {
00746     USHORT CorrectableErrorEnable:1;
00747     USHORT NonFatalErrorEnable:1;
00748     USHORT FatalErrorEnable:1;
00749     USHORT UnsupportedRequestErrorEnable:1;
00750     USHORT EnableRelaxedOrder:1;
00751     USHORT MaxPayloadSize:3;
00752     USHORT ExtendedTagEnable:1;
00753     USHORT PhantomFunctionsEnable:1;
00754     USHORT AuxPowerEnable:1;
00755     USHORT NoSnoopEnable:1;
00756     USHORT MaxReadRequestSize:3;
00757     USHORT BridgeConfigRetryEnable:1;
00758   } DUMMYSTRUCTNAME;
00759   USHORT AsUSHORT;
00760 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER;
00761 
00762 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
00763 
00764 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER {
00765   _ANONYMOUS_STRUCT struct {
00766     USHORT CorrectableErrorDetected:1;
00767     USHORT NonFatalErrorDetected:1;
00768     USHORT FatalErrorDetected:1;
00769     USHORT UnsupportedRequestDetected:1;
00770     USHORT AuxPowerDetected:1;
00771     USHORT TransactionsPending:1;
00772     USHORT Rsvd:10;
00773   } DUMMYSTRUCTNAME;
00774   USHORT AsUSHORT;
00775 } PCI_EXPRESS_DEVICE_STATUS_REGISTER, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER;
00776 
00777 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER {
00778   _ANONYMOUS_STRUCT struct {
00779     ULONG MaximumLinkSpeed:4;
00780     ULONG MaximumLinkWidth:6;
00781     ULONG ActiveStatePMSupport:2;
00782     ULONG L0sExitLatency:3;
00783     ULONG L1ExitLatency:3;
00784     ULONG ClockPowerManagement:1;
00785     ULONG SurpriseDownErrorReportingCapable:1;
00786     ULONG DataLinkLayerActiveReportingCapable:1;
00787     ULONG Rsvd:3;
00788     ULONG PortNumber:8;
00789   } DUMMYSTRUCTNAME;
00790   ULONG AsULONG;
00791 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER;
00792 
00793 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER {
00794   _ANONYMOUS_STRUCT struct {
00795     USHORT ActiveStatePMControl:2;
00796     USHORT Rsvd1:1;
00797     USHORT ReadCompletionBoundary:1;
00798     USHORT LinkDisable:1;
00799     USHORT RetrainLink:1;
00800     USHORT CommonClockConfig:1;
00801     USHORT ExtendedSynch:1;
00802     USHORT EnableClockPowerManagement:1;
00803     USHORT Rsvd2:7;
00804   } DUMMYSTRUCTNAME;
00805   USHORT AsUSHORT;
00806 } PCI_EXPRESS_LINK_CONTROL_REGISTER, *PPCI_EXPRESS_LINK_CONTROL_REGISTER;
00807 
00808 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER {
00809   _ANONYMOUS_STRUCT struct {
00810     USHORT LinkSpeed:4;
00811     USHORT LinkWidth:6;
00812     USHORT Undefined:1;
00813     USHORT LinkTraining:1;
00814     USHORT SlotClockConfig:1;
00815     USHORT DataLinkLayerActive:1;
00816     USHORT Rsvd:2;
00817   } DUMMYSTRUCTNAME;
00818   USHORT AsUSHORT;
00819 } PCI_EXPRESS_LINK_STATUS_REGISTER, *PPCI_EXPRESS_LINK_STATUS_REGISTER;
00820 
00821 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER {
00822   _ANONYMOUS_STRUCT struct {
00823     ULONG AttentionButtonPresent:1;
00824     ULONG PowerControllerPresent:1;
00825     ULONG MRLSensorPresent:1;
00826     ULONG AttentionIndicatorPresent:1;
00827     ULONG PowerIndicatorPresent:1;
00828     ULONG HotPlugSurprise:1;
00829     ULONG HotPlugCapable:1;
00830     ULONG SlotPowerLimit:8;
00831     ULONG SlotPowerLimitScale:2;
00832     ULONG ElectromechanicalLockPresent:1;
00833     ULONG NoCommandCompletedSupport:1;
00834     ULONG PhysicalSlotNumber:13;
00835   } DUMMYSTRUCTNAME;
00836   ULONG AsULONG;
00837 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER;
00838 
00839 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER {
00840   _ANONYMOUS_STRUCT struct {
00841     USHORT AttentionButtonEnable:1;
00842     USHORT PowerFaultDetectEnable:1;
00843     USHORT MRLSensorEnable:1;
00844     USHORT PresenceDetectEnable:1;
00845     USHORT CommandCompletedEnable:1;
00846     USHORT HotPlugInterruptEnable:1;
00847     USHORT AttentionIndicatorControl:2;
00848     USHORT PowerIndicatorControl:2;
00849     USHORT PowerControllerControl:1;
00850     USHORT ElectromechanicalLockControl:1;
00851     USHORT DataLinkStateChangeEnable:1;
00852     USHORT Rsvd:3;
00853   } DUMMYSTRUCTNAME;
00854   USHORT AsUSHORT;
00855 } PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER;
00856 
00857 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER {
00858   _ANONYMOUS_STRUCT struct {
00859     USHORT AttentionButtonPressed:1;
00860     USHORT PowerFaultDetected:1;
00861     USHORT MRLSensorChanged:1;
00862     USHORT PresenceDetectChanged:1;
00863     USHORT CommandCompleted:1;
00864     USHORT MRLSensorState:1;
00865     USHORT PresenceDetectState:1;
00866     USHORT ElectromechanicalLockEngaged:1;
00867     USHORT DataLinkStateChanged:1;
00868     USHORT Rsvd:7;
00869   } DUMMYSTRUCTNAME;
00870   USHORT AsUSHORT;
00871 } PCI_EXPRESS_SLOT_STATUS_REGISTER, *PPCI_EXPRESS_SLOT_STATUS_REGISTER;
00872 
00873 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER {
00874   _ANONYMOUS_STRUCT struct {
00875     USHORT CorrectableSerrEnable:1;
00876     USHORT NonFatalSerrEnable:1;
00877     USHORT FatalSerrEnable:1;
00878     USHORT PMEInterruptEnable:1;
00879     USHORT CRSSoftwareVisibilityEnable:1;
00880     USHORT Rsvd:11;
00881   } DUMMYSTRUCTNAME;
00882   USHORT AsUSHORT;
00883 } PCI_EXPRESS_ROOT_CONTROL_REGISTER, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER;
00884 
00885 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER {
00886   _ANONYMOUS_STRUCT struct {
00887     USHORT CRSSoftwareVisibility:1;
00888     USHORT Rsvd:15;
00889   } DUMMYSTRUCTNAME;
00890   USHORT AsUSHORT;
00891 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER;
00892 
00893 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER {
00894   _ANONYMOUS_STRUCT struct {
00895     ULONG PMERequestorId:16;
00896     ULONG PMEStatus:1;
00897     ULONG PMEPending:1;
00898     ULONG Rsvd:14;
00899   } DUMMYSTRUCTNAME;
00900   ULONG AsULONG;
00901 } PCI_EXPRESS_ROOT_STATUS_REGISTER, *PPCI_EXPRESS_ROOT_STATUS_REGISTER;
00902 
00903 typedef struct _PCI_EXPRESS_CAPABILITY {
00904   PCI_CAPABILITIES_HEADER Header;
00905   PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities;
00906   PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities;
00907   PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl;
00908   PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus;
00909   PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities;
00910   PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl;
00911   PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus;
00912   PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities;
00913   PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl;
00914   PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus;
00915   PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl;
00916   PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities;
00917   PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus;
00918 } PCI_EXPRESS_CAPABILITY, *PPCI_EXPRESS_CAPABILITY;
00919 
00920 typedef enum {
00921   MRLClosed = 0,
00922   MRLOpen
00923 } PCI_EXPRESS_MRL_STATE;
00924 
00925 typedef enum {
00926   SlotEmpty = 0,
00927   CardPresent
00928 } PCI_EXPRESS_CARD_PRESENCE;
00929 
00930 typedef enum {
00931   IndicatorOn = 1,
00932   IndicatorBlink,
00933   IndicatorOff
00934 } PCI_EXPRESS_INDICATOR_STATE;
00935 
00936 typedef enum {
00937   PowerOn = 0,
00938   PowerOff
00939 } PCI_EXPRESS_POWER_STATE;
00940 
00941 typedef enum {
00942   L0sEntrySupport = 1,
00943   L0sAndL1EntrySupport = 3
00944 } PCI_EXPRESS_ASPM_SUPPORT;
00945 
00946 typedef enum {
00947   L0sAndL1EntryDisabled,
00948   L0sEntryEnabled,
00949   L1EntryEnabled,
00950   L0sAndL1EntryEnabled
00951 } PCI_EXPRESS_ASPM_CONTROL;
00952 
00953 typedef enum {
00954   L0s_Below64ns = 0,
00955   L0s_64ns_128ns,
00956   L0s_128ns_256ns,
00957   L0s_256ns_512ns,
00958   L0s_512ns_1us,
00959   L0s_1us_2us,
00960   L0s_2us_4us,
00961   L0s_Above4us
00962 } PCI_EXPRESS_L0s_EXIT_LATENCY;
00963 
00964 typedef enum {
00965   L1_Below1us = 0,
00966   L1_1us_2us,
00967   L1_2us_4us,
00968   L1_4us_8us,
00969   L1_8us_16us,
00970   L1_16us_32us,
00971   L1_32us_64us,
00972   L1_Above64us
00973 } PCI_EXPRESS_L1_EXIT_LATENCY;
00974 
00975 typedef enum {
00976   PciExpressEndpoint = 0,
00977   PciExpressLegacyEndpoint,
00978   PciExpressRootPort = 4,
00979   PciExpressUpstreamSwitchPort,
00980   PciExpressDownstreamSwitchPort,
00981   PciExpressToPciXBridge,
00982   PciXToExpressBridge,
00983   PciExpressRootComplexIntegratedEndpoint,
00984   PciExpressRootComplexEventCollector
00985 } PCI_EXPRESS_DEVICE_TYPE;
00986 
00987 typedef enum {
00988   MaxPayload128Bytes = 0,
00989   MaxPayload256Bytes,
00990   MaxPayload512Bytes,
00991   MaxPayload1024Bytes,
00992   MaxPayload2048Bytes,
00993   MaxPayload4096Bytes
00994 } PCI_EXPRESS_MAX_PAYLOAD_SIZE;
00995 
00996 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID {
00997   _ANONYMOUS_STRUCT struct {
00998     USHORT FunctionNumber:3;
00999     USHORT DeviceNumber:5;
01000     USHORT BusNumber:8;
01001   } DUMMYSTRUCTNAME;
01002   USHORT AsUSHORT;
01003 } PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID;
01004 
01005 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE {
01006   ResourceTypeSingle = 0,
01007   ResourceTypeRange,
01008   ResourceTypeExtendedCounterConfiguration,
01009   ResourceTypeOverflow,
01010   ResourceTypeMax
01011 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE;
01012 
01013 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR {
01014   PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type;
01015   ULONG Flags;
01016   union {
01017     ULONG CounterIndex;
01018     ULONG ExtendedRegisterAddress;
01019     struct {
01020       ULONG Begin;
01021       ULONG End;
01022     } Range;
01023   } u;
01024 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR;
01025 
01026 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST {
01027   ULONG Count;
01028   PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY];
01029 } PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST;
01030 
01031 typedef VOID
01032 (NTAPI *PciPin2Line)(
01033   _In_ struct _BUS_HANDLER *BusHandler,
01034   _In_ struct _BUS_HANDLER *RootHandler,
01035   _In_ PCI_SLOT_NUMBER SlotNumber,
01036   _In_ PPCI_COMMON_CONFIG PciData);
01037 
01038 typedef VOID
01039 (NTAPI *PciLine2Pin)(
01040   _In_ struct _BUS_HANDLER *BusHandler,
01041   _In_ struct _BUS_HANDLER *RootHandler,
01042   _In_ PCI_SLOT_NUMBER SlotNumber,
01043   _In_ PPCI_COMMON_CONFIG PciNewData,
01044   _In_ PPCI_COMMON_CONFIG PciOldData);
01045 
01046 typedef VOID
01047 (NTAPI *PciReadWriteConfig)(
01048   _In_ struct _BUS_HANDLER *BusHandler,
01049   _In_ PCI_SLOT_NUMBER Slot,
01050   _In_reads_bytes_(Length) PVOID Buffer,
01051   _In_ ULONG Offset,
01052   _In_ ULONG Length);
01053 
01054 #define PCI_DATA_TAG ' ICP'
01055 #define PCI_DATA_VERSION 1
01056 
01057 typedef struct _PCIBUSDATA {
01058   ULONG Tag;
01059   ULONG Version;
01060   PciReadWriteConfig ReadConfig;
01061   PciReadWriteConfig WriteConfig;
01062   PciPin2Line Pin2Line;
01063   PciLine2Pin Line2Pin;
01064   PCI_SLOT_NUMBER ParentSlot;
01065   PVOID Reserved[4];
01066 } PCIBUSDATA, *PPCIBUSDATA;
01067 
01068 #ifndef _PCIINTRF_X_
01069 #define _PCIINTRF_X_
01070 
01071 typedef ULONG
01072 (NTAPI *PCI_READ_WRITE_CONFIG)(
01073   _In_ PVOID Context,
01074   _In_ ULONG BusOffset,
01075   _In_ ULONG Slot,
01076   _In_reads_bytes_(Length) PVOID Buffer,
01077   _In_ ULONG Offset,
01078   _In_ ULONG Length);
01079 
01080 typedef VOID
01081 (NTAPI *PCI_PIN_TO_LINE)(
01082   _In_ PVOID Context,
01083   _In_ PPCI_COMMON_CONFIG PciData);
01084 
01085 typedef VOID
01086 (NTAPI *PCI_LINE_TO_PIN)(
01087   _In_ PVOID Context,
01088   _In_ PPCI_COMMON_CONFIG PciNewData,
01089   _In_ PPCI_COMMON_CONFIG PciOldData);
01090 
01091 typedef VOID
01092 (NTAPI *PCI_ROOT_BUS_CAPABILITY)(
01093   _In_ PVOID Context,
01094   _Out_ PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability);
01095 
01096 typedef VOID
01097 (NTAPI *PCI_EXPRESS_WAKE_CONTROL)(
01098   _In_ PVOID Context,
01099   _In_ BOOLEAN EnableWake);
01100 
01101 typedef struct _PCI_BUS_INTERFACE_STANDARD {
01102   USHORT Size;
01103   USHORT Version;
01104   PVOID Context;
01105   PINTERFACE_REFERENCE InterfaceReference;
01106   PINTERFACE_DEREFERENCE InterfaceDereference;
01107   PCI_READ_WRITE_CONFIG ReadConfig;
01108   PCI_READ_WRITE_CONFIG WriteConfig;
01109   PCI_PIN_TO_LINE PinToLine;
01110   PCI_LINE_TO_PIN LineToPin;
01111   PCI_ROOT_BUS_CAPABILITY RootBusCapability;
01112   PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl;
01113 } PCI_BUS_INTERFACE_STANDARD, *PPCI_BUS_INTERFACE_STANDARD;
01114 
01115 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
01116 
01117 #endif /* _PCIINTRF_X_ */
01118 
01119 #if (NTDDI_VERSION >= NTDDI_WIN7)
01120 
01121 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX     0x00004000
01122 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX    0x00008000
01123 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
01124   (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
01125    FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
01126 
01127 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
01128 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
01129 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
01130 
01131 #else
01132 
01133 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL     0x00000200
01134 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL    0x00000300
01135 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK        0x00000300
01136 
01137 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
01138 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
01139 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
01140 
01141 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
01142 
01143 #define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA  | \
01144                                          FILE_READ_ONLY_DEVICE | \
01145                                          FILE_FLOPPY_DISKETTE  | \
01146                                          FILE_WRITE_ONCE_MEDIA | \
01147                                          FILE_DEVICE_SECURE_OPEN)
01148 
01149 typedef struct _FILE_ALIGNMENT_INFORMATION {
01150   ULONG AlignmentRequirement;
01151 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
01152 
01153 typedef struct _FILE_NAME_INFORMATION {
01154   ULONG FileNameLength;
01155   WCHAR FileName[1];
01156 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
01157 
01158 
01159 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
01160   ULONG FileAttributes;
01161   ULONG ReparseTag;
01162 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
01163 
01164 typedef struct _FILE_DISPOSITION_INFORMATION {
01165   BOOLEAN DeleteFile;
01166 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
01167 
01168 typedef struct _FILE_END_OF_FILE_INFORMATION {
01169   LARGE_INTEGER EndOfFile;
01170 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
01171 
01172 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
01173   LARGE_INTEGER ValidDataLength;
01174 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
01175 
01176 typedef struct _FILE_FS_LABEL_INFORMATION {
01177   ULONG VolumeLabelLength;
01178   WCHAR VolumeLabel[1];
01179 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
01180 
01181 typedef struct _FILE_FS_VOLUME_INFORMATION {
01182   LARGE_INTEGER VolumeCreationTime;
01183   ULONG VolumeSerialNumber;
01184   ULONG VolumeLabelLength;
01185   BOOLEAN SupportsObjects;
01186   WCHAR VolumeLabel[1];
01187 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
01188 
01189 typedef struct _FILE_FS_SIZE_INFORMATION {
01190   LARGE_INTEGER TotalAllocationUnits;
01191   LARGE_INTEGER AvailableAllocationUnits;
01192   ULONG SectorsPerAllocationUnit;
01193   ULONG BytesPerSector;
01194 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
01195 
01196 typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
01197   LARGE_INTEGER TotalAllocationUnits;
01198   LARGE_INTEGER CallerAvailableAllocationUnits;
01199   LARGE_INTEGER ActualAvailableAllocationUnits;
01200   ULONG SectorsPerAllocationUnit;
01201   ULONG BytesPerSector;
01202 } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
01203 
01204 typedef struct _FILE_FS_OBJECTID_INFORMATION {
01205   UCHAR ObjectId[16];
01206   UCHAR ExtendedInfo[48];
01207 } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
01208 
01209 typedef union _FILE_SEGMENT_ELEMENT {
01210   PVOID64 Buffer;
01211   ULONGLONG Alignment;
01212 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
01213 
01214 #define IOCTL_AVIO_ALLOCATE_STREAM      CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
01215 #define IOCTL_AVIO_FREE_STREAM          CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
01216 #define IOCTL_AVIO_MODIFY_STREAM        CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
01217 
01218 typedef enum _BUS_DATA_TYPE {
01219   ConfigurationSpaceUndefined = -1,
01220   Cmos,
01221   EisaConfiguration,
01222   Pos,
01223   CbusConfiguration,
01224   PCIConfiguration,
01225   VMEConfiguration,
01226   NuBusConfiguration,
01227   PCMCIAConfiguration,
01228   MPIConfiguration,
01229   MPSAConfiguration,
01230   PNPISAConfiguration,
01231   SgiInternalConfiguration,
01232   MaximumBusDataType
01233 } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
01234 
01235 /* Some Server 2003 DDK definitions */
01236 #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1
01237 
01238 typedef NTSTATUS
01239 (NTAPI *PLEGACY_DEVICE_DETECTION_HANDLER)(
01240   IN PVOID Context,
01241   IN INTERFACE_TYPE LegacyBusType,
01242   IN ULONG BusNumber,
01243   IN ULONG SlotNumber,
01244   OUT PDEVICE_OBJECT *PhysicalDeviceObject);
01245 
01246 typedef struct _ROUTING_TOKEN {
01247   PVOID LinkNode;
01248   ULONG StaticVector;
01249   UCHAR Flags;
01250 } ROUTING_TOKEN, *PROUTING_TOKEN;
01251 
01252 typedef NTSTATUS
01253 (NTAPI *PGET_INTERRUPT_ROUTING)(
01254   IN PDEVICE_OBJECT Pdo,
01255   OUT ULONG *Bus,
01256   OUT ULONG *PciSlot,
01257   OUT UCHAR *InterruptLine,
01258   OUT UCHAR *InterruptPin,
01259   OUT UCHAR *ClassCode,
01260   OUT UCHAR *SubClassCode,
01261   OUT PDEVICE_OBJECT *ParentPdo,
01262   OUT ROUTING_TOKEN *RoutingToken,
01263   OUT UCHAR *Flags);
01264 
01265 typedef NTSTATUS
01266 (NTAPI *PSET_INTERRUPT_ROUTING_TOKEN)(
01267   IN PDEVICE_OBJECT Pdo,
01268   IN PROUTING_TOKEN RoutingToken);
01269 
01270 typedef VOID
01271 (NTAPI *PUPDATE_INTERRUPT_LINE)(
01272   IN PDEVICE_OBJECT Pdo,
01273   IN UCHAR LineRegister);
01274 
01275 typedef struct _INT_ROUTE_INTERFACE_STANDARD {
01276   USHORT Size;
01277   USHORT Version;
01278   PVOID Context;
01279   PINTERFACE_REFERENCE InterfaceReference;
01280   PINTERFACE_DEREFERENCE InterfaceDereference;
01281   PGET_INTERRUPT_ROUTING GetInterruptRouting;
01282   PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken;
01283   PUPDATE_INTERRUPT_LINE UpdateInterruptLine;
01284 } INT_ROUTE_INTERFACE_STANDARD, *PINT_ROUTE_INTERFACE_STANDARD;
01285 
01286 typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE {
01287   USHORT Size;
01288   USHORT Version;
01289   PVOID Context;
01290   PINTERFACE_REFERENCE InterfaceReference;
01291   PINTERFACE_DEREFERENCE InterfaceDereference;
01292   PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection;
01293 } LEGACY_DEVICE_DETECTION_INTERFACE, *PLEGACY_DEVICE_DETECTION_INTERFACE;
01294 
01295 /* FIXME : These definitions don't exist in public headers */
01296 
01297 #define PCI_CB_INTRF_VERSION             1
01298 #define PCI_PME_INTRF_STANDARD_VER       1
01299 #define PNP_LOCATION_INTERFACE_VERSION   1
01300 
01301 DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85);
01302 DEFINE_GUID(GUID_PCI_PME_INTERFACE, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b);
01303 
01304 typedef NTSTATUS
01305 (NTAPI *PCARDBUSADD)(
01306   IN PDEVICE_OBJECT DeviceObject,
01307   IN OUT PVOID *DeviceContext);
01308 
01309 typedef NTSTATUS
01310 (NTAPI *PCARDBUSDELETE)(
01311   IN PVOID DeviceContext);
01312 
01313 typedef NTSTATUS
01314 (NTAPI *PCARDBUSPCIDISPATCH)(
01315   IN PVOID DeviceContext,
01316   IN PIRP Irp);
01317 
01318 typedef VOID
01319 (NTAPI *PPME_SET_PME_ENABLE)(
01320   IN PDEVICE_OBJECT Pdo,
01321   IN BOOLEAN PmeEnable);
01322 
01323 typedef VOID
01324 (NTAPI *PPME_CLEAR_PME_STATUS)(
01325   IN PDEVICE_OBJECT Pdo);
01326 
01327 typedef VOID
01328 (NTAPI *PPME_GET_INFORMATION)(
01329   IN PDEVICE_OBJECT Pdo,
01330   OUT PBOOLEAN PmeCapable,
01331   OUT PBOOLEAN PmeStatus,
01332   OUT PBOOLEAN PmeEnable);
01333 
01334 typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE {
01335   USHORT Size;
01336   USHORT Version;
01337   PVOID Context;
01338   PINTERFACE_REFERENCE InterfaceReference;
01339   PINTERFACE_DEREFERENCE InterfaceDereference;
01340   PDRIVER_OBJECT DriverObject;
01341   PCARDBUSADD AddCardBus;
01342   PCARDBUSDELETE DeleteCardBus;
01343   PCARDBUSPCIDISPATCH DispatchPnp;
01344 } PCI_CARDBUS_INTERFACE_PRIVATE, *PPCI_CARDBUS_INTERFACE_PRIVATE;
01345 
01346 typedef struct _PCI_PME_INTERFACE {
01347   USHORT Size;
01348   USHORT Version;
01349   PVOID Context;
01350   PINTERFACE_REFERENCE InterfaceReference;
01351   PINTERFACE_DEREFERENCE InterfaceDereference;
01352   PPME_GET_INFORMATION GetPmeInformation;
01353   PPME_CLEAR_PME_STATUS ClearPmeStatus;
01354   PPME_SET_PME_ENABLE UpdateEnable;
01355 } PCI_PME_INTERFACE, *PPCI_PME_INTERFACE;
01356 
01357 /* Hardware Abstraction Layer Types */
01358 
01359 typedef BOOLEAN
01360 (NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
01361   _In_ ULONG Columns,
01362   _In_ ULONG Rows);
01363 
01364 typedef PBUS_HANDLER
01365 (FASTCALL *pHalHandlerForBus)(
01366   _In_ INTERFACE_TYPE InterfaceType,
01367   _In_ ULONG BusNumber);
01368 
01369 typedef VOID
01370 (FASTCALL *pHalReferenceBusHandler)(
01371   _In_ PBUS_HANDLER BusHandler);
01372 
01373 typedef enum _HAL_QUERY_INFORMATION_CLASS {
01374   HalInstalledBusInformation,
01375   HalProfileSourceInformation,
01376   HalInformationClassUnused1,
01377   HalPowerInformation,
01378   HalProcessorSpeedInformation,
01379   HalCallbackInformation,
01380   HalMapRegisterInformation,
01381   HalMcaLogInformation,
01382   HalFrameBufferCachingInformation,
01383   HalDisplayBiosInformation,
01384   HalProcessorFeatureInformation,
01385   HalNumaTopologyInterface,
01386   HalErrorInformation,
01387   HalCmcLogInformation,
01388   HalCpeLogInformation,
01389   HalQueryMcaInterface,
01390   HalQueryAMLIIllegalIOPortAddresses,
01391   HalQueryMaxHotPlugMemoryAddress,
01392   HalPartitionIpiInterface,
01393   HalPlatformInformation,
01394   HalQueryProfileSourceList,
01395   HalInitLogInformation,
01396   HalFrequencyInformation,
01397   HalProcessorBrandString,
01398   HalHypervisorInformation,
01399   HalPlatformTimerInformation,
01400   HalAcpiAuditInformation
01401 } HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
01402 
01403 typedef enum _HAL_SET_INFORMATION_CLASS {
01404   HalProfileSourceInterval,
01405   HalProfileSourceInterruptHandler,
01406   HalMcaRegisterDriver,
01407   HalKernelErrorHandler,
01408   HalCmcRegisterDriver,
01409   HalCpeRegisterDriver,
01410   HalMcaLog,
01411   HalCmcLog,
01412   HalCpeLog,
01413   HalGenerateCmcInterrupt,
01414   HalProfileSourceTimerHandler,
01415   HalEnlightenment,
01416   HalProfileDpgoSourceInterruptHandler
01417 } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
01418 
01419 typedef NTSTATUS
01420 (NTAPI *pHalQuerySystemInformation)(
01421   _In_ HAL_QUERY_INFORMATION_CLASS InformationClass,
01422   _In_ ULONG BufferSize,
01423   _Inout_updates_bytes_to_(BufferSize, *ReturnedLength) PVOID Buffer,
01424   _Out_ PULONG ReturnedLength);
01425 
01426 typedef NTSTATUS
01427 (NTAPI *pHalSetSystemInformation)(
01428   _In_ HAL_SET_INFORMATION_CLASS InformationClass,
01429   _In_ ULONG BufferSize,
01430   _In_ PVOID Buffer);
01431 
01432 typedef VOID
01433 (FASTCALL *pHalExamineMBR)(
01434   _In_ PDEVICE_OBJECT DeviceObject,
01435   _In_ ULONG SectorSize,
01436   _In_ ULONG MBRTypeIdentifier,
01437   _Out_ PVOID *Buffer);
01438 
01439 typedef NTSTATUS
01440 (FASTCALL *pHalIoReadPartitionTable)(
01441   _In_ PDEVICE_OBJECT DeviceObject,
01442   _In_ ULONG SectorSize,
01443   _In_ BOOLEAN ReturnRecognizedPartitions,
01444   _Out_ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
01445 
01446 typedef NTSTATUS
01447 (FASTCALL *pHalIoSetPartitionInformation)(
01448   _In_ PDEVICE_OBJECT DeviceObject,
01449   _In_ ULONG SectorSize,
01450   _In_ ULONG PartitionNumber,
01451   _In_ ULONG PartitionType);
01452 
01453 typedef NTSTATUS
01454 (FASTCALL *pHalIoWritePartitionTable)(
01455   _In_ PDEVICE_OBJECT DeviceObject,
01456   _In_ ULONG SectorSize,
01457   _In_ ULONG SectorsPerTrack,
01458   _In_ ULONG NumberOfHeads,
01459   _In_ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
01460 
01461 typedef NTSTATUS
01462 (NTAPI *pHalQueryBusSlots)(
01463   _In_ PBUS_HANDLER BusHandler,
01464   _In_ ULONG BufferSize,
01465   _Out_ PULONG SlotNumbers,
01466   _Out_ PULONG ReturnedLength);
01467 
01468 typedef NTSTATUS
01469 (NTAPI *pHalInitPnpDriver)(VOID);
01470 
01471 typedef struct _PM_DISPATCH_TABLE {
01472   ULONG Signature;
01473   ULONG Version;
01474   PVOID Function[1];
01475 } PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
01476 
01477 typedef NTSTATUS
01478 (NTAPI *pHalInitPowerManagement)(
01479   _In_ PPM_DISPATCH_TABLE PmDriverDispatchTable,
01480   _Out_ PPM_DISPATCH_TABLE *PmHalDispatchTable);
01481 
01482 typedef struct _DMA_ADAPTER*
01483 (NTAPI *pHalGetDmaAdapter)(
01484   _In_ PVOID Context,
01485   _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor,
01486   _Out_ PULONG NumberOfMapRegisters);
01487 
01488 typedef NTSTATUS
01489 (NTAPI *pHalGetInterruptTranslator)(
01490   _In_ INTERFACE_TYPE ParentInterfaceType,
01491   _In_ ULONG ParentBusNumber,
01492   _In_ INTERFACE_TYPE BridgeInterfaceType,
01493   _In_ USHORT Size,
01494   _In_ USHORT Version,
01495   _Out_ PTRANSLATOR_INTERFACE Translator,
01496   _Out_ PULONG BridgeBusNumber);
01497 
01498 typedef NTSTATUS
01499 (NTAPI *pHalStartMirroring)(VOID);
01500 
01501 typedef NTSTATUS
01502 (NTAPI *pHalEndMirroring)(
01503   _In_ ULONG PassNumber);
01504 
01505 typedef NTSTATUS
01506 (NTAPI *pHalMirrorPhysicalMemory)(
01507   _In_ PHYSICAL_ADDRESS PhysicalAddress,
01508   _In_ LARGE_INTEGER NumberOfBytes);
01509 
01510 typedef NTSTATUS
01511 (NTAPI *pHalMirrorVerify)(
01512   _In_ PHYSICAL_ADDRESS PhysicalAddress,
01513   _In_ LARGE_INTEGER NumberOfBytes);
01514 
01515 typedef BOOLEAN
01516 (NTAPI *pHalTranslateBusAddress)(
01517   _In_ INTERFACE_TYPE InterfaceType,
01518   _In_ ULONG BusNumber,
01519   _In_ PHYSICAL_ADDRESS BusAddress,
01520   _Inout_ PULONG AddressSpace,
01521   _Out_ PPHYSICAL_ADDRESS TranslatedAddress);
01522 
01523 typedef NTSTATUS
01524 (NTAPI *pHalAssignSlotResources)(
01525   _In_ PUNICODE_STRING RegistryPath,
01526   _In_opt_ PUNICODE_STRING DriverClassName,
01527   _In_ PDRIVER_OBJECT DriverObject,
01528   _In_ PDEVICE_OBJECT DeviceObject,
01529   _In_ INTERFACE_TYPE BusType,
01530   _In_ ULONG BusNumber,
01531   _In_ ULONG SlotNumber,
01532   _Inout_ PCM_RESOURCE_LIST *AllocatedResources);
01533 
01534 typedef VOID
01535 (NTAPI *pHalHaltSystem)(VOID);
01536 
01537 typedef BOOLEAN
01538 (NTAPI *pHalResetDisplay)(VOID);
01539 
01540 typedef struct _MAP_REGISTER_ENTRY {
01541   PVOID MapRegister;
01542   BOOLEAN WriteToDevice;
01543 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
01544 
01545 typedef UCHAR
01546 (NTAPI *pHalVectorToIDTEntry)(
01547   ULONG Vector);
01548 
01549 typedef BOOLEAN
01550 (NTAPI *pHalFindBusAddressTranslation)(
01551   _In_ PHYSICAL_ADDRESS BusAddress,
01552   _Inout_ PULONG AddressSpace,
01553   _Out_ PPHYSICAL_ADDRESS TranslatedAddress,
01554   _Inout_ PULONG_PTR Context,
01555   _In_ BOOLEAN NextBus);
01556 
01557 typedef VOID
01558 (NTAPI *pHalEndOfBoot)(VOID);
01559 
01560 typedef PVOID
01561 (NTAPI *pHalGetAcpiTable)(
01562   _In_ ULONG Signature,
01563   _In_opt_ PCSTR OemId,
01564   _In_opt_ PCSTR OemTableId);
01565 
01566 #if defined(_IA64_)
01567 typedef NTSTATUS
01568 (*pHalGetErrorCapList)(
01569   _Inout_ PULONG CapsListLength,
01570   _Inout_updates_bytes_(*CapsListLength) PUCHAR ErrorCapList);
01571 
01572 typedef NTSTATUS
01573 (*pHalInjectError)(
01574   _In_ ULONG BufferLength,
01575   _In_reads_bytes_(BufferLength) PUCHAR Buffer);
01576 #endif
01577 
01578 typedef VOID
01579 (NTAPI *PCI_ERROR_HANDLER_CALLBACK)(VOID);
01580 
01581 typedef VOID
01582 (NTAPI *pHalSetPciErrorHandlerCallback)(
01583   _In_ PCI_ERROR_HANDLER_CALLBACK Callback);
01584 
01585 #if 1 /* Not present in WDK 7600 */
01586 typedef VOID
01587 (FASTCALL *pHalIoAssignDriveLetters)(
01588   _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
01589   _In_ PSTRING NtDeviceName,
01590   _Out_ PUCHAR NtSystemPath,
01591   _Out_ PSTRING NtSystemPathString);
01592 #endif
01593 
01594 typedef struct {
01595   ULONG Version;
01596   pHalQuerySystemInformation HalQuerySystemInformation;
01597   pHalSetSystemInformation HalSetSystemInformation;
01598   pHalQueryBusSlots HalQueryBusSlots;
01599   ULONG Spare1;
01600   pHalExamineMBR HalExamineMBR;
01601 #if 1 /* Not present in WDK 7600 */
01602   pHalIoAssignDriveLetters HalIoAssignDriveLetters;
01603 #endif
01604   pHalIoReadPartitionTable HalIoReadPartitionTable;
01605   pHalIoSetPartitionInformation HalIoSetPartitionInformation;
01606   pHalIoWritePartitionTable HalIoWritePartitionTable;
01607   pHalHandlerForBus HalReferenceHandlerForBus;
01608   pHalReferenceBusHandler HalReferenceBusHandler;
01609   pHalReferenceBusHandler HalDereferenceBusHandler;
01610   pHalInitPnpDriver HalInitPnpDriver;
01611   pHalInitPowerManagement HalInitPowerManagement;
01612   pHalGetDmaAdapter HalGetDmaAdapter;
01613   pHalGetInterruptTranslator HalGetInterruptTranslator;
01614   pHalStartMirroring HalStartMirroring;
01615   pHalEndMirroring HalEndMirroring;
01616   pHalMirrorPhysicalMemory HalMirrorPhysicalMemory;
01617   pHalEndOfBoot HalEndOfBoot;
01618   pHalMirrorVerify HalMirrorVerify;
01619   pHalGetAcpiTable HalGetCachedAcpiTable;
01620   pHalSetPciErrorHandlerCallback  HalSetPciErrorHandlerCallback;
01621 #if defined(_IA64_)
01622   pHalGetErrorCapList HalGetErrorCapList;
01623   pHalInjectError HalInjectError;
01624 #endif
01625 } HAL_DISPATCH, *PHAL_DISPATCH;
01626 
01627 /* GCC/MSVC and WDK compatible declaration */
01628 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable;
01629 
01630 #if defined(_NTOSKRNL_) || defined(_BLDR_)
01631 #define HALDISPATCH (&HalDispatchTable)
01632 #else
01633 /* This is a WDK compatibility definition */
01634 #define HalDispatchTable (&HalDispatchTable)
01635 #define HALDISPATCH HalDispatchTable
01636 #endif
01637 
01638 #define HAL_DISPATCH_VERSION            3 /* FIXME: when to use 4? */
01639 #define HalDispatchTableVersion         HALDISPATCH->Version
01640 #define HalQuerySystemInformation       HALDISPATCH->HalQuerySystemInformation
01641 #define HalSetSystemInformation         HALDISPATCH->HalSetSystemInformation
01642 #define HalQueryBusSlots                HALDISPATCH->HalQueryBusSlots
01643 #define HalReferenceHandlerForBus       HALDISPATCH->HalReferenceHandlerForBus
01644 #define HalReferenceBusHandler          HALDISPATCH->HalReferenceBusHandler
01645 #define HalDereferenceBusHandler        HALDISPATCH->HalDereferenceBusHandler
01646 #define HalInitPnpDriver                HALDISPATCH->HalInitPnpDriver
01647 #define HalInitPowerManagement          HALDISPATCH->HalInitPowerManagement
01648 #define HalGetDmaAdapter                HALDISPATCH->HalGetDmaAdapter
01649 #define HalGetInterruptTranslator       HALDISPATCH->HalGetInterruptTranslator
01650 #define HalStartMirroring               HALDISPATCH->HalStartMirroring
01651 #define HalEndMirroring                 HALDISPATCH->HalEndMirroring
01652 #define HalMirrorPhysicalMemory         HALDISPATCH->HalMirrorPhysicalMemory
01653 #define HalEndOfBoot                    HALDISPATCH->HalEndOfBoot
01654 #define HalMirrorVerify                 HALDISPATCH->HalMirrorVerify
01655 #define HalGetCachedAcpiTable           HALDISPATCH->HalGetCachedAcpiTable
01656 #define HalSetPciErrorHandlerCallback   HALDISPATCH->HalSetPciErrorHandlerCallback
01657 #if defined(_IA64_)
01658 #define HalGetErrorCapList              HALDISPATCH->HalGetErrorCapList
01659 #define HalInjectError                  HALDISPATCH->HalInjectError
01660 #endif
01661 
01662 typedef struct _HAL_BUS_INFORMATION {
01663   INTERFACE_TYPE BusType;
01664   BUS_DATA_TYPE ConfigurationType;
01665   ULONG BusNumber;
01666   ULONG Reserved;
01667 } HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION;
01668 
01669 typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
01670   KPROFILE_SOURCE Source;
01671   BOOLEAN Supported;
01672   ULONG Interval;
01673 } HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
01674 
01675 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX {
01676   KPROFILE_SOURCE Source;
01677   BOOLEAN Supported;
01678   ULONG_PTR Interval;
01679   ULONG_PTR DefInterval;
01680   ULONG_PTR MaxInterval;
01681   ULONG_PTR MinInterval;
01682 } HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX;
01683 
01684 typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
01685   KPROFILE_SOURCE Source;
01686   ULONG_PTR Interval;
01687 } HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
01688 
01689 typedef struct _HAL_PROFILE_SOURCE_LIST {
01690   KPROFILE_SOURCE Source;
01691   PWSTR Description;
01692 } HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST;
01693 
01694 typedef enum _HAL_DISPLAY_BIOS_INFORMATION {
01695   HalDisplayInt10Bios,
01696   HalDisplayEmulatedBios,
01697   HalDisplayNoBios
01698 } HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION;
01699 
01700 typedef struct _HAL_POWER_INFORMATION {
01701   ULONG TBD;
01702 } HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION;
01703 
01704 typedef struct _HAL_PROCESSOR_SPEED_INFO {
01705   ULONG ProcessorSpeed;
01706 } HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION;
01707 
01708 typedef struct _HAL_CALLBACKS {
01709   PCALLBACK_OBJECT SetSystemInformation;
01710   PCALLBACK_OBJECT BusCheck;
01711 } HAL_CALLBACKS, *PHAL_CALLBACKS;
01712 
01713 typedef struct _HAL_PROCESSOR_FEATURE {
01714   ULONG UsableFeatureBits;
01715 } HAL_PROCESSOR_FEATURE;
01716 
01717 typedef NTSTATUS
01718 (NTAPI *PHALIOREADWRITEHANDLER)(
01719   _In_ BOOLEAN fRead,
01720   _In_ ULONG dwAddr,
01721   _In_ ULONG dwSize,
01722   _Inout_ PULONG pdwData);
01723 
01724 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST {
01725   ULONG BadAddrBegin;
01726   ULONG BadAddrSize;
01727   ULONG OSVersionTrigger;
01728   PHALIOREADWRITEHANDLER IOHandler;
01729 } HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST;
01730 
01731 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
01732 
01733 typedef VOID
01734 (NTAPI *PHALMCAINTERFACELOCK)(VOID);
01735 
01736 typedef VOID
01737 (NTAPI *PHALMCAINTERFACEUNLOCK)(VOID);
01738 
01739 typedef NTSTATUS
01740 (NTAPI *PHALMCAINTERFACEREADREGISTER)(
01741   _In_ UCHAR BankNumber,
01742   _Inout_ PVOID Exception);
01743 
01744 typedef struct _HAL_MCA_INTERFACE {
01745   PHALMCAINTERFACELOCK Lock;
01746   PHALMCAINTERFACEUNLOCK Unlock;
01747   PHALMCAINTERFACEREADREGISTER ReadRegister;
01748 } HAL_MCA_INTERFACE;
01749 
01750 typedef enum {
01751   ApicDestinationModePhysical = 1,
01752   ApicDestinationModeLogicalFlat,
01753   ApicDestinationModeLogicalClustered,
01754   ApicDestinationModeUnknown
01755 } HAL_APIC_DESTINATION_MODE, *PHAL_APIC_DESTINATION_MODE;
01756 
01757 #if defined(_AMD64_)
01758 
01759 struct _KTRAP_FRAME;
01760 struct _KEXCEPTION_FRAME;
01761 
01762 typedef ERROR_SEVERITY
01763 (NTAPI *PDRIVER_EXCPTN_CALLBACK)(
01764   _In_ PVOID Context,
01765   _In_ struct _KTRAP_FRAME *TrapFrame,
01766   _In_ struct _KEXCEPTION_FRAME *ExceptionFrame,
01767   _In_ PMCA_EXCEPTION Exception);
01768 
01769 #endif
01770 
01771 #if defined(_X86_) || defined(_IA64_)
01772 typedef
01773 #if defined(_IA64_)
01774 ERROR_SEVERITY
01775 #else
01776 VOID
01777 #endif
01778 (NTAPI *PDRIVER_EXCPTN_CALLBACK)(
01779   _In_ PVOID Context,
01780   _In_ PMCA_EXCEPTION BankLog);
01781 #endif
01782 
01783 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK;
01784 
01785 typedef struct _MCA_DRIVER_INFO {
01786   PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback;
01787   PKDEFERRED_ROUTINE DpcCallback;
01788   PVOID DeviceContext;
01789 } MCA_DRIVER_INFO, *PMCA_DRIVER_INFO;
01790 
01791 typedef struct _HAL_ERROR_INFO {
01792   ULONG Version;
01793   ULONG InitMaxSize;
01794   ULONG McaMaxSize;
01795   ULONG McaPreviousEventsCount;
01796   ULONG McaCorrectedEventsCount;
01797   ULONG McaKernelDeliveryFails;
01798   ULONG McaDriverDpcQueueFails;
01799   ULONG McaReserved;
01800   ULONG CmcMaxSize;
01801   ULONG CmcPollingInterval;
01802   ULONG CmcInterruptsCount;
01803   ULONG CmcKernelDeliveryFails;
01804   ULONG CmcDriverDpcQueueFails;
01805   ULONG CmcGetStateFails;
01806   ULONG CmcClearStateFails;
01807   ULONG CmcReserved;
01808   ULONGLONG CmcLogId;
01809   ULONG CpeMaxSize;
01810   ULONG CpePollingInterval;
01811   ULONG CpeInterruptsCount;
01812   ULONG CpeKernelDeliveryFails;
01813   ULONG CpeDriverDpcQueueFails;
01814   ULONG CpeGetStateFails;
01815   ULONG CpeClearStateFails;
01816   ULONG CpeInterruptSources;
01817   ULONGLONG CpeLogId;
01818   ULONGLONG KernelReserved[4];
01819 } HAL_ERROR_INFO, *PHAL_ERROR_INFO;
01820 
01821 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
01822 #define HAL_MCE_DISABLED          ((ULONG)0)
01823 
01824 #define HAL_CMC_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
01825 #define HAL_CMC_DISABLED          HAL_MCE_DISABLED
01826 
01827 #define HAL_CPE_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
01828 #define HAL_CPE_DISABLED          HAL_MCE_DISABLED
01829 
01830 #define HAL_MCA_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
01831 #define HAL_MCA_DISABLED          HAL_MCE_DISABLED
01832 
01833 typedef VOID
01834 (NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)(
01835   _In_ PVOID Context,
01836   _In_ PCMC_EXCEPTION CmcLog);
01837 
01838 typedef VOID
01839 (NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)(
01840   _In_ PVOID Context,
01841   _In_ PCPE_EXCEPTION CmcLog);
01842 
01843 typedef struct _CMC_DRIVER_INFO {
01844   PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback;
01845   PKDEFERRED_ROUTINE DpcCallback;
01846   PVOID DeviceContext;
01847 } CMC_DRIVER_INFO, *PCMC_DRIVER_INFO;
01848 
01849 typedef struct _CPE_DRIVER_INFO {
01850   PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback;
01851   PKDEFERRED_ROUTINE DpcCallback;
01852   PVOID DeviceContext;
01853 } CPE_DRIVER_INFO, *PCPE_DRIVER_INFO;
01854 
01855 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
01856 
01857 #if defined(_IA64_)
01858 
01859 typedef NTSTATUS
01860 (*HALSENDCROSSPARTITIONIPI)(
01861   _In_ USHORT ProcessorID,
01862   _In_ UCHAR HardwareVector);
01863 
01864 typedef NTSTATUS
01865 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)(
01866   _Out_ PULONG Vector,
01867   _Out_ PKIRQL Irql,
01868   _Inout_ PGROUP_AFFINITY Affinity,
01869   _Out_ PUCHAR HardwareVector);
01870 
01871 typedef VOID
01872 (*HALFREECROSSPARTITIONINTERRUPTVECTOR)(
01873   _In_ ULONG Vector,
01874   _In_ PGROUP_AFFINITY Affinity);
01875 
01876 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE {
01877   HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi;
01878   HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector;
01879   HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector;
01880 } HAL_CROSS_PARTITION_IPI_INTERFACE;
01881 
01882 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
01883     FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE,    \
01884                  HalFreeCrossPartitionInterruptVector)
01885 
01886 #endif /* defined(_IA64_) */
01887 
01888 typedef struct _HAL_PLATFORM_INFORMATION {
01889   ULONG PlatformFlags;
01890 } HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION;
01891 
01892 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING      0x01L
01893 #define HAL_PLATFORM_DISABLE_PTCG                 0x04L
01894 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY       0x08L
01895 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO  0x10L
01896 #define HAL_PLATFORM_ACPI_TABLES_CACHED           0x20L
01897 
01898 /******************************************************************************
01899  *                              Kernel Types                                  *
01900  ******************************************************************************/
01901 
01902 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
01903 #define NX_SUPPORT_POLICY_ALWAYSON  1
01904 #define NX_SUPPORT_POLICY_OPTIN     2
01905 #define NX_SUPPORT_POLICY_OPTOUT    3
01906 
01907 _IRQL_requires_same_
01908 _Function_class_(EXPAND_STACK_CALLOUT)
01909 typedef VOID
01910 (NTAPI EXPAND_STACK_CALLOUT)(
01911   _In_opt_ PVOID Parameter);
01912 typedef EXPAND_STACK_CALLOUT *PEXPAND_STACK_CALLOUT;
01913 
01914 typedef VOID
01915 (NTAPI *PTIMER_APC_ROUTINE)(
01916   _In_ PVOID TimerContext,
01917   _In_ ULONG TimerLowValue,
01918   _In_ LONG TimerHighValue);
01919 
01920 typedef enum _TIMER_SET_INFORMATION_CLASS {
01921   TimerSetCoalescableTimer,
01922   MaxTimerInfoClass
01923 } TIMER_SET_INFORMATION_CLASS;
01924 
01925 #if (NTDDI_VERSION >= NTDDI_WIN7)
01926 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO {
01927   _In_ LARGE_INTEGER DueTime;
01928   _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine;
01929   _In_opt_ PVOID TimerContext;
01930   _In_opt_ struct _COUNTED_REASON_CONTEXT *WakeContext;
01931   _In_opt_ ULONG Period;
01932   _In_ ULONG TolerableDelay;
01933   _Out_opt_ PBOOLEAN PreviousState;
01934 } TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO;
01935 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
01936 
01937 #define XSTATE_LEGACY_FLOATING_POINT        0
01938 #define XSTATE_LEGACY_SSE                   1
01939 #define XSTATE_GSSE                         2
01940 
01941 #define XSTATE_MASK_LEGACY_FLOATING_POINT   (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
01942 #define XSTATE_MASK_LEGACY_SSE              (1i64 << (XSTATE_LEGACY_SSE))
01943 #define XSTATE_MASK_LEGACY                  (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
01944 #define XSTATE_MASK_GSSE                    (1i64 << (XSTATE_GSSE))
01945 
01946 #define MAXIMUM_XSTATE_FEATURES             64
01947 
01948 typedef struct _XSTATE_FEATURE {
01949   ULONG Offset;
01950   ULONG Size;
01951 } XSTATE_FEATURE, *PXSTATE_FEATURE;
01952 
01953 typedef struct _XSTATE_CONFIGURATION {
01954   ULONG64 EnabledFeatures;
01955   ULONG Size;
01956   ULONG OptimizedSave:1;
01957   XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
01958 } XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION;
01959 
01960 #define MAX_WOW64_SHARED_ENTRIES 16
01961 
01962 typedef struct _KUSER_SHARED_DATA {
01963   ULONG TickCountLowDeprecated;
01964   ULONG TickCountMultiplier;
01965   volatile KSYSTEM_TIME InterruptTime;
01966   volatile KSYSTEM_TIME SystemTime;
01967   volatile KSYSTEM_TIME TimeZoneBias;
01968   USHORT ImageNumberLow;
01969   USHORT ImageNumberHigh;
01970   WCHAR NtSystemRoot[260];
01971   ULONG MaxStackTraceDepth;
01972   ULONG CryptoExponent;
01973   ULONG TimeZoneId;
01974   ULONG LargePageMinimum;
01975   ULONG Reserved2[7];
01976   NT_PRODUCT_TYPE NtProductType;
01977   BOOLEAN ProductTypeIsValid;
01978   ULONG NtMajorVersion;
01979   ULONG NtMinorVersion;
01980   BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
01981   ULONG Reserved1;
01982   ULONG Reserved3;
01983   volatile ULONG TimeSlip;
01984   ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
01985   ULONG AltArchitecturePad[1];
01986   LARGE_INTEGER SystemExpirationDate;
01987   ULONG SuiteMask;
01988   BOOLEAN KdDebuggerEnabled;
01989 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
01990   UCHAR NXSupportPolicy;
01991 #endif
01992   volatile ULONG ActiveConsoleId;
01993   volatile ULONG DismountCount;
01994   ULONG ComPlusPackage;
01995   ULONG LastSystemRITEventTickCount;
01996   ULONG NumberOfPhysicalPages;
01997   BOOLEAN SafeBootMode;
01998 #if (NTDDI_VERSION >= NTDDI_WIN7)
01999   _ANONYMOUS_UNION union {
02000     UCHAR TscQpcData;
02001     _ANONYMOUS_STRUCT struct {
02002       UCHAR TscQpcEnabled:1;
02003       UCHAR TscQpcSpareFlag:1;
02004       UCHAR TscQpcShift:6;
02005     } DUMMYSTRUCTNAME;
02006   } DUMMYUNIONNAME;
02007   UCHAR TscQpcPad[2];
02008 #endif
02009 #if (NTDDI_VERSION >= NTDDI_VISTA)
02010   _ANONYMOUS_UNION union {
02011     ULONG SharedDataFlags;
02012     _ANONYMOUS_STRUCT struct {
02013       ULONG DbgErrorPortPresent:1;
02014       ULONG DbgElevationEnabled:1;
02015       ULONG DbgVirtEnabled:1;
02016       ULONG DbgInstallerDetectEnabled:1;
02017       ULONG DbgSystemDllRelocated:1;
02018       ULONG DbgDynProcessorEnabled:1;
02019       ULONG DbgSEHValidationEnabled:1;
02020       ULONG SpareBits:25;
02021     } DUMMYSTRUCTNAME2;
02022   } DUMMYUNIONNAME2;
02023 #else
02024   ULONG TraceLogging;
02025 #endif
02026   ULONG DataFlagsPad[1];
02027   ULONGLONG TestRetInstruction;
02028   ULONG SystemCall;
02029   ULONG SystemCallReturn;
02030   ULONGLONG SystemCallPad[3];
02031   _ANONYMOUS_UNION union {
02032     volatile KSYSTEM_TIME TickCount;
02033     volatile ULONG64 TickCountQuad;
02034     _ANONYMOUS_STRUCT struct {
02035       ULONG ReservedTickCountOverlay[3];
02036       ULONG TickCountPad[1];
02037     } DUMMYSTRUCTNAME;
02038   } DUMMYUNIONNAME3;
02039   ULONG Cookie;
02040   ULONG CookiePad[1];
02041 #if (NTDDI_VERSION >= NTDDI_WS03)
02042   LONGLONG ConsoleSessionForegroundProcessId;
02043   ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
02044 #endif
02045 #if (NTDDI_VERSION >= NTDDI_VISTA)
02046 #if (NTDDI_VERSION >= NTDDI_WIN7)
02047   USHORT UserModeGlobalLogger[16];
02048 #else
02049   USHORT UserModeGlobalLogger[8];
02050   ULONG HeapTracingPid[2];
02051   ULONG CritSecTracingPid[2];
02052 #endif
02053   ULONG ImageFileExecutionOptions;
02054 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
02055   ULONG LangGenerationCount;
02056 #else
02057   /* 4 bytes padding */
02058 #endif
02059   ULONGLONG Reserved5;
02060   volatile ULONG64 InterruptTimeBias;
02061 #endif
02062 #if (NTDDI_VERSION >= NTDDI_WIN7)
02063   volatile ULONG64 TscQpcBias;
02064   volatile ULONG ActiveProcessorCount;
02065   volatile USHORT ActiveGroupCount;
02066   USHORT Reserved4;
02067   volatile ULONG AitSamplingValue;
02068   volatile ULONG AppCompatFlag;
02069   ULONGLONG SystemDllNativeRelocation;
02070   ULONG SystemDllWowRelocation;
02071   ULONG XStatePad[1];
02072   XSTATE_CONFIGURATION XState;
02073 #endif
02074 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
02075 
02076 #if (NTDDI_VERSION >= NTDDI_VISTA)
02077 extern NTSYSAPI volatile CCHAR KeNumberProcessors;
02078 #elif (NTDDI_VERSION >= NTDDI_WINXP)
02079 extern NTSYSAPI CCHAR KeNumberProcessors;
02080 #else
02081 extern PCCHAR KeNumberProcessors;
02082 #endif
02083 
02084 
02085 /******************************************************************************
02086  *                          Kernel Debugger Types                             *
02087  ******************************************************************************/
02088 typedef struct _DEBUG_DEVICE_ADDRESS {
02089   UCHAR Type;
02090   BOOLEAN Valid;
02091   UCHAR Reserved[2];
02092   PUCHAR TranslatedAddress;
02093   ULONG Length;
02094 } DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS;
02095 
02096 typedef struct _DEBUG_MEMORY_REQUIREMENTS {
02097   PHYSICAL_ADDRESS Start;
02098   PHYSICAL_ADDRESS MaxEnd;
02099   PVOID VirtualAddress;
02100   ULONG Length;
02101   BOOLEAN Cached;
02102   BOOLEAN Aligned;
02103 } DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS;
02104 
02105 typedef struct _DEBUG_DEVICE_DESCRIPTOR {
02106   ULONG Bus;
02107   ULONG Slot;
02108   USHORT Segment;
02109   USHORT VendorID;
02110   USHORT DeviceID;
02111   UCHAR BaseClass;
02112   UCHAR SubClass;
02113   UCHAR ProgIf;
02114   BOOLEAN Initialized;
02115   BOOLEAN Configured;
02116   DEBUG_DEVICE_ADDRESS BaseAddress[6];
02117   DEBUG_MEMORY_REQUIREMENTS Memory;
02118 } DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR;
02119 
02120 typedef NTSTATUS
02121 (NTAPI *pKdSetupPciDeviceForDebugging)(
02122   _In_opt_ PVOID LoaderBlock,
02123   _Inout_ PDEBUG_DEVICE_DESCRIPTOR PciDevice);
02124 
02125 typedef NTSTATUS
02126 (NTAPI *pKdReleasePciDeviceForDebugging)(
02127   _Inout_ PDEBUG_DEVICE_DESCRIPTOR PciDevice);
02128 
02129 typedef PVOID
02130 (NTAPI *pKdGetAcpiTablePhase0)(
02131   _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
02132   _In_ ULONG Signature);
02133 
02134 typedef VOID
02135 (NTAPI *pKdCheckPowerButton)(VOID);
02136 
02137 #if (NTDDI_VERSION >= NTDDI_VISTA)
02138 typedef PVOID
02139 (NTAPI *pKdMapPhysicalMemory64)(
02140   _In_ PHYSICAL_ADDRESS PhysicalAddress,
02141   _In_ ULONG NumberPages,
02142   _In_ BOOLEAN FlushCurrentTLB);
02143 
02144 typedef VOID
02145 (NTAPI *pKdUnmapVirtualAddress)(
02146   _In_ PVOID VirtualAddress,
02147   _In_ ULONG NumberPages,
02148   _In_ BOOLEAN FlushCurrentTLB);
02149 #else
02150 typedef PVOID
02151 (NTAPI *pKdMapPhysicalMemory64)(
02152   _In_ PHYSICAL_ADDRESS PhysicalAddress,
02153   _In_ ULONG NumberPages);
02154 
02155 typedef VOID
02156 (NTAPI *pKdUnmapVirtualAddress)(
02157   _In_ PVOID VirtualAddress,
02158   _In_ ULONG NumberPages);
02159 #endif
02160 
02161 typedef ULONG
02162 (NTAPI *pKdGetPciDataByOffset)(
02163   _In_ ULONG BusNumber,
02164   _In_ ULONG SlotNumber,
02165   _Out_writes_bytes_(Length) PVOID Buffer,
02166   _In_ ULONG Offset,
02167   _In_ ULONG Length);
02168 
02169 typedef ULONG
02170 (NTAPI *pKdSetPciDataByOffset)(
02171   _In_ ULONG BusNumber,
02172   _In_ ULONG SlotNumber,
02173   _In_reads_bytes_(Length) PVOID Buffer,
02174   _In_ ULONG Offset,
02175   _In_ ULONG Length);
02176 /******************************************************************************
02177  *                         Memory manager Types                               *
02178  ******************************************************************************/
02179 
02180 typedef struct _PHYSICAL_MEMORY_RANGE {
02181   PHYSICAL_ADDRESS BaseAddress;
02182   LARGE_INTEGER NumberOfBytes;
02183 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
02184 
02185 typedef NTSTATUS
02186 (NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)(
02187   _In_ PMDL DestinationMdl,
02188   _In_ PMDL SourceMdl,
02189   _In_ PVOID Context);
02190 
02191 typedef enum _MM_ROTATE_DIRECTION {
02192   MmToFrameBuffer,
02193   MmToFrameBufferNoCopy,
02194   MmToRegularMemory,
02195   MmToRegularMemoryNoCopy,
02196   MmMaximumRotateDirection
02197 } MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION;
02198 
02199 
02200 /******************************************************************************
02201  *                           Process Manager Types                            *
02202  ******************************************************************************/
02203 
02204 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE  0x00000001
02205 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
02206 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE  0x00000004
02207 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
02208 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
02209 
02210 typedef struct _QUOTA_LIMITS {
02211   SIZE_T PagedPoolLimit;
02212   SIZE_T NonPagedPoolLimit;
02213   SIZE_T MinimumWorkingSetSize;
02214   SIZE_T MaximumWorkingSetSize;
02215   SIZE_T PagefileLimit;
02216   LARGE_INTEGER TimeLimit;
02217 } QUOTA_LIMITS, *PQUOTA_LIMITS;
02218 
02219 typedef union _RATE_QUOTA_LIMIT {
02220   ULONG RateData;
02221   _ANONYMOUS_STRUCT struct {
02222     ULONG RatePercent:7;
02223     ULONG Reserved0:25;
02224   } DUMMYSTRUCTNAME;
02225 } RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT;
02226 
02227 typedef struct _QUOTA_LIMITS_EX {
02228   SIZE_T PagedPoolLimit;
02229   SIZE_T NonPagedPoolLimit;
02230   SIZE_T MinimumWorkingSetSize;
02231   SIZE_T MaximumWorkingSetSize;
02232   SIZE_T PagefileLimit;
02233   LARGE_INTEGER TimeLimit;
02234   SIZE_T WorkingSetLimit;
02235   SIZE_T Reserved2;
02236   SIZE_T Reserved3;
02237   SIZE_T Reserved4;
02238   ULONG Flags;
02239   RATE_QUOTA_LIMIT CpuRateLimit;
02240 } QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
02241 
02242 typedef struct _IO_COUNTERS {
02243   ULONGLONG ReadOperationCount;
02244   ULONGLONG WriteOperationCount;
02245   ULONGLONG OtherOperationCount;
02246   ULONGLONG ReadTransferCount;
02247   ULONGLONG WriteTransferCount;
02248   ULONGLONG OtherTransferCount;
02249 } IO_COUNTERS, *PIO_COUNTERS;
02250 
02251 typedef struct _VM_COUNTERS {
02252   SIZE_T PeakVirtualSize;
02253   SIZE_T VirtualSize;
02254   ULONG PageFaultCount;
02255   SIZE_T PeakWorkingSetSize;
02256   SIZE_T WorkingSetSize;
02257   SIZE_T QuotaPeakPagedPoolUsage;
02258   SIZE_T QuotaPagedPoolUsage;
02259   SIZE_T QuotaPeakNonPagedPoolUsage;
02260   SIZE_T QuotaNonPagedPoolUsage;
02261   SIZE_T PagefileUsage;
02262   SIZE_T PeakPagefileUsage;
02263 } VM_COUNTERS, *PVM_COUNTERS;
02264 
02265 typedef struct _VM_COUNTERS_EX {
02266   SIZE_T PeakVirtualSize;
02267   SIZE_T VirtualSize;
02268   ULONG PageFaultCount;
02269   SIZE_T PeakWorkingSetSize;
02270   SIZE_T WorkingSetSize;
02271   SIZE_T QuotaPeakPagedPoolUsage;
02272   SIZE_T QuotaPagedPoolUsage;
02273   SIZE_T QuotaPeakNonPagedPoolUsage;
02274   SIZE_T QuotaNonPagedPoolUsage;
02275   SIZE_T PagefileUsage;
02276   SIZE_T PeakPagefileUsage;
02277   SIZE_T PrivateUsage;
02278 } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
02279 
02280 #define MAX_HW_COUNTERS 16
02281 #define THREAD_PROFILING_FLAG_DISPATCH  0x00000001
02282 
02283 typedef enum _HARDWARE_COUNTER_TYPE {
02284   PMCCounter,
02285   MaxHardwareCounterType
02286 } HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE;
02287 
02288 typedef struct _HARDWARE_COUNTER {
02289   HARDWARE_COUNTER_TYPE Type;
02290   ULONG Reserved;
02291   ULONG64 Index;
02292 } HARDWARE_COUNTER, *PHARDWARE_COUNTER;
02293 
02294 typedef struct _POOLED_USAGE_AND_LIMITS {
02295   SIZE_T PeakPagedPoolUsage;
02296   SIZE_T PagedPoolUsage;
02297   SIZE_T PagedPoolLimit;
02298   SIZE_T PeakNonPagedPoolUsage;
02299   SIZE_T NonPagedPoolUsage;
02300   SIZE_T NonPagedPoolLimit;
02301   SIZE_T PeakPagefileUsage;
02302   SIZE_T PagefileUsage;
02303   SIZE_T PagefileLimit;
02304 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
02305 
02306 typedef struct _PROCESS_ACCESS_TOKEN {
02307   HANDLE Token;
02308   HANDLE Thread;
02309 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
02310 
02311 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS     0x00000003UL
02312 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS    ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
02313 
02314 typedef struct _PROCESS_EXCEPTION_PORT {
02315   _In_ HANDLE ExceptionPortHandle;
02316   _Inout_ ULONG StateFlags;
02317 } PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT;
02318 
02319 typedef VOID
02320 (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)(
02321   _In_ HANDLE ParentId,
02322   _In_ HANDLE ProcessId,
02323   _In_ BOOLEAN Create);
02324 
02325 typedef struct _PS_CREATE_NOTIFY_INFO {
02326   _In_ SIZE_T Size;
02327   _ANONYMOUS_UNION union {
02328     _In_ ULONG Flags;
02329     _ANONYMOUS_STRUCT struct {
02330       _In_ ULONG FileOpenNameAvailable:1;
02331       _In_ ULONG Reserved:31;
02332     } DUMMYSTRUCTNAME;
02333   } DUMMYUNIONNAME;
02334   _In_ HANDLE ParentProcessId;
02335   _In_ CLIENT_ID CreatingThreadId;
02336   _Inout_ struct _FILE_OBJECT *FileObject;
02337   _In_ PCUNICODE_STRING ImageFileName;
02338   _In_opt_ PCUNICODE_STRING CommandLine;
02339   _Inout_ NTSTATUS CreationStatus;
02340 } PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;
02341 
02342 typedef VOID
02343 (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)(
02344   _Inout_ PEPROCESS Process,
02345   _In_ HANDLE ProcessId,
02346   _Inout_opt_ PPS_CREATE_NOTIFY_INFO CreateInfo);
02347 
02348 typedef VOID
02349 (NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)(
02350   _In_ HANDLE ProcessId,
02351   _In_ HANDLE ThreadId,
02352   _In_ BOOLEAN Create);
02353 
02354 #define IMAGE_ADDRESSING_MODE_32BIT       3
02355 
02356 typedef struct _IMAGE_INFO {
02357   _ANONYMOUS_UNION union {
02358     ULONG Properties;
02359     _ANONYMOUS_STRUCT struct {
02360       ULONG ImageAddressingMode:8;
02361       ULONG SystemModeImage:1;
02362       ULONG ImageMappedToAllPids:1;
02363       ULONG ExtendedInfoPresent:1;
02364       ULONG Reserved:21;
02365     } DUMMYSTRUCTNAME;
02366   } DUMMYUNIONNAME;
02367   PVOID ImageBase;
02368   ULONG ImageSelector;
02369   SIZE_T ImageSize;
02370   ULONG ImageSectionNumber;
02371 } IMAGE_INFO, *PIMAGE_INFO;
02372 
02373 typedef struct _IMAGE_INFO_EX {
02374   SIZE_T Size;
02375   IMAGE_INFO ImageInfo;
02376   struct _FILE_OBJECT *FileObject;
02377 } IMAGE_INFO_EX, *PIMAGE_INFO_EX;
02378 
02379 typedef VOID
02380 (NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(
02381   _In_ PUNICODE_STRING FullImageName,
02382   _In_ HANDLE ProcessId,
02383   _In_ PIMAGE_INFO ImageInfo);
02384 
02385 #define THREAD_CSWITCH_PMU_DISABLE  FALSE
02386 #define THREAD_CSWITCH_PMU_ENABLE   TRUE
02387 
02388 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
02389 
02390 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
02391 
02392 typedef struct _NT_TIB {
02393   struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
02394   PVOID StackBase;
02395   PVOID StackLimit;
02396   PVOID SubSystemTib;
02397   _ANONYMOUS_UNION union {
02398     PVOID FiberData;
02399     ULONG Version;
02400   } DUMMYUNIONNAME;
02401   PVOID ArbitraryUserPointer;
02402   struct _NT_TIB *Self;
02403 } NT_TIB, *PNT_TIB;
02404 
02405 typedef struct _NT_TIB32 {
02406   ULONG ExceptionList;
02407   ULONG StackBase;
02408   ULONG StackLimit;
02409   ULONG SubSystemTib;
02410   _ANONYMOUS_UNION union {
02411     ULONG FiberData;
02412     ULONG Version;
02413   } DUMMYUNIONNAME;
02414   ULONG ArbitraryUserPointer;
02415   ULONG Self;
02416 } NT_TIB32,*PNT_TIB32;
02417 
02418 typedef struct _NT_TIB64 {
02419   ULONG64 ExceptionList;
02420   ULONG64 StackBase;
02421   ULONG64 StackLimit;
02422   ULONG64 SubSystemTib;
02423   _ANONYMOUS_UNION union {
02424     ULONG64 FiberData;
02425     ULONG Version;
02426   } DUMMYUNIONNAME;
02427   ULONG64 ArbitraryUserPointer;
02428   ULONG64 Self;
02429 } NT_TIB64,*PNT_TIB64;
02430 
02431 typedef enum _PROCESSINFOCLASS {
02432   ProcessBasicInformation,
02433   ProcessQuotaLimits,
02434   ProcessIoCounters,
02435   ProcessVmCounters,
02436   ProcessTimes,
02437   ProcessBasePriority,
02438   ProcessRaisePriority,
02439   ProcessDebugPort,
02440   ProcessExceptionPort,
02441   ProcessAccessToken,
02442   ProcessLdtInformation,
02443   ProcessLdtSize,
02444   ProcessDefaultHardErrorMode,
02445   ProcessIoPortHandlers,
02446   ProcessPooledUsageAndLimits,
02447   ProcessWorkingSetWatch,
02448   ProcessUserModeIOPL,
02449   ProcessEnableAlignmentFaultFixup,
02450   ProcessPriorityClass,
02451   ProcessWx86Information,
02452   ProcessHandleCount,
02453   ProcessAffinityMask,
02454   ProcessPriorityBoost,
02455   ProcessDeviceMap,
02456   ProcessSessionInformation,
02457   ProcessForegroundInformation,
02458   ProcessWow64Information,
02459   ProcessImageFileName,
02460   ProcessLUIDDeviceMapsEnabled,
02461   ProcessBreakOnTermination,
02462   ProcessDebugObjectHandle,
02463   ProcessDebugFlags,
02464   ProcessHandleTracing,
02465   ProcessIoPriority,
02466   ProcessExecuteFlags,
02467   ProcessTlsInformation,
02468   ProcessCookie,
02469   ProcessImageInformation,
02470   ProcessCycleTime,
02471   ProcessPagePriority,
02472   ProcessInstrumentationCallback,
02473   ProcessThreadStackAllocation,
02474   ProcessWorkingSetWatchEx,
02475   ProcessImageFileNameWin32,
02476   ProcessImageFileMapping,
02477   ProcessAffinityUpdateMode,
02478   ProcessMemoryAllocationMode,
02479   ProcessGroupInformation,
02480   ProcessTokenVirtualizationEnabled,
02481   ProcessConsoleHostProcess,
02482   ProcessWindowInformation,
02483   MaxProcessInfoClass
02484 } PROCESSINFOCLASS;
02485 
02486 typedef enum _THREADINFOCLASS {
02487   ThreadBasicInformation,
02488   ThreadTimes,
02489   ThreadPriority,
02490   ThreadBasePriority,
02491   ThreadAffinityMask,
02492   ThreadImpersonationToken,
02493   ThreadDescriptorTableEntry,
02494   ThreadEnableAlignmentFaultFixup,
02495   ThreadEventPair_Reusable,
02496   ThreadQuerySetWin32StartAddress,
02497   ThreadZeroTlsCell,
02498   ThreadPerformanceCount,
02499   ThreadAmILastThread,
02500   ThreadIdealProcessor,
02501   ThreadPriorityBoost,
02502   ThreadSetTlsArrayAddress,
02503   ThreadIsIoPending,
02504   ThreadHideFromDebugger,
02505   ThreadBreakOnTermination,
02506   ThreadSwitchLegacyState,
02507   ThreadIsTerminated,
02508   ThreadLastSystemCall,
02509   ThreadIoPriority,
02510   ThreadCycleTime,
02511   ThreadPagePriority,
02512   ThreadActualBasePriority,
02513   ThreadTebInformation,
02514   ThreadCSwitchMon,
02515   ThreadCSwitchPmu,
02516   ThreadWow64Context,
02517   ThreadGroupInformation,
02518   ThreadUmsInformation,
02519   ThreadCounterProfiling,
02520   ThreadIdealProcessorEx,
02521   MaxThreadInfoClass
02522 } THREADINFOCLASS;
02523 
02524 typedef struct _PAGE_PRIORITY_INFORMATION {
02525   ULONG PagePriority;
02526 } PAGE_PRIORITY_INFORMATION, *PPAGE_PRIORITY_INFORMATION;
02527 
02528 typedef struct _PROCESS_WS_WATCH_INFORMATION {
02529   PVOID FaultingPc;
02530   PVOID FaultingVa;
02531 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
02532 
02533 typedef struct _PROCESS_BASIC_INFORMATION {
02534   NTSTATUS ExitStatus;
02535   struct _PEB *PebBaseAddress;
02536   ULONG_PTR AffinityMask;
02537   KPRIORITY BasePriority;
02538   ULONG_PTR UniqueProcessId;
02539   ULONG_PTR InheritedFromUniqueProcessId;
02540 } PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
02541 
02542 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {
02543   SIZE_T Size;
02544   PROCESS_BASIC_INFORMATION BasicInfo;
02545   _ANONYMOUS_UNION union {
02546     ULONG Flags;
02547     _ANONYMOUS_STRUCT struct {
02548       ULONG IsProtectedProcess:1;
02549       ULONG IsWow64Process:1;
02550       ULONG IsProcessDeleting:1;
02551       ULONG IsCrossSessionCreate:1;
02552       ULONG SpareBits:28;
02553     } DUMMYSTRUCTNAME;
02554   } DUMMYUNIONNAME;
02555 } PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION;
02556 
02557 typedef struct _PROCESS_DEVICEMAP_INFORMATION {
02558   _ANONYMOUS_UNION union {
02559     struct {
02560       HANDLE DirectoryHandle;
02561     } Set;
02562     struct {
02563       ULONG DriveMap;
02564       UCHAR DriveType[32];
02565     } Query;
02566   } DUMMYUNIONNAME;
02567 } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
02568 
02569 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX {
02570   _ANONYMOUS_UNION union {
02571     struct {
02572       HANDLE DirectoryHandle;
02573     } Set;
02574     struct {
02575       ULONG DriveMap;
02576       UCHAR DriveType[32];
02577     } Query;
02578   } DUMMYUNIONNAME;
02579   ULONG Flags;
02580 } PROCESS_DEVICEMAP_INFORMATION_EX, *PPROCESS_DEVICEMAP_INFORMATION_EX;
02581 
02582 typedef struct _PROCESS_SESSION_INFORMATION {
02583   ULONG SessionId;
02584 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
02585 
02586 typedef struct _PROCESS_HANDLE_TRACING_ENABLE {
02587   ULONG Flags;
02588 } PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE;
02589 
02590 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX {
02591   ULONG Flags;
02592   ULONG TotalSlots;
02593 } PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX;
02594 
02595 typedef struct _PROCESS_HANDLE_TRACING_ENTRY {
02596   HANDLE Handle;
02597   CLIENT_ID ClientId;
02598   ULONG Type;
02599   PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS];
02600 } PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY;
02601 
02602 typedef struct _PROCESS_HANDLE_TRACING_QUERY {
02603   HANDLE Handle;
02604   ULONG TotalTraces;
02605   PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1];
02606 } PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY;
02607 
02608 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
02609 
02610 
02611 /******************************************************************************
02612  *                           Runtime Library Types                            *
02613  ******************************************************************************/
02614 
02615 
02616 #ifndef _RTL_RUN_ONCE_DEF
02617 #define _RTL_RUN_ONCE_DEF
02618 
02619 #define RTL_RUN_ONCE_INIT {0}
02620 
02621 #define RTL_RUN_ONCE_CHECK_ONLY     0x00000001UL
02622 #define RTL_RUN_ONCE_ASYNC          0x00000002UL
02623 #define RTL_RUN_ONCE_INIT_FAILED    0x00000004UL
02624 
02625 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
02626 
02627 #define RTL_HASH_ALLOCATED_HEADER            0x00000001
02628 
02629 #define RTL_HASH_RESERVED_SIGNATURE 0
02630 
02631 /* RtlVerifyVersionInfo() ComparisonType */
02632 
02633 #define VER_EQUAL                       1
02634 #define VER_GREATER                     2
02635 #define VER_GREATER_EQUAL               3
02636 #define VER_LESS                        4
02637 #define VER_LESS_EQUAL                  5
02638 #define VER_AND                         6
02639 #define VER_OR                          7
02640 
02641 #define VER_CONDITION_MASK              7
02642 #define VER_NUM_BITS_PER_CONDITION_MASK 3
02643 
02644 /* RtlVerifyVersionInfo() TypeMask */
02645 
02646 #define VER_MINORVERSION                  0x0000001
02647 #define VER_MAJORVERSION                  0x0000002
02648 #define VER_BUILDNUMBER                   0x0000004
02649 #define VER_PLATFORMID                    0x0000008
02650 #define VER_SERVICEPACKMINOR              0x0000010
02651 #define VER_SERVICEPACKMAJOR              0x0000020
02652 #define VER_SUITENAME                     0x0000040
02653 #define VER_PRODUCT_TYPE                  0x0000080
02654 
02655 #define VER_NT_WORKSTATION              0x0000001
02656 #define VER_NT_DOMAIN_CONTROLLER        0x0000002
02657 #define VER_NT_SERVER                   0x0000003
02658 
02659 #define VER_PLATFORM_WIN32s             0
02660 #define VER_PLATFORM_WIN32_WINDOWS      1
02661 #define VER_PLATFORM_WIN32_NT           2
02662 
02663 typedef union _RTL_RUN_ONCE {
02664   PVOID Ptr;
02665 } RTL_RUN_ONCE, *PRTL_RUN_ONCE;
02666 
02667 _Function_class_(RTL_RUN_ONCE_INIT_FN)
02668 _IRQL_requires_same_
02669 typedef ULONG /* LOGICAL */
02670 (NTAPI *PRTL_RUN_ONCE_INIT_FN) (
02671   _Inout_ PRTL_RUN_ONCE RunOnce,
02672   _Inout_opt_ PVOID Parameter,
02673   _Inout_opt_ PVOID *Context);
02674 
02675 #endif /* _RTL_RUN_ONCE_DEF */
02676 
02677 typedef enum _TABLE_SEARCH_RESULT {
02678   TableEmptyTree,
02679   TableFoundNode,
02680   TableInsertAsLeft,
02681   TableInsertAsRight
02682 } TABLE_SEARCH_RESULT;
02683 
02684 typedef enum _RTL_GENERIC_COMPARE_RESULTS {
02685   GenericLessThan,
02686   GenericGreaterThan,
02687   GenericEqual
02688 } RTL_GENERIC_COMPARE_RESULTS;
02689 
02690 // Forwarder
02691 struct _RTL_AVL_TABLE;
02692 
02693 _IRQL_requires_same_
02694 _Function_class_(RTL_AVL_COMPARE_ROUTINE)
02695 typedef RTL_GENERIC_COMPARE_RESULTS
02696 (NTAPI RTL_AVL_COMPARE_ROUTINE) (
02697   _In_ struct _RTL_AVL_TABLE *Table,
02698   _In_ PVOID FirstStruct,
02699   _In_ PVOID SecondStruct);
02700 typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE;
02701 
02702 _IRQL_requires_same_
02703 _Function_class_(RTL_AVL_ALLOCATE_ROUTINE)
02704 __drv_allocatesMem(Mem)
02705 typedef PVOID
02706 (NTAPI RTL_AVL_ALLOCATE_ROUTINE) (
02707   _In_ struct _RTL_AVL_TABLE *Table,
02708   _In_ CLONG ByteSize);
02709 typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE;
02710 
02711 _IRQL_requires_same_
02712 _Function_class_(RTL_AVL_FREE_ROUTINE)
02713 typedef VOID
02714 (NTAPI RTL_AVL_FREE_ROUTINE) (
02715   _In_ struct _RTL_AVL_TABLE *Table,
02716   _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer);
02717 typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE;
02718 
02719 _IRQL_requires_same_
02720 _Function_class_(RTL_AVL_MATCH_FUNCTION)
02721 typedef NTSTATUS
02722 (NTAPI RTL_AVL_MATCH_FUNCTION) (
02723   _In_ struct _RTL_AVL_TABLE *Table,
02724   _In_ PVOID UserData,
02725   _In_ PVOID MatchData);
02726 typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION;
02727 
02728 typedef struct _RTL_BALANCED_LINKS {
02729   struct _RTL_BALANCED_LINKS *Parent;
02730   struct _RTL_BALANCED_LINKS *LeftChild;
02731   struct _RTL_BALANCED_LINKS *RightChild;
02732   CHAR Balance;
02733   UCHAR Reserved[3];
02734 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
02735 
02736 typedef struct _RTL_AVL_TABLE {
02737   RTL_BALANCED_LINKS BalancedRoot;
02738   PVOID OrderedPointer;
02739   ULONG WhichOrderedElement;
02740   ULONG NumberGenericTableElements;
02741   ULONG DepthOfTree;
02742   PRTL_BALANCED_LINKS RestartKey;
02743   ULONG DeleteCount;
02744   PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
02745   PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
02746   PRTL_AVL_FREE_ROUTINE FreeRoutine;
02747   PVOID TableContext;
02748 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
02749 
02750 typedef struct _RTL_SPLAY_LINKS {
02751   struct _RTL_SPLAY_LINKS *Parent;
02752   struct _RTL_SPLAY_LINKS *LeftChild;
02753   struct _RTL_SPLAY_LINKS *RightChild;
02754 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
02755 
02756 #ifndef RTL_USE_AVL_TABLES
02757 
02758 struct _RTL_GENERIC_TABLE;
02759 
02760 _IRQL_requires_same_
02761 _Function_class_(RTL_GENERIC_COMPARE_ROUTINE)
02762 typedef RTL_GENERIC_COMPARE_RESULTS
02763 (NTAPI RTL_GENERIC_COMPARE_ROUTINE) (
02764   _In_ struct _RTL_GENERIC_TABLE *Table,
02765   _In_ PVOID FirstStruct,
02766   _In_ PVOID SecondStruct);
02767 typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE;
02768 
02769 _IRQL_requires_same_
02770 _Function_class_(RTL_GENERIC_ALLOCATE_ROUTINE)
02771 __drv_allocatesMem(Mem)
02772 typedef PVOID
02773 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) (
02774   _In_ struct _RTL_GENERIC_TABLE *Table,
02775   _In_ CLONG ByteSize);
02776 typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE;
02777 
02778 _IRQL_requires_same_
02779 _Function_class_(RTL_GENERIC_FREE_ROUTINE)
02780 typedef VOID
02781 (NTAPI RTL_GENERIC_FREE_ROUTINE) (
02782   _In_ struct _RTL_GENERIC_TABLE *Table,
02783   _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer);
02784 typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE;
02785 
02786 typedef struct _RTL_GENERIC_TABLE {
02787   PRTL_SPLAY_LINKS TableRoot;
02788   LIST_ENTRY InsertOrderList;
02789   PLIST_ENTRY OrderedPointer;
02790   ULONG WhichOrderedElement;
02791   ULONG NumberGenericTableElements;
02792   PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
02793   PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
02794   PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
02795   PVOID TableContext;
02796 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
02797 
02798 #endif /* !RTL_USE_AVL_TABLES */
02799 
02800 #ifdef RTL_USE_AVL_TABLES
02801 
02802 #undef  RTL_GENERIC_COMPARE_ROUTINE
02803 #undef PRTL_GENERIC_COMPARE_ROUTINE
02804 #undef  RTL_GENERIC_ALLOCATE_ROUTINE
02805 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
02806 #undef  RTL_GENERIC_FREE_ROUTINE
02807 #undef PRTL_GENERIC_FREE_ROUTINE
02808 #undef  RTL_GENERIC_TABLE
02809 #undef PRTL_GENERIC_TABLE
02810 
02811 #define  RTL_GENERIC_COMPARE_ROUTINE     RTL_AVL_COMPARE_ROUTINE
02812 #define PRTL_GENERIC_COMPARE_ROUTINE    PRTL_AVL_COMPARE_ROUTINE
02813 #define  RTL_GENERIC_ALLOCATE_ROUTINE    RTL_AVL_ALLOCATE_ROUTINE
02814 #define PRTL_GENERIC_ALLOCATE_ROUTINE   PRTL_AVL_ALLOCATE_ROUTINE
02815 #define  RTL_GENERIC_FREE_ROUTINE        RTL_AVL_FREE_ROUTINE
02816 #define PRTL_GENERIC_FREE_ROUTINE       PRTL_AVL_FREE_ROUTINE
02817 #define  RTL_GENERIC_TABLE               RTL_AVL_TABLE
02818 #define PRTL_GENERIC_TABLE              PRTL_AVL_TABLE
02819 
02820 #endif /* RTL_USE_AVL_TABLES */
02821 
02822 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
02823 
02824 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY {
02825   LIST_ENTRY Linkage;
02826   ULONG_PTR Signature;
02827 } RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY;
02828 
02829 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT {
02830   PLIST_ENTRY ChainHead;
02831   PLIST_ENTRY PrevLinkage;
02832   ULONG_PTR Signature;
02833 } RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT;
02834 
02835 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR {
02836   RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry;
02837   PLIST_ENTRY ChainHead;
02838   ULONG BucketIndex;
02839 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR;
02840 
02841 typedef struct _RTL_DYNAMIC_HASH_TABLE {
02842   ULONG Flags;
02843   ULONG Shift;
02844   ULONG TableSize;
02845   ULONG Pivot;
02846   ULONG DivisorMask;
02847   ULONG NumEntries;
02848   ULONG NonEmptyBuckets;
02849   ULONG NumEnumerators;
02850   PVOID Directory;
02851 } RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE;
02852 
02853 typedef struct _OSVERSIONINFOA {
02854   ULONG dwOSVersionInfoSize;
02855   ULONG dwMajorVersion;
02856   ULONG dwMinorVersion;
02857   ULONG dwBuildNumber;
02858   ULONG dwPlatformId;
02859   CHAR szCSDVersion[128];
02860 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
02861 
02862 typedef struct _OSVERSIONINFOW {
02863   ULONG dwOSVersionInfoSize;
02864   ULONG dwMajorVersion;
02865   ULONG dwMinorVersion;
02866   ULONG dwBuildNumber;
02867   ULONG dwPlatformId;
02868   WCHAR szCSDVersion[128];
02869 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
02870 
02871 typedef struct _OSVERSIONINFOEXA {
02872   ULONG dwOSVersionInfoSize;
02873   ULONG dwMajorVersion;
02874   ULONG dwMinorVersion;
02875   ULONG dwBuildNumber;
02876   ULONG dwPlatformId;
02877   CHAR szCSDVersion[128];
02878   USHORT wServicePackMajor;
02879   USHORT wServicePackMinor;
02880   USHORT wSuiteMask;
02881   UCHAR wProductType;
02882   UCHAR wReserved;
02883 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
02884 
02885 typedef struct _OSVERSIONINFOEXW {
02886   ULONG dwOSVersionInfoSize;
02887   ULONG dwMajorVersion;
02888   ULONG dwMinorVersion;
02889   ULONG dwBuildNumber;
02890   ULONG dwPlatformId;
02891   WCHAR szCSDVersion[128];
02892   USHORT wServicePackMajor;
02893   USHORT wServicePackMinor;
02894   USHORT wSuiteMask;
02895   UCHAR wProductType;
02896   UCHAR wReserved;
02897 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
02898 
02899 #ifdef UNICODE
02900 typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
02901 typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
02902 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
02903 typedef OSVERSIONINFOW OSVERSIONINFO;
02904 typedef POSVERSIONINFOW POSVERSIONINFO;
02905 typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
02906 #else
02907 typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
02908 typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
02909 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
02910 typedef OSVERSIONINFOA OSVERSIONINFO;
02911 typedef POSVERSIONINFOA POSVERSIONINFO;
02912 typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
02913 #endif /* UNICODE */
02914 
02915 #define HASH_ENTRY_KEY(x)    ((x)->Signature)
02916 
02917 /******************************************************************************
02918  *                            Security Manager Types                          *
02919  ******************************************************************************/
02920 #define SE_UNSOLICITED_INPUT_PRIVILEGE    6
02921 
02922 typedef enum _WELL_KNOWN_SID_TYPE {
02923   WinNullSid = 0,
02924   WinWorldSid = 1,
02925   WinLocalSid = 2,
02926   WinCreatorOwnerSid = 3,
02927   WinCreatorGroupSid = 4,
02928   WinCreatorOwnerServerSid = 5,
02929   WinCreatorGroupServerSid = 6,
02930   WinNtAuthoritySid = 7,
02931   WinDialupSid = 8,
02932   WinNetworkSid = 9,
02933   WinBatchSid = 10,
02934   WinInteractiveSid = 11,
02935   WinServiceSid = 12,
02936   WinAnonymousSid = 13,
02937   WinProxySid = 14,
02938   WinEnterpriseControllersSid = 15,
02939   WinSelfSid = 16,
02940   WinAuthenticatedUserSid = 17,
02941   WinRestrictedCodeSid = 18,
02942   WinTerminalServerSid = 19,
02943   WinRemoteLogonIdSid = 20,
02944   WinLogonIdsSid = 21,
02945   WinLocalSystemSid = 22,
02946   WinLocalServiceSid = 23,
02947   WinNetworkServiceSid = 24,
02948   WinBuiltinDomainSid = 25,
02949   WinBuiltinAdministratorsSid = 26,
02950   WinBuiltinUsersSid = 27,
02951   WinBuiltinGuestsSid = 28,
02952   WinBuiltinPowerUsersSid = 29,
02953   WinBuiltinAccountOperatorsSid = 30,
02954   WinBuiltinSystemOperatorsSid = 31,
02955   WinBuiltinPrintOperatorsSid = 32,
02956   WinBuiltinBackupOperatorsSid = 33,
02957   WinBuiltinReplicatorSid = 34,
02958   WinBuiltinPreWindows2000CompatibleAccessSid = 35,
02959   WinBuiltinRemoteDesktopUsersSid = 36,
02960   WinBuiltinNetworkConfigurationOperatorsSid = 37,
02961   WinAccountAdministratorSid = 38,
02962   WinAccountGuestSid = 39,
02963   WinAccountKrbtgtSid = 40,
02964   WinAccountDomainAdminsSid = 41,
02965   WinAccountDomainUsersSid = 42,
02966   WinAccountDomainGuestsSid = 43,
02967   WinAccountComputersSid = 44,
02968   WinAccountControllersSid = 45,
02969   WinAccountCertAdminsSid = 46,
02970   WinAccountSchemaAdminsSid = 47,
02971   WinAccountEnterpriseAdminsSid = 48,
02972   WinAccountPolicyAdminsSid = 49,
02973   WinAccountRasAndIasServersSid = 50,
02974   WinNTLMAuthenticationSid = 51,
02975   WinDigestAuthenticationSid = 52,
02976   WinSChannelAuthenticationSid = 53,
02977   WinThisOrganizationSid = 54,
02978   WinOtherOrganizationSid = 55,
02979   WinBuiltinIncomingForestTrustBuildersSid = 56,
02980   WinBuiltinPerfMonitoringUsersSid = 57,
02981   WinBuiltinPerfLoggingUsersSid = 58,
02982   WinBuiltinAuthorizationAccessSid = 59,
02983   WinBuiltinTerminalServerLicenseServersSid = 60,
02984   WinBuiltinDCOMUsersSid = 61,
02985   WinBuiltinIUsersSid = 62,
02986   WinIUserSid = 63,
02987   WinBuiltinCryptoOperatorsSid = 64,
02988   WinUntrustedLabelSid = 65,
02989   WinLowLabelSid = 66,
02990   WinMediumLabelSid = 67,
02991   WinHighLabelSid = 68,
02992   WinSystemLabelSid = 69,
02993   WinWriteRestrictedCodeSid = 70,
02994   WinCreatorOwnerRightsSid = 71,
02995   WinCacheablePrincipalsGroupSid = 72,
02996   WinNonCacheablePrincipalsGroupSid = 73,
02997   WinEnterpriseReadonlyControllersSid = 74,
02998   WinAccountReadonlyControllersSid = 75,
02999   WinBuiltinEventLogReadersGroup = 76,
03000   WinNewEnterpriseReadonlyControllersSid = 77,
03001   WinBuiltinCertSvcDComAccessGroup = 78,
03002   WinMediumPlusLabelSid = 79,
03003   WinLocalLogonSid = 80,
03004   WinConsoleLogonSid = 81,
03005   WinThisOrganizationCertificateSid = 82,
03006 } WELL_KNOWN_SID_TYPE;
03007 
03008 #if defined(_M_IX86)
03009 
03010 #define PAUSE_PROCESSOR YieldProcessor();
03011 
03012 #define KERNEL_STACK_SIZE                   12288
03013 #define KERNEL_LARGE_STACK_SIZE             61440
03014 #define KERNEL_LARGE_STACK_COMMIT           12288
03015 
03016 #define SIZE_OF_80387_REGISTERS   80
03017 
03018 #if !defined(RC_INVOKED)
03019 
03020 #define CONTEXT_i386               0x10000
03021 #define CONTEXT_i486               0x10000
03022 #define CONTEXT_CONTROL            (CONTEXT_i386|0x00000001L)
03023 #define CONTEXT_INTEGER            (CONTEXT_i386|0x00000002L)
03024 #define CONTEXT_SEGMENTS           (CONTEXT_i386|0x00000004L)
03025 #define CONTEXT_FLOATING_POINT     (CONTEXT_i386|0x00000008L)
03026 #define CONTEXT_DEBUG_REGISTERS    (CONTEXT_i386|0x00000010L)
03027 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
03028 
03029 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
03030 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS |  \
03031                      CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS |      \
03032                      CONTEXT_EXTENDED_REGISTERS)
03033 
03034 #define CONTEXT_XSTATE          (CONTEXT_i386 | 0x00000040L)
03035 
03036 #endif /* !defined(RC_INVOKED) */
03037 
03038 typedef struct _FLOATING_SAVE_AREA {
03039   ULONG ControlWord;
03040   ULONG StatusWord;
03041   ULONG TagWord;
03042   ULONG ErrorOffset;
03043   ULONG ErrorSelector;
03044   ULONG DataOffset;
03045   ULONG DataSelector;
03046   UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
03047   ULONG Cr0NpxState;
03048 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
03049 
03050 #include "pshpack4.h"
03051 typedef struct _CONTEXT {
03052   ULONG ContextFlags;
03053   ULONG Dr0;
03054   ULONG Dr1;
03055   ULONG Dr2;
03056   ULONG Dr3;
03057   ULONG Dr6;
03058   ULONG Dr7;
03059   FLOATING_SAVE_AREA FloatSave;
03060   ULONG SegGs;
03061   ULONG SegFs;
03062   ULONG SegEs;
03063   ULONG SegDs;
03064   ULONG Edi;
03065   ULONG Esi;
03066   ULONG Ebx;
03067   ULONG Edx;
03068   ULONG Ecx;
03069   ULONG Eax;
03070   ULONG Ebp;
03071   ULONG Eip;
03072   ULONG SegCs;
03073   ULONG EFlags;
03074   ULONG Esp;
03075   ULONG SegSs;
03076   UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
03077 } CONTEXT;
03078 #include "poppack.h"
03079 
03080 #define KeGetPcr()                      PCR
03081 
03082 #define PCR_MINOR_VERSION 1
03083 #define PCR_MAJOR_VERSION 1
03084 
03085 typedef struct _KPCR {
03086   union {
03087     NT_TIB NtTib;
03088     struct {
03089       struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
03090       PVOID Used_StackBase;
03091       PVOID Spare2;
03092       PVOID TssCopy;
03093       ULONG ContextSwitches;
03094       KAFFINITY SetMemberCopy;
03095       PVOID Used_Self;
03096     };
03097   };
03098   struct _KPCR *SelfPcr;
03099   struct _KPRCB *Prcb;
03100   KIRQL Irql;
03101   ULONG IRR;
03102   ULONG IrrActive;
03103   ULONG IDR;
03104   PVOID KdVersionBlock;
03105   struct _KIDTENTRY *IDT;
03106   struct _KGDTENTRY *GDT;
03107   struct _KTSS *TSS;
03108   USHORT MajorVersion;
03109   USHORT MinorVersion;
03110   KAFFINITY SetMember;
03111   ULONG StallScaleFactor;
03112   UCHAR SpareUnused;
03113   UCHAR Number;
03114   UCHAR Spare0;
03115   UCHAR SecondLevelCacheAssociativity;
03116   ULONG VdmAlert;
03117   ULONG KernelReserved[14];
03118   ULONG SecondLevelCacheSize;
03119   ULONG HalReserved[16];
03120 } KPCR, *PKPCR;
03121 
03122 FORCEINLINE
03123 ULONG
03124 KeGetCurrentProcessorNumber(VOID)
03125 {
03126     return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number));
03127 }
03128 
03129 
03130 
03131 
03132 
03133 
03134 extern NTKERNELAPI PVOID MmHighestUserAddress;
03135 extern NTKERNELAPI PVOID MmSystemRangeStart;
03136 extern NTKERNELAPI ULONG MmUserProbeAddress;
03137 
03138 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
03139 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
03140 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
03141 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
03142 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_;
03143 #else
03144 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
03145 #endif
03146 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
03147 #define MM_KSEG0_BASE       MM_SYSTEM_RANGE_START
03148 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
03149 #if !defined (_X86PAE_)
03150 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
03151 #else
03152 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
03153 #endif
03154 
03155 #elif defined(_M_AMD64)
03156 
03157 #define PAUSE_PROCESSOR YieldProcessor();
03158 
03159 #define KERNEL_STACK_SIZE 0x6000
03160 #define KERNEL_LARGE_STACK_SIZE 0x12000
03161 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
03162 
03163 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
03164 
03165 #define EXCEPTION_READ_FAULT    0
03166 #define EXCEPTION_WRITE_FAULT   1
03167 #define EXCEPTION_EXECUTE_FAULT 8
03168 
03169 #if !defined(RC_INVOKED)
03170 
03171 #define CONTEXT_AMD64 0x100000
03172 
03173 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
03174 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
03175 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
03176 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
03177 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
03178 
03179 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
03180 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
03181 
03182 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
03183 
03184 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
03185 #define CONTEXT_SERVICE_ACTIVE 0x10000000
03186 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
03187 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
03188 
03189 #endif /* !defined(RC_INVOKED) */
03190 
03191 #define INITIAL_MXCSR                  0x1f80
03192 #define INITIAL_FPCSR                  0x027f
03193 
03194 typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
03195   ULONG64 P1Home;
03196   ULONG64 P2Home;
03197   ULONG64 P3Home;
03198   ULONG64 P4Home;
03199   ULONG64 P5Home;
03200   ULONG64 P6Home;
03201   ULONG ContextFlags;
03202   ULONG MxCsr;
03203   USHORT SegCs;
03204   USHORT SegDs;
03205   USHORT SegEs;
03206   USHORT SegFs;
03207   USHORT SegGs;
03208   USHORT SegSs;
03209   ULONG EFlags;
03210   ULONG64 Dr0;
03211   ULONG64 Dr1;
03212   ULONG64 Dr2;
03213   ULONG64 Dr3;
03214   ULONG64 Dr6;
03215   ULONG64 Dr7;
03216   ULONG64 Rax;
03217   ULONG64 Rcx;
03218   ULONG64 Rdx;
03219   ULONG64 Rbx;
03220   ULONG64 Rsp;
03221   ULONG64 Rbp;
03222   ULONG64 Rsi;
03223   ULONG64 Rdi;
03224   ULONG64 R8;
03225   ULONG64 R9;
03226   ULONG64 R10;
03227   ULONG64 R11;
03228   ULONG64 R12;
03229   ULONG64 R13;
03230   ULONG64 R14;
03231   ULONG64 R15;
03232   ULONG64 Rip;
03233   union {
03234     XMM_SAVE_AREA32 FltSave;
03235     struct {
03236       M128A Header[2];
03237       M128A Legacy[8];
03238       M128A Xmm0;
03239       M128A Xmm1;
03240       M128A Xmm2;
03241       M128A Xmm3;
03242       M128A Xmm4;
03243       M128A Xmm5;
03244       M128A Xmm6;
03245       M128A Xmm7;
03246       M128A Xmm8;
03247       M128A Xmm9;
03248       M128A Xmm10;
03249       M128A Xmm11;
03250       M128A Xmm12;
03251       M128A Xmm13;
03252       M128A Xmm14;
03253       M128A Xmm15;
03254     } DUMMYSTRUCTNAME;
03255   } DUMMYUNIONNAME;
03256   M128A VectorRegister[26];
03257   ULONG64 VectorControl;
03258   ULONG64 DebugControl;
03259   ULONG64 LastBranchToRip;
03260   ULONG64 LastBranchFromRip;
03261   ULONG64 LastExceptionToRip;
03262   ULONG64 LastExceptionFromRip;
03263 } CONTEXT;
03264 
03265 #define PCR_MINOR_VERSION 1
03266 #define PCR_MAJOR_VERSION 1
03267 
03268 typedef struct _KPCR
03269 {
03270     _ANONYMOUS_UNION union
03271     {
03272         NT_TIB NtTib;
03273         _ANONYMOUS_STRUCT struct
03274         {
03275             union _KGDTENTRY64 *GdtBase;
03276             struct _KTSS64 *TssBase;
03277             ULONG64 UserRsp;
03278             struct _KPCR *Self;
03279             struct _KPRCB *CurrentPrcb;
03280             PKSPIN_LOCK_QUEUE LockArray;
03281             PVOID Used_Self;
03282         };
03283     };
03284     union _KIDTENTRY64 *IdtBase;
03285     ULONG64 Unused[2];
03286     KIRQL Irql;
03287     UCHAR SecondLevelCacheAssociativity;
03288     UCHAR ObsoleteNumber;
03289     UCHAR Fill0;
03290     ULONG Unused0[3];
03291     USHORT MajorVersion;
03292     USHORT MinorVersion;
03293     ULONG StallScaleFactor;
03294     PVOID Unused1[3];
03295     ULONG KernelReserved[15];
03296     ULONG SecondLevelCacheSize;
03297     ULONG HalReserved[16];
03298     ULONG Unused2;
03299     PVOID KdVersionBlock;
03300     PVOID Unused3;
03301     ULONG PcrAlign1[24];
03302 } KPCR, *PKPCR;
03303 
03304 FORCEINLINE
03305 PKPCR
03306 KeGetPcr(VOID)
03307 {
03308     return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self));
03309 }
03310 
03311 FORCEINLINE
03312 ULONG
03313 KeGetCurrentProcessorNumber(VOID)
03314 {
03315     return (ULONG)__readgsword(0x184);
03316 }
03317 
03318 
03319 #define PTI_SHIFT  12L
03320 #define PDI_SHIFT  21L
03321 #define PPI_SHIFT  30L
03322 #define PXI_SHIFT  39L
03323 #define PTE_PER_PAGE 512
03324 #define PDE_PER_PAGE 512
03325 #define PPE_PER_PAGE 512
03326 #define PXE_PER_PAGE 512
03327 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
03328 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
03329 #define PPI_MASK (PPE_PER_PAGE - 1)
03330 #define PXI_MASK (PXE_PER_PAGE - 1)
03331 
03332 #define PXE_BASE    0xFFFFF6FB7DBED000ULL
03333 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
03334 #define PPE_BASE    0xFFFFF6FB7DA00000ULL
03335 #define PDE_BASE    0xFFFFF6FB40000000ULL
03336 #define PTE_BASE    0xFFFFF68000000000ULL
03337 #define PXE_TOP     0xFFFFF6FB7DBEDFFFULL
03338 #define PPE_TOP     0xFFFFF6FB7DBFFFFFULL
03339 #define PDE_TOP     0xFFFFF6FB7FFFFFFFULL
03340 #define PTE_TOP     0xFFFFF6FFFFFFFFFFULL
03341 
03342 extern NTKERNELAPI PVOID MmHighestUserAddress;
03343 extern NTKERNELAPI PVOID MmSystemRangeStart;
03344 extern NTKERNELAPI ULONG64 MmUserProbeAddress;
03345 
03346 #define MM_HIGHEST_USER_ADDRESS           MmHighestUserAddress
03347 #define MM_SYSTEM_RANGE_START             MmSystemRangeStart
03348 #define MM_USER_PROBE_ADDRESS             MmUserProbeAddress
03349 #define MM_LOWEST_USER_ADDRESS   (PVOID)0x10000
03350 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
03351 
03352 
03353 #elif defined(_M_IA64)
03354 
03355 #elif defined(_M_PPC)
03356 
03357 
03358 #elif defined(_M_MIPS)
03359 
03360 #elif defined(_M_ARM)
03361 #else
03362 #error Unknown Architecture
03363 #endif
03364 
03365 /******************************************************************************
03366  *                          Executive Functions                               *
03367  ******************************************************************************/
03368 
03369 static __inline PVOID
03370 ExAllocateFromZone(
03371   IN PZONE_HEADER Zone)
03372 {
03373   if (Zone->FreeList.Next)
03374     Zone->FreeList.Next = Zone->FreeList.Next->Next;
03375   return (PVOID) Zone->FreeList.Next;
03376 }
03377 
03378 static __inline PVOID
03379 ExFreeToZone(
03380   IN PZONE_HEADER Zone,
03381   IN PVOID Block)
03382 {
03383   ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
03384   Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
03385   return ((PSINGLE_LIST_ENTRY) Block)->Next;
03386 }
03387 
03388 /*
03389  * PVOID
03390  * ExInterlockedAllocateFromZone(
03391  *   IN PZONE_HEADER  Zone,
03392  *   IN PKSPIN_LOCK  Lock)
03393  */
03394 #define ExInterlockedAllocateFromZone(Zone, Lock) \
03395     ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
03396 
03397 /* PVOID
03398  * ExInterlockedFreeToZone(
03399  *  IN PZONE_HEADER  Zone,
03400  *  IN PVOID  Block,
03401  *  IN PKSPIN_LOCK  Lock);
03402  */
03403 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
03404     ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
03405 
03406 /*
03407  * BOOLEAN
03408  * ExIsFullZone(
03409  *  IN PZONE_HEADER  Zone)
03410  */
03411 #define ExIsFullZone(Zone) \
03412   ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
03413 
03414 /* BOOLEAN
03415  * ExIsObjectInFirstZoneSegment(
03416  *     IN PZONE_HEADER Zone,
03417  *     IN PVOID Object);
03418  */
03419 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
03420     ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
03421                 ((PUCHAR)(Object) <  (PUCHAR)(Zone)->SegmentList.Next + \
03422                          (Zone)->TotalSegmentSize)) )
03423 
03424 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
03425 #define ExAcquireResourceShared ExAcquireResourceSharedLite
03426 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
03427 #define ExDeleteResource ExDeleteResourceLite
03428 #define ExInitializeResource ExInitializeResourceLite
03429 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
03430 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
03431 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
03432 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
03433 
03434 #ifndef _M_IX86
03435 #define RESULT_ZERO     0
03436 #define RESULT_NEGATIVE 1
03437 #define RESULT_POSITIVE 2
03438 #endif
03439 
03440 typedef enum _INTERLOCKED_RESULT {
03441   ResultNegative = RESULT_NEGATIVE,
03442   ResultZero = RESULT_ZERO,
03443   ResultPositive = RESULT_POSITIVE
03444 } INTERLOCKED_RESULT;
03445 
03446 #ifdef _X86_
03447 
03448 NTKERNELAPI
03449 INTERLOCKED_RESULT
03450 FASTCALL
03451 Exfi386InterlockedIncrementLong(
03452   _Inout_ _Interlocked_operand_ LONG volatile *Addend);
03453 
03454 NTKERNELAPI
03455 INTERLOCKED_RESULT
03456 FASTCALL
03457 Exfi386InterlockedDecrementLong(
03458   _Inout_ _Interlocked_operand_ PLONG Addend);
03459 
03460 NTKERNELAPI
03461 ULONG
03462 FASTCALL
03463 Exfi386InterlockedExchangeUlong(
03464   _Inout_ _Interlocked_operand_ PULONG Target,
03465   _In_ ULONG Value);
03466 
03467 #endif
03468 
03469 
03470 #if (NTDDI_VERSION >= NTDDI_WIN2K)
03471 NTKERNELAPI
03472 NTSTATUS
03473 NTAPI
03474 ExExtendZone(
03475   _Inout_ PZONE_HEADER Zone,
03476   _Inout_ PVOID Segment,
03477   _In_ ULONG SegmentSize);
03478 
03479 NTKERNELAPI
03480 NTSTATUS
03481 NTAPI
03482 ExInitializeZone(
03483   _Out_ PZONE_HEADER Zone,
03484   _In_ ULONG BlockSize,
03485   _Inout_ PVOID InitialSegment,
03486   _In_ ULONG InitialSegmentSize);
03487 
03488 _IRQL_requires_max_(DISPATCH_LEVEL)
03489 NTKERNELAPI
03490 NTSTATUS
03491 NTAPI
03492 ExInterlockedExtendZone(
03493   _Inout_ PZONE_HEADER Zone,
03494   _Inout_ PVOID Segment,
03495   _In_ ULONG SegmentSize,
03496   _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock);
03497 
03498 _IRQL_requires_max_(PASSIVE_LEVEL)
03499 NTKERNELAPI
03500 NTSTATUS
03501 NTAPI
03502 ExUuidCreate(
03503   _Out_ UUID *Uuid);
03504 
03505 _IRQL_requires_max_(PASSIVE_LEVEL)
03506 NTKERNELAPI
03507 DECLSPEC_NORETURN
03508 VOID
03509 NTAPI
03510 ExRaiseAccessViolation(VOID);
03511 
03512 _IRQL_requires_max_(PASSIVE_LEVEL)
03513 NTKERNELAPI
03514 DECLSPEC_NORETURN
03515 VOID
03516 NTAPI
03517 ExRaiseDatatypeMisalignment(VOID);
03518 
03519 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
03520 
03521 
03522 /* Hardware Abstraction Layer Functions */
03523 
03524 #if (NTDDI_VERSION >= NTDDI_WIN2K)
03525 
03526 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
03527 
03528 /* Nothing here */
03529 
03530 #else /* USE_DMA_MACROS ... */
03531 
03532 //DECLSPEC_DEPRECATED_DDK
03533 NTHALAPI
03534 VOID
03535 NTAPI
03536 IoFreeAdapterChannel(
03537   _In_ PADAPTER_OBJECT AdapterObject);
03538 
03539 //DECLSPEC_DEPRECATED_DDK
03540 NTHALAPI
03541 BOOLEAN
03542 NTAPI
03543 IoFlushAdapterBuffers(
03544   _In_ PADAPTER_OBJECT AdapterObject,
03545   _In_ PMDL Mdl,
03546   _In_ PVOID MapRegisterBase,
03547   _In_ PVOID CurrentVa,
03548   _In_ ULONG Length,
03549   _In_ BOOLEAN WriteToDevice);
03550 
03551 //DECLSPEC_DEPRECATED_DDK
03552 NTHALAPI
03553 VOID
03554 NTAPI
03555 IoFreeMapRegisters(
03556   _In_ PADAPTER_OBJECT AdapterObject,
03557   _In_ PVOID MapRegisterBase,
03558   _In_ ULONG NumberOfMapRegisters);
03559 
03560 //DECLSPEC_DEPRECATED_DDK
03561 NTHALAPI
03562 PVOID
03563 NTAPI
03564 HalAllocateCommonBuffer(
03565   _In_ PADAPTER_OBJECT AdapterObject,
03566   _In_ ULONG Length,
03567   _Out_ PPHYSICAL_ADDRESS LogicalAddress,
03568   _In_ BOOLEAN CacheEnabled);
03569 
03570 //DECLSPEC_DEPRECATED_DDK
03571 NTHALAPI
03572 VOID
03573 NTAPI
03574 HalFreeCommonBuffer(
03575   _In_ PADAPTER_OBJECT AdapterObject,
03576   _In_ ULONG Length,
03577   _In_ PHYSICAL_ADDRESS LogicalAddress,
03578   _In_ PVOID VirtualAddress,
03579   _In_ BOOLEAN CacheEnabled);
03580 
03581 //DECLSPEC_DEPRECATED_DDK
03582 NTHALAPI
03583 ULONG
03584 NTAPI
03585 HalReadDmaCounter(
03586   _In_ PADAPTER_OBJECT AdapterObject);
03587 
03588 NTHALAPI
03589 NTSTATUS
03590 NTAPI
03591 HalAllocateAdapterChannel(
03592   _In_ PADAPTER_OBJECT AdapterObject,
03593   _In_ PWAIT_CONTEXT_BLOCK Wcb,
03594   _In_ ULONG NumberOfMapRegisters,
03595   _In_ PDRIVER_CONTROL ExecutionRoutine);
03596 
03597 #endif /* USE_DMA_MACROS ... */
03598 
03599 #if !defined(NO_LEGACY_DRIVERS)
03600 NTHALAPI
03601 NTSTATUS
03602 NTAPI
03603 HalAssignSlotResources(
03604   _In_ PUNICODE_STRING RegistryPath,
03605   _In_opt_ PUNICODE_STRING DriverClassName,
03606   _In_ PDRIVER_OBJECT DriverObject,
03607   _In_ PDEVICE_OBJECT DeviceObject,
03608   _In_ INTERFACE_TYPE BusType,
03609   _In_ ULONG BusNumber,
03610   _In_ ULONG SlotNumber,
03611   _Inout_ PCM_RESOURCE_LIST *AllocatedResources);
03612 
03613 _IRQL_requires_max_(PASSIVE_LEVEL)
03614 NTHALAPI
03615 ULONG
03616 NTAPI
03617 HalGetInterruptVector(
03618   _In_ INTERFACE_TYPE InterfaceType,
03619   _In_ ULONG BusNumber,
03620   _In_ ULONG BusInterruptLevel,
03621   _In_ ULONG BusInterruptVector,
03622   _Out_ PKIRQL Irql,
03623   _Out_ PKAFFINITY Affinity);
03624 
03625 NTHALAPI
03626 ULONG
03627 NTAPI
03628 HalSetBusData(
03629   _In_ BUS_DATA_TYPE BusDataType,
03630   _In_ ULONG BusNumber,
03631   _In_ ULONG SlotNumber,
03632   _In_reads_bytes_(Length) PVOID Buffer,
03633   _In_ ULONG Length);
03634 
03635 NTHALAPI
03636 ULONG
03637 NTAPI
03638 HalGetBusData(
03639   _In_ BUS_DATA_TYPE BusDataType,
03640   _In_ ULONG BusNumber,
03641   _In_ ULONG SlotNumber,
03642   _Out_writes_bytes_(Length) PVOID Buffer,
03643   _In_ ULONG Length);
03644 
03645 NTHALAPI
03646 BOOLEAN
03647 NTAPI
03648 HalMakeBeep(
03649   _In_ ULONG Frequency);
03650 #endif /* !defined(NO_LEGACY_DRIVERS) */
03651 
03652 _IRQL_requires_max_(PASSIVE_LEVEL)
03653 NTHALAPI
03654 PADAPTER_OBJECT
03655 NTAPI
03656 HalGetAdapter(
03657   _In_ PDEVICE_DESCRIPTION DeviceDescription,
03658   _Out_ PULONG NumberOfMapRegisters);
03659 
03660 VOID
03661 NTAPI
03662 HalPutDmaAdapter(
03663   _In_ PADAPTER_OBJECT DmaAdapter);
03664 
03665 NTHALAPI
03666 VOID
03667 NTAPI
03668 HalAcquireDisplayOwnership(
03669   _In_ PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
03670 
03671 NTHALAPI
03672 ULONG
03673 NTAPI
03674 HalGetBusDataByOffset(
03675   _In_ BUS_DATA_TYPE BusDataType,
03676   _In_ ULONG BusNumber,
03677   _In_ ULONG SlotNumber,
03678   _Out_writes_bytes_(Length) PVOID Buffer,
03679   _In_ ULONG Offset,
03680   _In_ ULONG Length);
03681 
03682 NTHALAPI
03683 ULONG
03684 NTAPI
03685 HalSetBusDataByOffset(
03686   _In_ BUS_DATA_TYPE BusDataType,
03687   _In_ ULONG BusNumber,
03688   _In_ ULONG SlotNumber,
03689   _In_reads_bytes_(Length) PVOID Buffer,
03690   _In_ ULONG Offset,
03691   _In_ ULONG Length);
03692 
03693 NTHALAPI
03694 BOOLEAN
03695 NTAPI
03696 HalTranslateBusAddress(
03697   _In_ INTERFACE_TYPE InterfaceType,
03698   _In_ ULONG BusNumber,
03699   _In_ PHYSICAL_ADDRESS BusAddress,
03700   _Inout_ PULONG AddressSpace,
03701   _Out_ PPHYSICAL_ADDRESS TranslatedAddress);
03702 
03703 NTHALAPI
03704 PVOID
03705 NTAPI
03706 HalAllocateCrashDumpRegisters(
03707   _In_ PADAPTER_OBJECT AdapterObject,
03708   _Inout_ PULONG NumberOfMapRegisters);
03709 
03710 NTSTATUS
03711 NTAPI
03712 HalGetScatterGatherList(
03713   _In_ PADAPTER_OBJECT DmaAdapter,
03714   _In_ PDEVICE_OBJECT DeviceObject,
03715   _In_ PMDL Mdl,
03716   _In_ PVOID CurrentVa,
03717   _In_ ULONG Length,
03718   _In_ PDRIVER_LIST_CONTROL ExecutionRoutine,
03719   _In_ PVOID Context,
03720   _In_ BOOLEAN WriteToDevice);
03721 
03722 VOID
03723 NTAPI
03724 HalPutScatterGatherList(
03725   _In_ PADAPTER_OBJECT DmaAdapter,
03726   _In_ PSCATTER_GATHER_LIST ScatterGather,
03727   _In_ BOOLEAN WriteToDevice);
03728 
03729 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
03730 
03731 #if (NTDDI_VERSION >= NTDDI_WINXP)
03732 _IRQL_requires_max_(PASSIVE_LEVEL)
03733 NTKERNELAPI
03734 VOID
03735 FASTCALL
03736 HalExamineMBR(
03737   _In_ PDEVICE_OBJECT DeviceObject,
03738   _In_ ULONG SectorSize,
03739   _In_ ULONG MBRTypeIdentifier,
03740   _Out_ PVOID *Buffer);
03741 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
03742 
03743 #if (NTDDI_VERSION >= NTDDI_WIN7)
03744 
03745 NTSTATUS
03746 NTAPI
03747 HalAllocateHardwareCounters(
03748   _In_reads_(GroupCount) PGROUP_AFFINITY GroupAffinty,
03749   _In_ ULONG GroupCount,
03750   _In_ PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList,
03751   _Out_ PHANDLE CounterSetHandle);
03752 
03753 NTSTATUS
03754 NTAPI
03755 HalFreeHardwareCounters(
03756   _In_ HANDLE CounterSetHandle);
03757 
03758 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
03759 
03760 #if defined(_IA64_)
03761 #if (NTDDI_VERSION >= NTDDI_WIN2K)
03762 NTHALAPI
03763 ULONG
03764 NTAPI
03765 HalGetDmaAlignmentRequirement(VOID);
03766 #endif
03767 #endif /* defined(_IA64_) */
03768 
03769 #if defined(_M_IX86) || defined(_M_AMD64)
03770 #define HalGetDmaAlignmentRequirement() 1L
03771 #endif
03772 
03773 #if (NTDDI_VERSION >= NTDDI_WIN7)
03774 
03775 typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR;
03776 typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
03777 
03778 NTHALAPI
03779 VOID
03780 NTAPI
03781 HalBugCheckSystem(
03782   _In_ PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource,
03783   _In_ PWHEA_ERROR_RECORD ErrorRecord);
03784 
03785 #else
03786 
03787 typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
03788 
03789 NTHALAPI
03790 VOID
03791 NTAPI
03792 HalBugCheckSystem(
03793   _In_ PWHEA_ERROR_RECORD ErrorRecord);
03794 
03795 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
03796 
03797 /******************************************************************************
03798  *                         I/O Manager Functions                              *
03799  ******************************************************************************/
03800 
03801 /*
03802  * VOID IoAssignArcName(
03803  *   IN PUNICODE_STRING  ArcName,
03804  *   IN PUNICODE_STRING  DeviceName);
03805  */
03806 #define IoAssignArcName(_ArcName, _DeviceName) ( \
03807   IoCreateSymbolicLink((_ArcName), (_DeviceName)))
03808 
03809 /*
03810  * VOID
03811  * IoDeassignArcName(
03812  *   IN PUNICODE_STRING  ArcName)
03813  */
03814 #define IoDeassignArcName IoDeleteSymbolicLink
03815 
03816 FORCEINLINE
03817 VOID
03818 NTAPI
03819 IoInitializeDriverCreateContext(
03820   PIO_DRIVER_CREATE_CONTEXT DriverContext)
03821 {
03822   RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT));
03823   DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT);
03824 }
03825 
03826 #if (NTDDI_VERSION >= NTDDI_WIN2K)
03827 
03828 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
03829 _IRQL_requires_max_(DISPATCH_LEVEL)
03830 _IRQL_requires_min_(DISPATCH_LEVEL)
03831 NTKERNELAPI
03832 NTSTATUS
03833 NTAPI
03834 IoAllocateAdapterChannel(
03835   _In_ PADAPTER_OBJECT AdapterObject,
03836   _In_ PDEVICE_OBJECT DeviceObject,
03837   _In_ ULONG NumberOfMapRegisters,
03838   _In_ PDRIVER_CONTROL ExecutionRoutine,
03839   _In_ PVOID Context);
03840 #endif
03841 
03842 #if !defined(DMA_MACROS_DEFINED)
03843 //DECLSPEC_DEPRECATED_DDK
03844 NTHALAPI
03845 PHYSICAL_ADDRESS
03846 NTAPI
03847 IoMapTransfer(
03848   _In_ PADAPTER_OBJECT AdapterObject,
03849   _In_ PMDL Mdl,
03850   _In_ PVOID MapRegisterBase,
03851   _In_ PVOID CurrentVa,
03852   _Inout_ PULONG Length,
03853   _In_ BOOLEAN WriteToDevice);
03854 #endif
03855 
03856 _IRQL_requires_max_(DISPATCH_LEVEL)
03857 _IRQL_requires_min_(DISPATCH_LEVEL)
03858 NTKERNELAPI
03859 VOID
03860 NTAPI
03861 IoAllocateController(
03862   _In_ PCONTROLLER_OBJECT ControllerObject,
03863   _In_ PDEVICE_OBJECT DeviceObject,
03864   _In_ PDRIVER_CONTROL ExecutionRoutine,
03865   _In_opt_ PVOID Context);
03866 
03867 _IRQL_requires_max_(PASSIVE_LEVEL)
03868 NTKERNELAPI
03869 PCONTROLLER_OBJECT
03870 NTAPI
03871 IoCreateController(
03872   _In_ ULONG Size);
03873 
03874 _IRQL_requires_max_(PASSIVE_LEVEL)
03875 NTKERNELAPI
03876 VOID
03877 NTAPI
03878 IoDeleteController(
03879   _In_ PCONTROLLER_OBJECT ControllerObject);
03880 
03881 _IRQL_requires_max_(DISPATCH_LEVEL)
03882 _IRQL_requires_min_(DISPATCH_LEVEL)
03883 NTKERNELAPI
03884 VOID
03885 NTAPI
03886 IoFreeController(
03887   _In_ PCONTROLLER_OBJECT ControllerObject);
03888 
03889 _IRQL_requires_max_(PASSIVE_LEVEL)
03890 NTKERNELAPI
03891 PCONFIGURATION_INFORMATION
03892 NTAPI
03893 IoGetConfigurationInformation(VOID);
03894 
03895 _IRQL_requires_max_(PASSIVE_LEVEL)
03896 NTKERNELAPI
03897 PDEVICE_OBJECT
03898 NTAPI
03899 IoGetDeviceToVerify(
03900   _In_ PETHREAD Thread);
03901 
03902 NTKERNELAPI
03903 VOID
03904 NTAPI
03905 IoCancelFileOpen(
03906   _In_ PDEVICE_OBJECT DeviceObject,
03907   _In_ PFILE_OBJECT FileObject);
03908 
03909 _IRQL_requires_max_(PASSIVE_LEVEL)
03910 NTKERNELAPI
03911 PGENERIC_MAPPING
03912 NTAPI
03913 IoGetFileObjectGenericMapping(VOID);
03914 
03915 _IRQL_requires_max_(DISPATCH_LEVEL)
03916 NTKERNELAPI
03917 PIRP
03918 NTAPI
03919 IoMakeAssociatedIrp(
03920   _In_ PIRP Irp,
03921   _In_ CCHAR StackSize);
03922 
03923 NTKERNELAPI
03924 NTSTATUS
03925 NTAPI
03926 IoQueryDeviceDescription(
03927   _In_opt_ PINTERFACE_TYPE BusType,
03928   _In_opt_ PULONG BusNumber,
03929   _In_opt_ PCONFIGURATION_TYPE ControllerType,
03930   _In_opt_ PULONG ControllerNumber,
03931   _In_opt_ PCONFIGURATION_TYPE PeripheralType,
03932   _In_opt_ PULONG PeripheralNumber,
03933   _In_ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
03934   _Inout_opt_ PVOID Context);
03935 
03936 _IRQL_requires_max_(APC_LEVEL)
03937 NTKERNELAPI
03938 VOID
03939 NTAPI
03940 IoRaiseHardError(
03941   _In_ PIRP Irp,
03942   _In_opt_ PVPB Vpb,
03943   _In_ PDEVICE_OBJECT RealDeviceObject);
03944 
03945 _IRQL_requires_max_(APC_LEVEL)
03946 NTKERNELAPI
03947 BOOLEAN
03948 NTAPI
03949 IoRaiseInformationalHardError(
03950   _In_ NTSTATUS ErrorStatus,
03951   _In_opt_ PUNICODE_STRING String,
03952   _In_opt_ PKTHREAD Thread);
03953 
03954 _IRQL_requires_max_(PASSIVE_LEVEL)
03955 NTKERNELAPI
03956 VOID
03957 NTAPI
03958 IoRegisterBootDriverReinitialization(
03959   _In_ PDRIVER_OBJECT DriverObject,
03960   _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine,
03961   _In_opt_ PVOID Context);
03962 
03963 _IRQL_requires_max_(PASSIVE_LEVEL)
03964 NTKERNELAPI
03965 VOID
03966 NTAPI
03967 IoRegisterDriverReinitialization(
03968   _In_ PDRIVER_OBJECT DriverObject,
03969   _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine,
03970   _In_opt_ PVOID Context);
03971 
03972 NTKERNELAPI
03973 NTSTATUS
03974 NTAPI
03975 IoAttachDeviceByPointer(
03976   _In_ PDEVICE_OBJECT SourceDevice,
03977   _In_ PDEVICE_OBJECT TargetDevice);
03978 
03979 _IRQL_requires_max_(PASSIVE_LEVEL)
03980 _Must_inspect_result_
03981 NTKERNELAPI
03982 NTSTATUS
03983 NTAPI
03984 IoReportDetectedDevice(
03985   _In_ PDRIVER_OBJECT DriverObject,
03986   _In_ INTERFACE_TYPE LegacyBusType,
03987   _In_ ULONG BusNumber,
03988   _In_ ULONG SlotNumber,
03989   _In_opt_ PCM_RESOURCE_LIST ResourceList,
03990   _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements,
03991   _In_ BOOLEAN ResourceAssigned,
03992   _Inout_ PDEVICE_OBJECT *DeviceObject);
03993 
03994 NTKERNELAPI
03995 NTSTATUS
03996 NTAPI
03997 IoReportResourceForDetection(
03998   _In_ PDRIVER_OBJECT DriverObject,
03999   _In_reads_bytes_opt_(DriverListSize) PCM_RESOURCE_LIST DriverList,
04000   _In_opt_ ULONG DriverListSize,
04001   _In_opt_ PDEVICE_OBJECT DeviceObject,
04002   _In_reads_bytes_opt_(DeviceListSize) PCM_RESOURCE_LIST DeviceList,
04003   _In_opt_ ULONG DeviceListSize,
04004   _Out_ PBOOLEAN ConflictDetected);
04005 
04006 NTKERNELAPI
04007 NTSTATUS
04008 NTAPI
04009 IoReportResourceUsage(
04010   _In_opt_ PUNICODE_STRING DriverClassName,
04011   _In_ PDRIVER_OBJECT DriverObject,
04012   _In_reads_bytes_opt_(DriverListSize) PCM_RESOURCE_LIST DriverList,
04013   _In_opt_ ULONG DriverListSize,
04014   _In_opt_ PDEVICE_OBJECT DeviceObject,
04015   _In_reads_bytes_opt_(DeviceListSize) PCM_RESOURCE_LIST DeviceList,
04016   _In_opt_ ULONG DeviceListSize,
04017   _In_ BOOLEAN OverrideConflict,
04018   _Out_ PBOOLEAN ConflictDetected);
04019 
04020 _IRQL_requires_max_(DISPATCH_LEVEL)
04021 NTKERNELAPI
04022 VOID
04023 NTAPI
04024 IoSetHardErrorOrVerifyDevice(
04025   _In_ PIRP Irp,
04026   _In_ PDEVICE_OBJECT DeviceObject);
04027 
04028 NTKERNELAPI
04029 NTSTATUS
04030 NTAPI
04031 IoAssignResources(
04032   _In_ PUNICODE_STRING RegistryPath,
04033   _In_opt_ PUNICODE_STRING DriverClassName,
04034   _In_ PDRIVER_OBJECT DriverObject,
04035   _In_opt_ PDEVICE_OBJECT DeviceObject,
04036   _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources,
04037   _Inout_ PCM_RESOURCE_LIST *AllocatedResources);
04038 
04039 _IRQL_requires_max_(DISPATCH_LEVEL)
04040 NTKERNELAPI
04041 BOOLEAN
04042 NTAPI
04043 IoSetThreadHardErrorMode(
04044   _In_ BOOLEAN EnableHardErrors);
04045 
04046 
04047 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
04048 
04049 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
04050 
04051 NTKERNELAPI
04052 BOOLEAN
04053 NTAPI
04054 IoIsFileOriginRemote(
04055   _In_ PFILE_OBJECT FileObject);
04056 
04057 NTKERNELAPI
04058 NTSTATUS
04059 NTAPI
04060 IoSetFileOrigin(
04061   _In_ PFILE_OBJECT FileObject,
04062   _In_ BOOLEAN Remote);
04063 
04064 #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
04065 
04066 #if (NTDDI_VERSION >= NTDDI_WINXP)
04067 
04068 _IRQL_requires_max_(PASSIVE_LEVEL)
04069 NTKERNELAPI
04070 NTSTATUS
04071 FASTCALL
04072 IoReadPartitionTable(
04073   _In_ PDEVICE_OBJECT DeviceObject,
04074   _In_ ULONG SectorSize,
04075   _In_ BOOLEAN ReturnRecognizedPartitions,
04076   _Out_ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
04077 
04078 _IRQL_requires_max_(PASSIVE_LEVEL)
04079 NTKERNELAPI
04080 NTSTATUS
04081 FASTCALL
04082 IoSetPartitionInformation(
04083   _In_ PDEVICE_OBJECT DeviceObject,
04084   _In_ ULONG SectorSize,
04085   _In_ ULONG PartitionNumber,
04086   _In_ ULONG PartitionType);
04087 
04088 _IRQL_requires_max_(PASSIVE_LEVEL)
04089 NTKERNELAPI
04090 NTSTATUS
04091 FASTCALL
04092 IoWritePartitionTable(
04093   _In_ PDEVICE_OBJECT DeviceObject,
04094   _In_ ULONG SectorSize,
04095   _In_ ULONG SectorsPerTrack,
04096   _In_ ULONG NumberOfHeads,
04097   _In_ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
04098 
04099 NTKERNELAPI
04100 NTSTATUS
04101 NTAPI
04102 IoCreateDisk(
04103   _In_ PDEVICE_OBJECT DeviceObject,
04104   _In_opt_ struct _CREATE_DISK* Disk);
04105 
04106 NTKERNELAPI
04107 NTSTATUS
04108 NTAPI
04109 IoReadDiskSignature(
04110   _In_ PDEVICE_OBJECT DeviceObject,
04111   _In_ ULONG BytesPerSector,
04112   _Out_ PDISK_SIGNATURE Signature);
04113 
04114 _IRQL_requires_max_(PASSIVE_LEVEL)
04115 NTKERNELAPI
04116 NTSTATUS
04117 NTAPI
04118 IoReadPartitionTableEx(
04119   _In_ PDEVICE_OBJECT DeviceObject,
04120   _Out_ struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
04121 
04122 _IRQL_requires_max_(PASSIVE_LEVEL)
04123 NTKERNELAPI
04124 NTSTATUS
04125 NTAPI
04126 IoSetPartitionInformationEx(
04127   _In_ PDEVICE_OBJECT DeviceObject,
04128   _In_ ULONG PartitionNumber,
04129   _In_ struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
04130 
04131 NTKERNELAPI
04132 NTSTATUS
04133 NTAPI
04134 IoSetSystemPartition(
04135   _In_ PUNICODE_STRING VolumeNameString);
04136 
04137 NTKERNELAPI
04138 NTSTATUS
04139 NTAPI
04140 IoVerifyPartitionTable(
04141   _In_ PDEVICE_OBJECT DeviceObject,
04142   _In_ BOOLEAN FixErrors);
04143 
04144 NTKERNELAPI
04145 NTSTATUS
04146 NTAPI
04147 IoVolumeDeviceToDosName(
04148   _In_ PVOID VolumeDeviceObject,
04149   _Out_ _When_(return==0,
04150     _At_(DosName->Buffer, __drv_allocatesMem(Mem)))
04151     PUNICODE_STRING DosName);
04152 
04153 _IRQL_requires_max_(PASSIVE_LEVEL)
04154 NTKERNELAPI
04155 NTSTATUS
04156 NTAPI
04157 IoWritePartitionTableEx(
04158   _In_ PDEVICE_OBJECT DeviceObject,
04159   _In_reads_(_Inexpressible_(FIELD_OFFSET(DRIVE_LAYOUT_INFORMATION_EX, PartitionEntry[0])))
04160     struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
04161 
04162 NTKERNELAPI
04163 NTSTATUS
04164 NTAPI
04165 IoCreateFileSpecifyDeviceObjectHint(
04166   _Out_ PHANDLE FileHandle,
04167   _In_ ACCESS_MASK DesiredAccess,
04168   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
04169   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
04170   _In_opt_ PLARGE_INTEGER AllocationSize,
04171   _In_ ULONG FileAttributes,
04172   _In_ ULONG ShareAccess,
04173   _In_ ULONG Disposition,
04174   _In_ ULONG CreateOptions,
04175   _In_opt_ PVOID EaBuffer,
04176   _In_ ULONG EaLength,
04177   _In_ CREATE_FILE_TYPE CreateFileType,
04178   _In_opt_ PVOID InternalParameters,
04179   _In_ ULONG Options,
04180   _In_opt_ PVOID DeviceObject);
04181 
04182 NTKERNELAPI
04183 NTSTATUS
04184 NTAPI
04185 IoAttachDeviceToDeviceStackSafe(
04186   _In_ PDEVICE_OBJECT SourceDevice,
04187   _In_ PDEVICE_OBJECT TargetDevice,
04188   _Outptr_ PDEVICE_OBJECT *AttachedToDeviceObject);
04189 
04190 
04191 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
04192 
04193 #if (NTDDI_VERSION >= NTDDI_WS03)
04194 NTKERNELAPI
04195 IO_PAGING_PRIORITY
04196 FASTCALL
04197 IoGetPagingIoPriority(
04198   _In_ PIRP Irp);
04199 
04200 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
04201 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
04202 
04203 BOOLEAN
04204 NTAPI
04205 IoTranslateBusAddress(
04206   _In_ INTERFACE_TYPE InterfaceType,
04207   _In_ ULONG BusNumber,
04208   _In_ PHYSICAL_ADDRESS BusAddress,
04209   _Inout_ PULONG AddressSpace,
04210   _Out_ PPHYSICAL_ADDRESS TranslatedAddress);
04211 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
04212 
04213 #if (NTDDI_VERSION >= NTDDI_VISTA)
04214 
04215 struct _DISK_GEOMETRY_EX;
04216 
04217 NTKERNELAPI
04218 NTSTATUS
04219 NTAPI
04220 IoUpdateDiskGeometry(
04221   _In_ PDEVICE_OBJECT DeviceObject,
04222   _In_ struct _DISK_GEOMETRY_EX* OldDiskGeometry,
04223   _In_ struct _DISK_GEOMETRY_EX* NewDiskGeometry);
04224 
04225 PTXN_PARAMETER_BLOCK
04226 NTAPI
04227 IoGetTransactionParameterBlock(
04228   _In_ PFILE_OBJECT FileObject);
04229 
04230 NTKERNELAPI
04231 NTSTATUS
04232 NTAPI
04233 IoCreateFileEx(
04234   _Out_ PHANDLE FileHandle,
04235   _In_ ACCESS_MASK DesiredAccess,
04236   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
04237   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
04238   _In_opt_ PLARGE_INTEGER AllocationSize,
04239   _In_ ULONG FileAttributes,
04240   _In_ ULONG ShareAccess,
04241   _In_ ULONG Disposition,
04242   _In_ ULONG CreateOptions,
04243   _In_opt_ PVOID EaBuffer,
04244   _In_ ULONG EaLength,
04245   _In_ CREATE_FILE_TYPE CreateFileType,
04246   _In_opt_ PVOID InternalParameters,
04247   _In_ ULONG Options,
04248   _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext);
04249 
04250 NTSTATUS
04251 NTAPI
04252 IoSetIrpExtraCreateParameter(
04253   _Inout_ PIRP Irp,
04254   _In_ struct _ECP_LIST *ExtraCreateParameter);
04255 
04256 VOID
04257 NTAPI
04258 IoClearIrpExtraCreateParameter(
04259   _Inout_ PIRP Irp);
04260 
04261 NTSTATUS
04262 NTAPI
04263 IoGetIrpExtraCreateParameter(
04264   _In_ PIRP Irp,
04265   _Outptr_result_maybenull_ struct _ECP_LIST **ExtraCreateParameter);
04266 
04267 BOOLEAN
04268 NTAPI
04269 IoIsFileObjectIgnoringSharing(
04270   _In_ PFILE_OBJECT FileObject);
04271 
04272 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
04273 
04274 #if (NTDDI_VERSION >= NTDDI_WIN7)
04275 
04276 NTSTATUS
04277 NTAPI
04278 IoSetFileObjectIgnoreSharing(
04279   _In_ PFILE_OBJECT FileObject);
04280 
04281 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
04282 
04283 /******************************************************************************
04284  *                          Kernel Debugger Functions                         *
04285  ******************************************************************************/
04286 NTSYSAPI
04287 ULONG
04288 NTAPI
04289 DbgPrompt(
04290   _In_z_ PCCH Prompt,
04291   _Out_writes_bytes_(MaximumResponseLength) PCH Response,
04292   _In_ ULONG MaximumResponseLength);
04293 
04294 /******************************************************************************
04295  *                              Kernel Functions                              *
04296  ******************************************************************************/
04297 
04298 _IRQL_requires_min_(PASSIVE_LEVEL)
04299 _IRQL_requires_max_(DISPATCH_LEVEL)
04300 NTKERNELAPI
04301 VOID
04302 FASTCALL
04303 KeInvalidateRangeAllCaches(
04304   _In_ PVOID BaseAddress,
04305   _In_ ULONG Length);
04306 
04307 #if (NTDDI_VERSION >= NTDDI_WIN2K)
04308 
04309 NTKERNELAPI
04310 VOID
04311 NTAPI
04312 KeSetImportanceDpc(
04313   _Inout_ PRKDPC Dpc,
04314   _In_ KDPC_IMPORTANCE Importance);
04315 
04316 _IRQL_requires_max_(DISPATCH_LEVEL)
04317 NTKERNELAPI
04318 LONG
04319 NTAPI
04320 KePulseEvent(
04321   _Inout_ PRKEVENT Event,
04322   _In_ KPRIORITY Increment,
04323   _In_ BOOLEAN Wait);
04324 
04325 _IRQL_requires_min_(PASSIVE_LEVEL)
04326 _IRQL_requires_max_(DISPATCH_LEVEL)
04327 NTKERNELAPI
04328 LONG
04329 NTAPI
04330 KeSetBasePriorityThread(
04331   _Inout_ PRKTHREAD Thread,
04332   _In_ LONG Increment);
04333 
04334 _Acquires_lock_(_Global_critical_region_)
04335 _IRQL_requires_max_(APC_LEVEL)
04336 NTKERNELAPI
04337 VOID
04338 NTAPI
04339 KeEnterCriticalRegion(VOID);
04340 
04341 _Releases_lock_(_Global_critical_region_)
04342 _IRQL_requires_max_(APC_LEVEL)
04343 NTKERNELAPI
04344 VOID
04345 NTAPI
04346 KeLeaveCriticalRegion(VOID);
04347 
04348 NTKERNELAPI
04349 DECLSPEC_NORETURN
04350 VOID
04351 NTAPI
04352 KeBugCheck(
04353   _In_ ULONG BugCheckCode);
04354 #if defined(SINGLE_GROUP_LEGACY_API)
04355 
04356 
04357 NTKERNELAPI
04358 VOID
04359 NTAPI
04360 KeSetTargetProcessorDpc(
04361   _Inout_ PRKDPC Dpc,
04362   _In_ CCHAR Number);
04363 
04364 NTKERNELAPI
04365 KAFFINITY
04366 NTAPI
04367 KeQueryActiveProcessors(VOID);
04368 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
04369 
04370 
04371 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
04372 
04373 #if (NTDDI_VERSION >= NTDDI_WINXP)
04374 
04375 _IRQL_requires_min_(PASSIVE_LEVEL)
04376 _IRQL_requires_max_(DISPATCH_LEVEL)
04377 NTKERNELAPI
04378 BOOLEAN
04379 NTAPI
04380 KeAreApcsDisabled(VOID);
04381 
04382 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
04383 
04384 #if (NTDDI_VERSION >= NTDDI_WS03)
04385 
04386 
04387 NTKERNELAPI
04388 BOOLEAN
04389 NTAPI
04390 KeInvalidateAllCaches(VOID);
04391 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
04392 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
04393 
04394 _Must_inspect_result_
04395 _IRQL_requires_max_(APC_LEVEL)
04396 NTKERNELAPI
04397 NTSTATUS
04398 NTAPI
04399 KeExpandKernelStackAndCallout(
04400   _In_ PEXPAND_STACK_CALLOUT Callout,
04401   _In_opt_ PVOID Parameter,
04402   _In_ SIZE_T Size);
04403 
04404 _Acquires_lock_(_Global_critical_region_)
04405 _IRQL_requires_max_(APC_LEVEL)
04406 NTKERNELAPI
04407 VOID
04408 NTAPI
04409 KeEnterGuardedRegion(VOID);
04410 
04411 _Releases_lock_(_Global_critical_region_)
04412 _IRQL_requires_max_(APC_LEVEL)
04413 NTKERNELAPI
04414 VOID
04415 NTAPI
04416 KeLeaveGuardedRegion(VOID);
04417 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
04418 
04419 #if (NTDDI_VERSION >= NTDDI_VISTA)
04420 #if defined(SINGLE_GROUP_LEGACY_API)
04421 
04422 NTKERNELAPI
04423 ULONG
04424 NTAPI
04425 KeQueryActiveProcessorCount(
04426   _Out_opt_ PKAFFINITY ActiveProcessors);
04427 
04428 NTKERNELAPI
04429 ULONG
04430 NTAPI
04431 KeQueryMaximumProcessorCount(VOID);
04432 #endif /* SINGLE_GROUP_LEGACY_API */
04433 
04434 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
04435 
04436 #if (NTDDI_VERSION >= NTDDI_WIN7)
04437 
04438 NTKERNELAPI
04439 ULONG
04440 NTAPI
04441 KeQueryActiveProcessorCountEx(
04442   _In_ USHORT GroupNumber);
04443 
04444 NTKERNELAPI
04445 ULONG
04446 NTAPI
04447 KeQueryMaximumProcessorCountEx(
04448   _In_ USHORT GroupNumber);
04449 
04450 NTKERNELAPI
04451 USHORT
04452 NTAPI
04453 KeQueryActiveGroupCount(VOID);
04454 
04455 NTKERNELAPI
04456 USHORT
04457 NTAPI
04458 KeQueryMaximumGroupCount(VOID);
04459 
04460 NTKERNELAPI
04461 KAFFINITY
04462 NTAPI
04463 KeQueryGroupAffinity(
04464   _In_ USHORT GroupNumber);
04465 
04466 NTKERNELAPI
04467 ULONG
04468 NTAPI
04469 KeGetCurrentProcessorNumberEx(
04470   _Out_opt_ PPROCESSOR_NUMBER ProcNumber);
04471 
04472 NTKERNELAPI
04473 VOID
04474 NTAPI
04475 KeQueryNodeActiveAffinity(
04476   _In_ USHORT NodeNumber,
04477   _Out_opt_ PGROUP_AFFINITY Affinity,
04478   _Out_opt_ PUSHORT Count);
04479 
04480 NTKERNELAPI
04481 USHORT
04482 NTAPI
04483 KeQueryNodeMaximumProcessorCount(
04484   _In_ USHORT NodeNumber);
04485 
04486 NTKERNELAPI
04487 USHORT
04488 NTAPI
04489 KeQueryHighestNodeNumber(VOID);
04490 
04491 NTKERNELAPI
04492 USHORT
04493 NTAPI
04494 KeGetCurrentNodeNumber(VOID);
04495 
04496 _IRQL_requires_max_(DISPATCH_LEVEL)
04497 NTKERNELAPI
04498 NTSTATUS
04499 NTAPI
04500 KeQueryLogicalProcessorRelationship(
04501   _In_opt_ PPROCESSOR_NUMBER ProcessorNumber,
04502   _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
04503   _Out_writes_bytes_opt_(*Length) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information,
04504   _Inout_ PULONG Length);
04505 
04506 _IRQL_requires_max_(APC_LEVEL)
04507 NTKERNELAPI
04508 NTSTATUS
04509 NTAPI
04510 KeSetHardwareCounterConfiguration(
04511   _In_reads_(Count) PHARDWARE_COUNTER CounterArray,
04512   _In_ ULONG Count);
04513 
04514 _IRQL_requires_max_(APC_LEVEL)
04515 NTKERNELAPI
04516 NTSTATUS
04517 NTAPI
04518 KeQueryHardwareCounterConfiguration(
04519   _Out_writes_to_(MaximumCount, *Count) PHARDWARE_COUNTER CounterArray,
04520   _In_ ULONG MaximumCount,
04521   _Out_ PULONG Count);
04522 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
04523 /******************************************************************************
04524  *                       Memory manager Functions                             *
04525  ******************************************************************************/
04526 
04527 #if (NTDDI_VERSION >= NTDDI_WIN2K)
04528 
04529 _IRQL_requires_max_ (PASSIVE_LEVEL)
04530 NTKERNELAPI
04531 PPHYSICAL_MEMORY_RANGE
04532 NTAPI
04533 MmGetPhysicalMemoryRanges(VOID);
04534 
04535 NTKERNELAPI
04536 PHYSICAL_ADDRESS
04537 NTAPI
04538 MmGetPhysicalAddress(
04539   _In_ PVOID BaseAddress);
04540 
04541 NTKERNELAPI
04542 BOOLEAN
04543 NTAPI
04544 MmIsNonPagedSystemAddressValid(
04545   _In_ PVOID VirtualAddress);
04546 
04547 _Must_inspect_result_
04548 _IRQL_requires_max_(APC_LEVEL)
04549 _Out_writes_bytes_opt_(NumberOfBytes)
04550 NTKERNELAPI
04551 PVOID
04552 NTAPI
04553 MmAllocateNonCachedMemory(
04554   _In_ SIZE_T NumberOfBytes);
04555 
04556 _IRQL_requires_max_(APC_LEVEL)
04557 NTKERNELAPI
04558 VOID
04559 NTAPI
04560 MmFreeNonCachedMemory(
04561   _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress,
04562   _In_ SIZE_T NumberOfBytes);
04563 
04564 NTKERNELAPI
04565 PVOID
04566 NTAPI
04567 MmGetVirtualForPhysical(
04568   _In_ PHYSICAL_ADDRESS PhysicalAddress);
04569 
04570 _Must_inspect_result_
04571 _IRQL_requires_max_(APC_LEVEL)
04572 NTKERNELAPI
04573 NTSTATUS
04574 NTAPI
04575 MmMapUserAddressesToPage(
04576   _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress,
04577   _In_ SIZE_T NumberOfBytes,
04578   _In_ PVOID PageAddress);
04579 
04580 _Must_inspect_result_
04581 _IRQL_requires_max_(APC_LEVEL)
04582 _Out_writes_bytes_opt_(NumberOfBytes)
04583 NTKERNELAPI
04584 PVOID
04585 NTAPI
04586 MmMapVideoDisplay(
04587   _In_ PHYSICAL_ADDRESS PhysicalAddress,
04588   _In_ SIZE_T NumberOfBytes,
04589   _In_ MEMORY_CACHING_TYPE CacheType);
04590 
04591 _Must_inspect_result_
04592 _IRQL_requires_max_(APC_LEVEL)
04593 NTKERNELAPI
04594 NTSTATUS
04595 NTAPI
04596 MmMapViewInSessionSpace(
04597   _In_ PVOID Section,
04598   _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase,
04599   _Inout_ PSIZE_T ViewSize);
04600 
04601 _Must_inspect_result_
04602 _IRQL_requires_max_(APC_LEVEL)
04603 NTKERNELAPI
04604 NTSTATUS
04605 NTAPI
04606 MmMapViewInSystemSpace(
04607   _In_ PVOID Section,
04608   _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase,
04609   _Inout_ PSIZE_T ViewSize);
04610 
04611 _IRQL_requires_max_(DISPATCH_LEVEL)
04612 NTKERNELAPI
04613 BOOLEAN
04614 NTAPI
04615 MmIsAddressValid(
04616   _In_ PVOID VirtualAddress);
04617 
04618 NTKERNELAPI
04619 BOOLEAN
04620 NTAPI
04621 MmIsThisAnNtAsSystem(VOID);
04622 
04623 _IRQL_requires_max_(APC_LEVEL)
04624 NTKERNELAPI
04625 VOID
04626 NTAPI
04627 MmLockPagableSectionByHandle(
04628   _In_ PVOID ImageSectionHandle);
04629 
04630 _IRQL_requires_max_(APC_LEVEL)
04631 NTKERNELAPI
04632 NTSTATUS
04633 NTAPI
04634 MmUnmapViewInSessionSpace(
04635   _In_ PVOID MappedBase);
04636 
04637 _IRQL_requires_max_(APC_LEVEL)
04638 NTKERNELAPI
04639 NTSTATUS
04640 NTAPI
04641 MmUnmapViewInSystemSpace(
04642   _In_ PVOID MappedBase);
04643 
04644 _IRQL_requires_max_(APC_LEVEL)
04645 NTKERNELAPI
04646 VOID
04647 NTAPI
04648 MmUnsecureVirtualMemory(
04649   _In_ HANDLE SecureHandle);
04650 
04651 _IRQL_requires_max_ (PASSIVE_LEVEL)
04652 NTKERNELAPI
04653 NTSTATUS
04654 NTAPI
04655 MmRemovePhysicalMemory(
04656   _In_ PPHYSICAL_ADDRESS StartAddress,
04657   _Inout_ PLARGE_INTEGER NumberOfBytes);
04658 
04659 _Must_inspect_result_
04660 _IRQL_requires_max_(APC_LEVEL)
04661 NTKERNELAPI
04662 HANDLE
04663 NTAPI
04664 MmSecureVirtualMemory(
04665   __in_data_source(USER_MODE) _In_reads_bytes_ (Size) PVOID Address,
04666   _In_ __in_data_source(USER_MODE) SIZE_T Size,
04667   _In_ ULONG ProbeMode);
04668 
04669 _IRQL_requires_max_(APC_LEVEL)
04670 NTKERNELAPI
04671 VOID
04672 NTAPI
04673 MmUnmapVideoDisplay(
04674   _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress,
04675   _In_ SIZE_T NumberOfBytes);
04676 
04677 _IRQL_requires_max_ (PASSIVE_LEVEL)
04678 NTKERNELAPI
04679 NTSTATUS
04680 NTAPI
04681 MmAddPhysicalMemory(
04682   _In_ PPHYSICAL_ADDRESS StartAddress,
04683   _Inout_ PLARGE_INTEGER NumberOfBytes);
04684 
04685 _Must_inspect_result_
04686 _IRQL_requires_max_(DISPATCH_LEVEL)
04687 _When_(return != NULL, _Post_writable_byte_size_(NumberOfBytes))
04688 NTKERNELAPI
04689 PVOID
04690 NTAPI
04691 MmAllocateContiguousMemory(
04692   _In_ SIZE_T NumberOfBytes,
04693   _In_ PHYSICAL_ADDRESS HighestAcceptableAddress);
04694 
04695 _Must_inspect_result_
04696 _IRQL_requires_max_(DISPATCH_LEVEL)
04697 _When_(return != NULL, _Post_writable_byte_size_(NumberOfBytes))
04698 NTKERNELAPI
04699 PVOID
04700 NTAPI
04701 MmAllocateContiguousMemorySpecifyCache(
04702   _In_ SIZE_T NumberOfBytes,
04703   _In_ PHYSICAL_ADDRESS LowestAcceptableAddress,
04704   _In_ PHYSICAL_ADDRESS HighestAcceptableAddress,
04705   _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple,
04706   _In_ MEMORY_CACHING_TYPE CacheType);
04707 
04708 _Must_inspect_result_
04709 _IRQL_requires_max_(DISPATCH_LEVEL)
04710 _When_(return != NULL, _Post_writable_byte_size_(NumberOfBytes))
04711 NTKERNELAPI
04712 PVOID
04713 NTAPI
04714 MmAllocateContiguousMemorySpecifyCacheNode(
04715   _In_ SIZE_T NumberOfBytes,
04716   _In_ PHYSICAL_ADDRESS LowestAcceptableAddress,
04717   _In_ PHYSICAL_ADDRESS HighestAcceptableAddress,
04718   _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple,
04719   _In_ MEMORY_CACHING_TYPE CacheType,
04720   _In_ NODE_REQUIREMENT PreferredNode);
04721 
04722 _IRQL_requires_max_(DISPATCH_LEVEL)
04723 NTKERNELAPI
04724 VOID
04725 NTAPI
04726 MmFreeContiguousMemory(
04727   _In_ PVOID BaseAddress);
04728 
04729 _IRQL_requires_max_(DISPATCH_LEVEL)
04730 NTKERNELAPI
04731 VOID
04732 NTAPI
04733 MmFreeContiguousMemorySpecifyCache(
04734   _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress,
04735   _In_ SIZE_T NumberOfBytes,
04736   _In_ MEMORY_CACHING_TYPE CacheType);
04737 
04738 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
04739 
04740 
04741 
04742 #if (NTDDI_VERSION >= NTDDI_WS03)
04743 
04744 _Must_inspect_result_
04745 _IRQL_requires_max_(PASSIVE_LEVEL)
04746 NTKERNELAPI
04747 NTSTATUS
04748 NTAPI
04749 MmCreateMirror(VOID);
04750 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
04751 
04752 #if (NTDDI_VERSION >= NTDDI_VISTA)
04753 _Must_inspect_result_
04754 _IRQL_requires_max_(APC_LEVEL)
04755 NTSTATUS
04756 NTAPI
04757 MmRotatePhysicalView(
04758   _In_ PVOID VirtualAddress,
04759   _Inout_ PSIZE_T NumberOfBytes,
04760   _In_opt_ PMDLX NewMdl,
04761   _In_ MM_ROTATE_DIRECTION Direction,
04762   _In_ PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction,
04763   _In_opt_ PVOID Context);
04764 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
04765 
04766 /******************************************************************************
04767  *                          Process Manager Functions                         *
04768  ******************************************************************************/
04769 
04770 __kernel_entry
04771 NTSYSCALLAPI
04772 NTSTATUS
04773 NTAPI
04774 NtOpenProcess(
04775   _Out_ PHANDLE ProcessHandle,
04776   _In_ ACCESS_MASK DesiredAccess,
04777   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
04778   _In_opt_ PCLIENT_ID ClientId);
04779 
04780 NTSYSCALLAPI
04781 NTSTATUS
04782 NTAPI
04783 NtQueryInformationProcess(
04784   IN HANDLE ProcessHandle,
04785   IN PROCESSINFOCLASS ProcessInformationClass,
04786   OUT PVOID ProcessInformation OPTIONAL,
04787   IN ULONG ProcessInformationLength,
04788   OUT PULONG ReturnLength OPTIONAL);
04789 
04790 #if (NTDDI_VERSION >= NTDDI_WIN2K)
04791 
04792 
04793 _IRQL_requires_max_(PASSIVE_LEVEL)
04794 NTKERNELAPI
04795 NTSTATUS
04796 NTAPI
04797 PsSetCreateProcessNotifyRoutine(
04798   _In_ PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
04799   _In_ BOOLEAN Remove);
04800 
04801 _IRQL_requires_max_(PASSIVE_LEVEL)
04802 NTKERNELAPI
04803 NTSTATUS
04804 NTAPI
04805 PsSetCreateThreadNotifyRoutine(
04806   _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
04807 
04808 _IRQL_requires_max_(PASSIVE_LEVEL)
04809 NTKERNELAPI
04810 NTSTATUS
04811 NTAPI
04812 PsSetLoadImageNotifyRoutine(
04813   _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
04814 
04815 NTKERNELAPI
04816 HANDLE
04817 NTAPI
04818 PsGetCurrentProcessId(VOID);
04819 
04820 _IRQL_requires_max_(DISPATCH_LEVEL)
04821 NTKERNELAPI
04822 HANDLE
04823 NTAPI
04824 PsGetCurrentThreadId(VOID);
04825 
04826 NTKERNELAPI
04827 BOOLEAN
04828 NTAPI
04829 PsGetVersion(
04830   OUT PULONG MajorVersion OPTIONAL,
04831   OUT PULONG MinorVersion OPTIONAL,
04832   OUT PULONG BuildNumber OPTIONAL,
04833   OUT PUNICODE_STRING CSDVersion OPTIONAL);
04834 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
04835 #if (NTDDI_VERSION >= NTDDI_WINXP)
04836 
04837 _IRQL_requires_max_(DISPATCH_LEVEL)
04838 NTKERNELAPI
04839 HANDLE
04840 NTAPI
04841 PsGetProcessId(
04842   _In_ PEPROCESS Process);
04843 
04844 _IRQL_requires_max_(DISPATCH_LEVEL)
04845 NTKERNELAPI
04846 HANDLE
04847 NTAPI
04848 PsGetThreadId(
04849   _In_ PETHREAD Thread);
04850 
04851 NTKERNELAPI
04852 NTSTATUS
04853 NTAPI
04854 PsRemoveCreateThreadNotifyRoutine(
04855   _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
04856 
04857 _IRQL_requires_max_(PASSIVE_LEVEL)
04858 NTKERNELAPI
04859 NTSTATUS
04860 NTAPI
04861 PsRemoveLoadImageNotifyRoutine(
04862   _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
04863 
04864 _IRQL_requires_max_(DISPATCH_LEVEL)
04865 NTKERNELAPI
04866 LONGLONG
04867 NTAPI
04868 PsGetProcessCreateTimeQuadPart(
04869   _In_ PEPROCESS Process);
04870 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
04871 
04872 #if (NTDDI_VERSION >= NTDDI_WS03)
04873 NTKERNELAPI
04874 HANDLE
04875 NTAPI
04876 PsGetThreadProcessId(
04877   IN PETHREAD Thread);
04878 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
04879 
04880 #if (NTDDI_VERSION >= NTDDI_VISTA)
04881 
04882 NTKERNELAPI
04883 BOOLEAN
04884 NTAPI
04885 PsSetCurrentThreadPrefetching(
04886   IN BOOLEAN Prefetching);
04887 
04888 NTKERNELAPI
04889 BOOLEAN
04890 NTAPI
04891 PsIsCurrentThreadPrefetching(VOID);
04892 
04893 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
04894 
04895 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
04896 NTKERNELAPI
04897 NTSTATUS
04898 NTAPI
04899 PsSetCreateProcessNotifyRoutineEx(
04900   IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
04901   IN BOOLEAN Remove);
04902 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
04903 /******************************************************************************
04904  *                         Runtime Library Functions                          *
04905  ******************************************************************************/
04906 
04907 
04908 #if (NTDDI_VERSION >= NTDDI_WIN2K)
04909 
04910 
04911 #ifndef RTL_USE_AVL_TABLES
04912 
04913 NTSYSAPI
04914 VOID
04915 NTAPI
04916 RtlInitializeGenericTable(
04917   _Out_ PRTL_GENERIC_TABLE Table,
04918   _In_ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
04919   _In_ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
04920   _In_ PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
04921   _In_opt_ PVOID TableContext);
04922 
04923 NTSYSAPI
04924 PVOID
04925 NTAPI
04926 RtlInsertElementGenericTable(
04927   _In_ PRTL_GENERIC_TABLE Table,
04928   _In_reads_bytes_(BufferSize) PVOID Buffer,
04929   _In_ CLONG BufferSize,
04930   _Out_opt_ PBOOLEAN NewElement);
04931 
04932 NTSYSAPI
04933 PVOID
04934 NTAPI
04935 RtlInsertElementGenericTableFull(
04936   _In_ PRTL_GENERIC_TABLE Table,
04937   _In_reads_bytes_(BufferSize) PVOID Buffer,
04938   _In_ CLONG BufferSize,
04939   _Out_opt_ PBOOLEAN NewElement,
04940   _In_ PVOID NodeOrParent,
04941   _In_ TABLE_SEARCH_RESULT SearchResult);
04942 
04943 NTSYSAPI
04944 BOOLEAN
04945 NTAPI
04946 RtlDeleteElementGenericTable(
04947   _In_ PRTL_GENERIC_TABLE Table,
04948   _In_ PVOID Buffer);
04949 
04950 _Must_inspect_result_
04951 NTSYSAPI
04952 PVOID
04953 NTAPI
04954 RtlLookupElementGenericTable(
04955   _In_ PRTL_GENERIC_TABLE Table,
04956   _In_ PVOID Buffer);
04957 
04958 NTSYSAPI
04959 PVOID
04960 NTAPI
04961 RtlLookupElementGenericTableFull(
04962   _In_ PRTL_GENERIC_TABLE Table,
04963   _In_ PVOID Buffer,
04964   _Out_ PVOID *NodeOrParent,
04965   _Out_ TABLE_SEARCH_RESULT *SearchResult);
04966 
04967 _Must_inspect_result_
04968 NTSYSAPI
04969 PVOID
04970 NTAPI
04971 RtlEnumerateGenericTable(
04972   _In_ PRTL_GENERIC_TABLE Table,
04973   _In_ BOOLEAN Restart);
04974 
04975 _Must_inspect_result_
04976 NTSYSAPI
04977 PVOID
04978 NTAPI
04979 RtlEnumerateGenericTableWithoutSplaying(
04980   _In_ PRTL_GENERIC_TABLE Table,
04981   _Inout_ PVOID *RestartKey);
04982 
04983 _Must_inspect_result_
04984 NTSYSAPI
04985 PVOID
04986 NTAPI
04987 RtlGetElementGenericTable(
04988   _In_ PRTL_GENERIC_TABLE Table,
04989   _In_ ULONG I);
04990 
04991 NTSYSAPI
04992 ULONG
04993 NTAPI
04994 RtlNumberGenericTableElements(
04995   _In_ PRTL_GENERIC_TABLE Table);
04996 
04997 _Must_inspect_result_
04998 NTSYSAPI
04999 BOOLEAN
05000 NTAPI
05001 RtlIsGenericTableEmpty(
05002   _In_ PRTL_GENERIC_TABLE Table);
05003 
05004 #endif /* !RTL_USE_AVL_TABLES */
05005 
05006 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT     8
05007 
05008 NTSYSAPI
05009 PRTL_SPLAY_LINKS
05010 NTAPI
05011 RtlSplay(
05012   _Inout_ PRTL_SPLAY_LINKS Links);
05013 
05014 NTSYSAPI
05015 PRTL_SPLAY_LINKS
05016 NTAPI
05017 RtlDelete(
05018   _In_ PRTL_SPLAY_LINKS Links);
05019 
05020 NTSYSAPI
05021 VOID
05022 NTAPI
05023 RtlDeleteNoSplay(
05024   _In_ PRTL_SPLAY_LINKS Links,
05025   _Inout_ PRTL_SPLAY_LINKS *Root);
05026 
05027 _Must_inspect_result_
05028 NTSYSAPI
05029 PRTL_SPLAY_LINKS
05030 NTAPI
05031 RtlSubtreeSuccessor(
05032   _In_ PRTL_SPLAY_LINKS Links);
05033 
05034 _Must_inspect_result_
05035 NTSYSAPI
05036 PRTL_SPLAY_LINKS
05037 NTAPI
05038 RtlSubtreePredecessor(
05039   _In_ PRTL_SPLAY_LINKS Links);
05040 
05041 _Must_inspect_result_
05042 NTSYSAPI
05043 PRTL_SPLAY_LINKS
05044 NTAPI
05045 RtlRealSuccessor(
05046   _In_ PRTL_SPLAY_LINKS Links);
05047 
05048 _Must_inspect_result_
05049 NTSYSAPI
05050 PRTL_SPLAY_LINKS
05051 NTAPI
05052 RtlRealPredecessor(
05053   _In_ PRTL_SPLAY_LINKS Links);
05054 
05055 _IRQL_requires_max_(PASSIVE_LEVEL)
05056 _Must_inspect_result_
05057 NTSYSAPI
05058 BOOLEAN
05059 NTAPI
05060 RtlPrefixUnicodeString(
05061   _In_ PCUNICODE_STRING String1,
05062   _In_ PCUNICODE_STRING String2,
05063   _In_ BOOLEAN CaseInSensitive);
05064 
05065 _IRQL_requires_max_(PASSIVE_LEVEL)
05066 NTSYSAPI
05067 VOID
05068 NTAPI
05069 RtlUpperString(
05070   _Inout_ PSTRING DestinationString,
05071   _In_ const PSTRING SourceString);
05072 
05073 _IRQL_requires_max_(PASSIVE_LEVEL)
05074 _When_(AllocateDestinationString, _Must_inspect_result_)
05075 NTSYSAPI
05076 NTSTATUS
05077 NTAPI
05078 RtlUpcaseUnicodeString(
05079   _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
05080   _When_(!AllocateDestinationString, _Inout_)
05081     PUNICODE_STRING DestinationString,
05082   _In_ PCUNICODE_STRING SourceString,
05083   _In_ BOOLEAN AllocateDestinationString);
05084 
05085 _IRQL_requires_max_(APC_LEVEL)
05086 NTSYSAPI
05087 VOID
05088 NTAPI
05089 RtlMapGenericMask(
05090   _Inout_ PACCESS_MASK AccessMask,
05091   _In_ PGENERIC_MAPPING GenericMapping);
05092 
05093 _IRQL_requires_max_(PASSIVE_LEVEL)
05094 NTSYSAPI
05095 NTSTATUS
05096 NTAPI
05097 RtlVolumeDeviceToDosName(
05098   _In_ PVOID VolumeDeviceObject,
05099   _Out_ PUNICODE_STRING DosName);
05100 
05101 NTSYSAPI
05102 NTSTATUS
05103 NTAPI
05104 RtlGetVersion(
05105   IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
05106 
05107 NTSYSAPI
05108 NTSTATUS
05109 NTAPI
05110 RtlVerifyVersionInfo(
05111   IN PRTL_OSVERSIONINFOEXW VersionInfo,
05112   IN ULONG TypeMask,
05113   IN ULONGLONG ConditionMask);
05114 
05115 _IRQL_requires_max_(PASSIVE_LEVEL)
05116 _Must_inspect_result_
05117 NTSYSAPI
05118 LONG
05119 NTAPI
05120 RtlCompareString(
05121   _In_ const PSTRING String1,
05122   _In_ const PSTRING String2,
05123   _In_ BOOLEAN CaseInSensitive);
05124 
05125 NTSYSAPI
05126 VOID
05127 NTAPI
05128 RtlCopyString(
05129   _Out_ PSTRING DestinationString,
05130   _In_opt_ const PSTRING SourceString);
05131 
05132 _IRQL_requires_max_(PASSIVE_LEVEL)
05133 _Must_inspect_result_
05134 NTSYSAPI
05135 BOOLEAN
05136 NTAPI
05137 RtlEqualString(
05138   _In_ const PSTRING String1,
05139   _In_ const PSTRING String2,
05140   _In_ BOOLEAN CaseInSensitive);
05141 
05142 _IRQL_requires_max_(PASSIVE_LEVEL)
05143 NTSYSAPI
05144 NTSTATUS
05145 NTAPI
05146 RtlCharToInteger(
05147   _In_z_ PCSZ String,
05148   _In_opt_ ULONG Base,
05149   _Out_ PULONG Value);
05150 
05151 _IRQL_requires_max_(PASSIVE_LEVEL)
05152 NTSYSAPI
05153 CHAR
05154 NTAPI
05155 RtlUpperChar(
05156   _In_ CHAR Character);
05157 
05158 NTSYSAPI
05159 ULONG
05160 NTAPI
05161 RtlWalkFrameChain(
05162   _Out_writes_(Count - (Flags >> RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT))
05163     PVOID *Callers,
05164   _In_ ULONG Count,
05165   _In_ ULONG Flags);
05166 
05167 
05168 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
05169 
05170 
05171 #if (NTDDI_VERSION >= NTDDI_WINXP)
05172 
05173 
05174 
05175 NTSYSAPI
05176 VOID
05177 NTAPI
05178 RtlInitializeGenericTableAvl(
05179   _Out_ PRTL_AVL_TABLE Table,
05180   _In_ PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
05181   _In_opt_ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
05182   _In_opt_ PRTL_AVL_FREE_ROUTINE FreeRoutine,
05183   _In_opt_ PVOID TableContext);
05184 
05185 NTSYSAPI
05186 PVOID
05187 NTAPI
05188 RtlInsertElementGenericTableAvl(
05189   _In_ PRTL_AVL_TABLE Table,
05190   _In_reads_bytes_(BufferSize) PVOID Buffer,
05191   _In_ CLONG BufferSize,
05192   _Out_opt_ PBOOLEAN NewElement);
05193 
05194 NTSYSAPI
05195 PVOID
05196 NTAPI
05197 RtlInsertElementGenericTableFullAvl(
05198   _In_ PRTL_AVL_TABLE Table,
05199   _In_reads_bytes_(BufferSize) PVOID Buffer,
05200   _In_ CLONG BufferSize,
05201   _Out_opt_ PBOOLEAN NewElement,
05202   _In_ PVOID NodeOrParent,
05203   _In_ TABLE_SEARCH_RESULT SearchResult);
05204 
05205 NTSYSAPI
05206 BOOLEAN
05207 NTAPI
05208 RtlDeleteElementGenericTableAvl(
05209   _In_ PRTL_AVL_TABLE Table,
05210   _In_ PVOID Buffer);
05211 
05212 _Must_inspect_result_
05213 NTSYSAPI
05214 PVOID
05215 NTAPI
05216 RtlLookupElementGenericTableAvl(
05217   _In_ PRTL_AVL_TABLE Table,
05218   _In_ PVOID Buffer);
05219 
05220 NTSYSAPI
05221 PVOID
05222 NTAPI
05223 RtlLookupElementGenericTableFullAvl(
05224   _In_ PRTL_AVL_TABLE Table,
05225   _In_ PVOID Buffer,
05226   _Out_ PVOID *NodeOrParent,
05227   _Out_ TABLE_SEARCH_RESULT *SearchResult);
05228 
05229 _Must_inspect_result_
05230 NTSYSAPI
05231 PVOID
05232 NTAPI
05233 RtlEnumerateGenericTableAvl(
05234   _In_ PRTL_AVL_TABLE Table,
05235   _In_ BOOLEAN Restart);
05236 
05237 _Must_inspect_result_
05238 NTSYSAPI
05239 PVOID
05240 NTAPI
05241 RtlEnumerateGenericTableWithoutSplayingAvl(
05242   _In_ PRTL_AVL_TABLE Table,
05243   _Inout_ PVOID *RestartKey);
05244 
05245 _Must_inspect_result_
05246 NTSYSAPI
05247 PVOID
05248 NTAPI
05249 RtlLookupFirstMatchingElementGenericTableAvl(
05250   _In_ PRTL_AVL_TABLE Table,
05251   _In_ PVOID Buffer,
05252   _Out_ PVOID *RestartKey);
05253 
05254 _Must_inspect_result_
05255 NTSYSAPI
05256 PVOID
05257 NTAPI
05258 RtlEnumerateGenericTableLikeADirectory(
05259   _In_ PRTL_AVL_TABLE Table,
05260   _In_opt_ PRTL_AVL_MATCH_FUNCTION MatchFunction,
05261   _In_opt_ PVOID MatchData,
05262   _In_ ULONG NextFlag,
05263   _Inout_ PVOID *RestartKey,
05264   _Inout_ PULONG DeleteCount,
05265   _In_ PVOID Buffer);
05266 
05267 _Must_inspect_result_
05268 NTSYSAPI
05269 PVOID
05270 NTAPI
05271 RtlGetElementGenericTableAvl(
05272   _In_ PRTL_AVL_TABLE Table,
05273   _In_ ULONG I);
05274 
05275 NTSYSAPI
05276 ULONG
05277 NTAPI
05278 RtlNumberGenericTableElementsAvl(
05279   _In_ PRTL_AVL_TABLE Table);
05280 
05281 _Must_inspect_result_
05282 NTSYSAPI
05283 BOOLEAN
05284 NTAPI
05285 RtlIsGenericTableEmptyAvl(
05286   _In_ PRTL_AVL_TABLE Table);
05287 
05288 
05289 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
05290 
05291 
05292 #if (NTDDI_VERSION >= NTDDI_VISTA)
05293 
05294 
05295 _IRQL_requires_max_(APC_LEVEL)
05296 NTSYSAPI
05297 VOID
05298 NTAPI
05299 RtlRunOnceInitialize(
05300   _Out_ PRTL_RUN_ONCE RunOnce);
05301 
05302 _IRQL_requires_max_(APC_LEVEL)
05303 _Maybe_raises_SEH_exception_
05304 NTSYSAPI
05305 NTSTATUS
05306 NTAPI
05307 RtlRunOnceExecuteOnce(
05308   _Inout_ PRTL_RUN_ONCE RunOnce,
05309   _In_ __inner_callback PRTL_RUN_ONCE_INIT_FN InitFn,
05310   _Inout_opt_ PVOID Parameter,
05311   _Outptr_opt_result_maybenull_ PVOID *Context);
05312 
05313 _IRQL_requires_max_(APC_LEVEL)
05314 _Must_inspect_result_
05315 NTSYSAPI
05316 NTSTATUS
05317 NTAPI
05318 RtlRunOnceBeginInitialize(
05319   _Inout_ PRTL_RUN_ONCE RunOnce,
05320   _In_ ULONG Flags,
05321   _Outptr_opt_result_maybenull_ PVOID *Context);
05322 
05323 _IRQL_requires_max_(APC_LEVEL)
05324 NTSYSAPI
05325 NTSTATUS
05326 NTAPI
05327 RtlRunOnceComplete(
05328   _Inout_ PRTL_RUN_ONCE RunOnce,
05329   _In_ ULONG Flags,
05330   _In_opt_ PVOID Context);
05331 
05332 NTSYSAPI
05333 BOOLEAN
05334 NTAPI
05335 RtlGetProductInfo(
05336   _In_ ULONG OSMajorVersion,
05337   _In_ ULONG OSMinorVersion,
05338   _In_ ULONG SpMajorVersion,
05339   _In_ ULONG SpMinorVersion,
05340   _Out_ PULONG ReturnedProductType);
05341 
05342 
05343 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
05344 
05345 #if (NTDDI_VERSION >= NTDDI_WIN7)
05346 
05347 
05348 _Must_inspect_result_
05349 NTSYSAPI
05350 BOOLEAN
05351 NTAPI
05352 RtlCreateHashTable(
05353   _Inout_ _When_(NULL == *HashTable, __drv_allocatesMem(Mem))
05354     PRTL_DYNAMIC_HASH_TABLE *HashTable,
05355   _In_ ULONG Shift,
05356   _In_ _Reserved_ ULONG Flags);
05357 
05358 NTSYSAPI
05359 VOID
05360 NTAPI
05361 RtlDeleteHashTable(
05362   _In_ _When_((HashTable->Flags & RTL_HASH_ALLOCATED_HEADER), __drv_freesMem(Mem) _Post_invalid_)
05363     PRTL_DYNAMIC_HASH_TABLE HashTable);
05364 
05365 NTSYSAPI
05366 BOOLEAN
05367 NTAPI
05368 RtlInsertEntryHashTable(
05369   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable,
05370   _In_ __drv_aliasesMem PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry,
05371   _In_ ULONG_PTR Signature,
05372   _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context);
05373 
05374 NTSYSAPI
05375 BOOLEAN
05376 NTAPI
05377 RtlRemoveEntryHashTable(
05378   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable,
05379   _In_ PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry,
05380   _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context);
05381 
05382 _Must_inspect_result_
05383 NTSYSAPI
05384 PRTL_DYNAMIC_HASH_TABLE_ENTRY
05385 NTAPI
05386 RtlLookupEntryHashTable(
05387   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable,
05388   _In_ ULONG_PTR Signature,
05389   _Out_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context);
05390 
05391 _Must_inspect_result_
05392 NTSYSAPI
05393 PRTL_DYNAMIC_HASH_TABLE_ENTRY
05394 NTAPI
05395 RtlGetNextEntryHashTable(
05396   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable,
05397   _In_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context);
05398 
05399 NTSYSAPI
05400 BOOLEAN
05401 NTAPI
05402 RtlInitEnumerationHashTable(
05403   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable,
05404   _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
05405 
05406 _Must_inspect_result_
05407 NTSYSAPI
05408 PRTL_DYNAMIC_HASH_TABLE_ENTRY
05409 NTAPI
05410 RtlEnumerateEntryHashTable(
05411   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable,
05412   _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
05413 
05414 NTSYSAPI
05415 VOID
05416 NTAPI
05417 RtlEndEnumerationHashTable(
05418   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable,
05419   _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
05420 
05421 NTSYSAPI
05422 BOOLEAN
05423 NTAPI
05424 RtlInitWeakEnumerationHashTable(
05425   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable,
05426   _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
05427 
05428 _Must_inspect_result_
05429 NTSYSAPI
05430 PRTL_DYNAMIC_HASH_TABLE_ENTRY
05431 NTAPI
05432 RtlWeaklyEnumerateEntryHashTable(
05433   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable,
05434   _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
05435 
05436 NTSYSAPI
05437 VOID
05438 NTAPI
05439 RtlEndWeakEnumerationHashTable(
05440   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable,
05441   _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
05442 
05443 NTSYSAPI
05444 BOOLEAN
05445 NTAPI
05446 RtlExpandHashTable(
05447   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable);
05448 
05449 NTSYSAPI
05450 BOOLEAN
05451 NTAPI
05452 RtlContractHashTable(
05453   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable);
05454 
05455 
05456 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
05457 
05458 
05459 #if defined(_AMD64_) || defined(_IA64_)
05460 
05461 
05462 
05463 //DECLSPEC_DEPRECATED_DDK_WINXP
05464 FORCEINLINE
05465 LARGE_INTEGER
05466 NTAPI_INLINE
05467 RtlLargeIntegerDivide(
05468   _In_ LARGE_INTEGER Dividend,
05469   _In_ LARGE_INTEGER Divisor,
05470   _Out_opt_ PLARGE_INTEGER Remainder)
05471 {
05472   LARGE_INTEGER ret;
05473   ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
05474   if (Remainder)
05475     Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
05476   return ret;
05477 }
05478 
05479 #else
05480 
05481 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05482 NTSYSAPI
05483 LARGE_INTEGER
05484 NTAPI
05485 RtlLargeIntegerDivide(
05486   _In_ LARGE_INTEGER Dividend,
05487   _In_ LARGE_INTEGER Divisor,
05488   _Out_opt_ PLARGE_INTEGER Remainder);
05489 #endif
05490 
05491 
05492 #endif /* defined(_AMD64_) || defined(_IA64_) */
05493 
05494 
05495 
05496 #ifdef RTL_USE_AVL_TABLES
05497 
05498 #define RtlInitializeGenericTable               RtlInitializeGenericTableAvl
05499 #define RtlInsertElementGenericTable            RtlInsertElementGenericTableAvl
05500 #define RtlInsertElementGenericTableFull        RtlInsertElementGenericTableFullAvl
05501 #define RtlDeleteElementGenericTable            RtlDeleteElementGenericTableAvl
05502 #define RtlLookupElementGenericTable            RtlLookupElementGenericTableAvl
05503 #define RtlLookupElementGenericTableFull        RtlLookupElementGenericTableFullAvl
05504 #define RtlEnumerateGenericTable                RtlEnumerateGenericTableAvl
05505 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
05506 #define RtlGetElementGenericTable               RtlGetElementGenericTableAvl
05507 #define RtlNumberGenericTableElements           RtlNumberGenericTableElementsAvl
05508 #define RtlIsGenericTableEmpty                  RtlIsGenericTableEmptyAvl
05509 
05510 #endif /* RTL_USE_AVL_TABLES */
05511 
05512 #define RtlInitializeSplayLinks(Links) {    \
05513   PRTL_SPLAY_LINKS _SplayLinks;            \
05514   _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
05515   _SplayLinks->Parent = _SplayLinks;   \
05516   _SplayLinks->LeftChild = NULL;       \
05517   _SplayLinks->RightChild = NULL;      \
05518 }
05519 
05520 #define RtlIsLeftChild(Links) \
05521     (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
05522 
05523 #define RtlIsRightChild(Links) \
05524     (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
05525 
05526 #define RtlRightChild(Links) \
05527     ((PRTL_SPLAY_LINKS)(Links))->RightChild
05528 
05529 #define RtlIsRoot(Links) \
05530     (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
05531 
05532 #define RtlLeftChild(Links) \
05533     ((PRTL_SPLAY_LINKS)(Links))->LeftChild
05534 
05535 #define RtlParent(Links) \
05536     ((PRTL_SPLAY_LINKS)(Links))->Parent
05537 
05538 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks)    \
05539     {                                                   \
05540         PRTL_SPLAY_LINKS _SplayParent;                  \
05541         PRTL_SPLAY_LINKS _SplayChild;                   \
05542         _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
05543         _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
05544         _SplayParent->LeftChild = _SplayChild;          \
05545         _SplayChild->Parent = _SplayParent;             \
05546     }
05547 
05548 #define RtlInsertAsRightChild(ParentLinks,ChildLinks)   \
05549     {                                                   \
05550         PRTL_SPLAY_LINKS _SplayParent;                  \
05551         PRTL_SPLAY_LINKS _SplayChild;                   \
05552         _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
05553         _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
05554         _SplayParent->RightChild = _SplayChild;         \
05555         _SplayChild->Parent = _SplayParent;             \
05556     }
05557 
05558 #if !defined(MIDL_PASS)
05559 
05560 FORCEINLINE
05561 LUID
05562 NTAPI_INLINE
05563 RtlConvertLongToLuid(
05564   _In_ LONG Val)
05565 {
05566   LUID Luid;
05567   LARGE_INTEGER Temp;
05568 
05569   Temp.QuadPart = Val;
05570   Luid.LowPart = Temp.u.LowPart;
05571   Luid.HighPart = Temp.u.HighPart;
05572   return Luid;
05573 }
05574 
05575 FORCEINLINE
05576 LUID
05577 NTAPI_INLINE
05578 RtlConvertUlongToLuid(
05579   _In_ ULONG Val)
05580 {
05581   LUID Luid;
05582 
05583   Luid.LowPart = Val;
05584   Luid.HighPart = 0;
05585   return Luid;
05586 }
05587 
05588 #endif /* !defined(MIDL_PASS) */
05589 
05590 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
05591 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
05592     *CallersAddress = (PVOID)_ReturnAddress(); \
05593     *CallersCaller = NULL;
05594 #else
05595 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05596 NTSYSAPI
05597 VOID
05598 NTAPI
05599 RtlGetCallersAddress(
05600   _Out_ PVOID *CallersAddress,
05601   _Out_ PVOID *CallersCaller);
05602 #endif
05603 #endif
05604 
05605 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
05606 
05607 #if (NTDDI_VERSION >= NTDDI_WIN7)
05608 
05609 FORCEINLINE
05610 VOID
05611 NTAPI
05612 RtlInitHashTableContext(
05613   _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context)
05614 {
05615   Context->ChainHead = NULL;
05616   Context->PrevLinkage = NULL;
05617 }
05618 
05619 FORCEINLINE
05620 VOID
05621 NTAPI
05622 RtlInitHashTableContextFromEnumerator(
05623   _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context,
05624   _In_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator)
05625 {
05626   Context->ChainHead = Enumerator->ChainHead;
05627   Context->PrevLinkage = Enumerator->HashEntry.Linkage.Blink;
05628 }
05629 
05630 FORCEINLINE
05631 VOID
05632 NTAPI
05633 RtlReleaseHashTableContext(
05634   _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context)
05635 {
05636   UNREFERENCED_PARAMETER(Context);
05637   return;
05638 }
05639 
05640 FORCEINLINE
05641 ULONG
05642 NTAPI
05643 RtlTotalBucketsHashTable(
05644   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable)
05645 {
05646   return HashTable->TableSize;
05647 }
05648 
05649 FORCEINLINE
05650 ULONG
05651 NTAPI
05652 RtlNonEmptyBucketsHashTable(
05653   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable)
05654 {
05655   return HashTable->NonEmptyBuckets;
05656 }
05657 
05658 FORCEINLINE
05659 ULONG
05660 NTAPI
05661 RtlEmptyBucketsHashTable(
05662   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable)
05663 {
05664   return HashTable->TableSize - HashTable->NonEmptyBuckets;
05665 }
05666 
05667 FORCEINLINE
05668 ULONG
05669 NTAPI
05670 RtlTotalEntriesHashTable(
05671   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable)
05672 {
05673   return HashTable->NumEntries;
05674 }
05675 
05676 FORCEINLINE
05677 ULONG
05678 NTAPI
05679 RtlActiveEnumeratorsHashTable(
05680   _In_ PRTL_DYNAMIC_HASH_TABLE HashTable)
05681 {
05682   return HashTable->NumEnumerators;
05683 }
05684 
05685 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
05686 
05687 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
05688 
05689 /******************************************************************************
05690  *                            Security Manager Functions                      *
05691  ******************************************************************************/
05692 
05693 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05694 
05695 _IRQL_requires_max_(PASSIVE_LEVEL)
05696 NTKERNELAPI
05697 BOOLEAN
05698 NTAPI
05699 SeSinglePrivilegeCheck(
05700   _In_ LUID PrivilegeValue,
05701   _In_ KPROCESSOR_MODE PreviousMode);
05702 
05703 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
05704 
05705 
05706 /******************************************************************************
05707  *                            ZwXxx Functions                                 *
05708  ******************************************************************************/
05709 
05710 
05711 _IRQL_requires_max_(PASSIVE_LEVEL)
05712 NTSYSAPI
05713 NTSTATUS
05714 NTAPI
05715 ZwAllocateLocallyUniqueId(
05716   _Out_ PLUID Luid);
05717 
05718 _IRQL_requires_max_(PASSIVE_LEVEL)
05719 NTSYSAPI
05720 NTSTATUS
05721 NTAPI
05722 ZwTerminateProcess(
05723   _In_opt_ HANDLE ProcessHandle,
05724   _In_ NTSTATUS ExitStatus);
05725 
05726 _IRQL_requires_max_(PASSIVE_LEVEL)
05727 NTSYSAPI
05728 NTSTATUS
05729 NTAPI
05730 ZwOpenProcess(
05731   _Out_ PHANDLE ProcessHandle,
05732   _In_ ACCESS_MASK DesiredAccess,
05733   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
05734   _In_opt_ PCLIENT_ID ClientId);
05735 
05736 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05737 
05738 _IRQL_requires_max_(PASSIVE_LEVEL)
05739 NTSTATUS
05740 NTAPI
05741 ZwCancelTimer(
05742   _In_ HANDLE TimerHandle,
05743   _Out_opt_ PBOOLEAN CurrentState);
05744 
05745 _IRQL_requires_max_(PASSIVE_LEVEL)
05746 _When_(return == 0, __drv_allocatesMem(TimerObject))
05747 NTSTATUS
05748 NTAPI
05749 ZwCreateTimer(
05750   _Out_ PHANDLE TimerHandle,
05751   _In_ ACCESS_MASK DesiredAccess,
05752   _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
05753   _In_ TIMER_TYPE TimerType);
05754 
05755 _IRQL_requires_max_(PASSIVE_LEVEL)
05756 NTSTATUS
05757 NTAPI
05758 ZwOpenTimer(
05759   _Out_ PHANDLE TimerHandle,
05760   _In_ ACCESS_MASK DesiredAccess,
05761   _In_ POBJECT_ATTRIBUTES ObjectAttributes);
05762 
05763 _IRQL_requires_max_(PASSIVE_LEVEL)
05764 NTSYSAPI
05765 NTSTATUS
05766 NTAPI
05767 ZwSetInformationThread(
05768   _In_ HANDLE ThreadHandle,
05769   _In_ THREADINFOCLASS ThreadInformationClass,
05770   _In_reads_bytes_(ThreadInformationLength) PVOID ThreadInformation,
05771   _In_ ULONG ThreadInformationLength);
05772 
05773 _IRQL_requires_max_(PASSIVE_LEVEL)
05774 NTSTATUS
05775 NTAPI
05776 ZwSetTimer(
05777   _In_ HANDLE TimerHandle,
05778   _In_ PLARGE_INTEGER DueTime,
05779   _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine,
05780   _In_opt_ PVOID TimerContext,
05781   _In_ BOOLEAN ResumeTimer,
05782   _In_opt_ LONG Period,
05783   _Out_opt_ PBOOLEAN PreviousState);
05784 
05785 _IRQL_requires_max_(PASSIVE_LEVEL)
05786 NTSYSAPI
05787 NTSTATUS
05788 NTAPI
05789 ZwDisplayString(
05790   _In_ PUNICODE_STRING String);
05791 
05792 _IRQL_requires_max_(PASSIVE_LEVEL)
05793 NTSYSAPI
05794 NTSTATUS
05795 NTAPI
05796 ZwPowerInformation(
05797   _In_ POWER_INFORMATION_LEVEL PowerInformationLevel,
05798   _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
05799   _In_ ULONG InputBufferLength,
05800   _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
05801   _In_ ULONG OutputBufferLength);
05802 
05803 _IRQL_requires_max_(PASSIVE_LEVEL)
05804 NTSYSAPI
05805 NTSTATUS
05806 NTAPI
05807 ZwQueryVolumeInformationFile(
05808   _In_ HANDLE FileHandle,
05809   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
05810   _Out_writes_bytes_(Length) PVOID FsInformation,
05811   _In_ ULONG Length,
05812   _In_ FS_INFORMATION_CLASS FsInformationClass);
05813 
05814 _IRQL_requires_max_(PASSIVE_LEVEL)
05815 NTSYSAPI
05816 NTSTATUS
05817 NTAPI
05818 ZwDeviceIoControlFile(
05819   _In_ HANDLE FileHandle,
05820   _In_opt_ HANDLE Event,
05821   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
05822   _In_opt_ PVOID ApcContext,
05823   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
05824   _In_ ULONG IoControlCode,
05825   _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
05826   _In_ ULONG InputBufferLength,
05827   _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
05828   _In_ ULONG OutputBufferLength);
05829 
05830 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
05831 
05832 
05833 #if (NTDDI_VERSION >= NTDDI_WIN7)
05834 
05835 _IRQL_requires_max_(PASSIVE_LEVEL)
05836 NTSTATUS
05837 NTAPI
05838 ZwSetTimerEx(
05839   _In_ HANDLE TimerHandle,
05840   _In_ TIMER_SET_INFORMATION_CLASS TimerSetInformationClass,
05841   _Inout_updates_bytes_opt_(TimerSetInformationLength) PVOID TimerSetInformation,
05842   _In_ ULONG TimerSetInformationLength);
05843 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
05844 
05845 
05846 
05847 /* UNSORTED */
05848 
05849 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
05850   ((ConditionMask) = VerSetConditionMask((ConditionMask),             \
05851   (TypeBitMask), (ComparisonType)))
05852 
05853 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05854 NTSYSAPI
05855 ULONGLONG
05856 NTAPI
05857 VerSetConditionMask(
05858   IN ULONGLONG ConditionMask,
05859   IN ULONG TypeMask,
05860   IN UCHAR Condition);
05861 #endif
05862 
05863 typedef struct _KERNEL_USER_TIMES {
05864   LARGE_INTEGER CreateTime;
05865   LARGE_INTEGER ExitTime;
05866   LARGE_INTEGER KernelTime;
05867   LARGE_INTEGER UserTime;
05868 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
05869 
05870 /* NtXxx Functions */
05871 
05872 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION {
05873   SystemFirmwareTable_Enumerate,
05874   SystemFirmwareTable_Get
05875 } SYSTEM_FIRMWARE_TABLE_ACTION;
05876 
05877 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION {
05878   ULONG ProviderSignature;
05879   SYSTEM_FIRMWARE_TABLE_ACTION Action;
05880   ULONG TableID;
05881   ULONG TableBufferLength;
05882   UCHAR TableBuffer[ANYSIZE_ARRAY];
05883 } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
05884 
05885 typedef NTSTATUS
05886 (__cdecl *PFNFTH)(
05887   _Inout_ PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo);
05888 
05889 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER {
05890   ULONG ProviderSignature;
05891   BOOLEAN Register;
05892   PFNFTH FirmwareTableHandler;
05893   PVOID DriverObject;
05894 } SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER;
05895 
05896 typedef ULONG_PTR
05897 (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
05898   _In_ PVOID Context);
05899 
05900 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
05901   PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
05902   PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
05903 } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
05904 
05905 #define DRIVER_VERIFIER_SPECIAL_POOLING             0x0001
05906 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING         0x0002
05907 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES  0x0004
05908 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS      0x0008
05909 #define DRIVER_VERIFIER_IO_CHECKING                 0x0010
05910 
05911 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V        0x0
05912 #define SHARED_GLOBAL_FLAGS_ERROR_PORT          (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
05913 
05914 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
05915 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED   (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
05916 
05917 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V      0x2
05918 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED        (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
05919 
05920 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V  0x3
05921 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED    \
05922   (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
05923 
05924 #define SHARED_GLOBAL_FLAGS_SPARE_V                     0x4
05925 #define SHARED_GLOBAL_FLAGS_SPARE                       \
05926   (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
05927 
05928 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V      0x5
05929 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED        \
05930   (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
05931 
05932 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V    0x6
05933 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED        \
05934   (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
05935 
05936 #define EX_INIT_BITS(Flags, Bit) \
05937   *((Flags)) |= (Bit)             // Safe to use before concurrently accessible
05938 
05939 #define EX_TEST_SET_BIT(Flags, Bit) \
05940   InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
05941 
05942 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
05943   InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
05944 
05945 #define PCCARD_MAP_ERROR               0x01
05946 #define PCCARD_DEVICE_PCI              0x10
05947 
05948 #define PCCARD_SCAN_DISABLED           0x01
05949 #define PCCARD_MAP_ZERO                0x02
05950 #define PCCARD_NO_TIMER                0x03
05951 #define PCCARD_NO_PIC                  0x04
05952 #define PCCARD_NO_LEGACY_BASE          0x05
05953 #define PCCARD_DUP_LEGACY_BASE         0x06
05954 #define PCCARD_NO_CONTROLLERS          0x07
05955 
05956 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
05957 
05958 /* Filesystem runtime library routines */
05959 
05960 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05961 _Must_inspect_result_
05962 NTKERNELAPI
05963 BOOLEAN
05964 NTAPI
05965 FsRtlIsTotalDeviceFailure(
05966   _In_ NTSTATUS Status);
05967 #endif
05968 
05969 #ifdef __cplusplus
05970 }
05971 #endif

Generated on Fri May 25 2012 04:28:41 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.