/*
* ntddk.h
*
- * Windows NT Device Driver Kit
+ * Windows Device Driver Kit
*
- * This file is part of the ReactOS DDK package.
+ * This file is part of the w32api package.
*
* Contributors:
- * Amine Khaldi
- * Timo Kreuzer (timo.kreuzer@reactos.org)
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * DEFINES:
+ * DBG - Debugging enabled/disabled (0/1)
+ * POOL_TAGGING - Enable pool tagging
+ * _X86_ - X86 environment
*/
-#pragma once
-
+#ifndef _NTDDK_
#define _NTDDK_
#if !defined(_NTHAL_) && !defined(_NTIFS_)
#include <excpt.h>
#include <ntdef.h>
#include <ntstatus.h>
-#include <mce.h>
/* FIXME
#include <bugcodes.h>
extern "C" {
#endif
-/* GUID and UUID */
-#ifndef _NTLSA_IFS_
-#ifndef _NTLSA_AUDIT_
-#define _NTLSA_AUDIT_
+struct _LOADER_PARAMETER_BLOCK;
+struct _CREATE_DISK;
+struct _DRIVE_LAYOUT_INFORMATION_EX;
+struct _SET_PARTITION_INFORMATION_EX;
+//
+// GUID and UUID
+//
#ifndef GUID_DEFINED
#include <guiddef.h>
#endif
-
-#endif /* _NTLSA_AUDIT_ */
-#endif /* _NTLSA_IFS_ */
-
typedef GUID UUID;
-struct _LOADER_PARAMETER_BLOCK;
-struct _CREATE_DISK;
-struct _DRIVE_LAYOUT_INFORMATION_EX;
-struct _SET_PARTITION_INFORMATION_EX;
-
typedef struct _BUS_HANDLER *PBUS_HANDLER;
-typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
-#if defined(_NTHAL_INCLUDED_)
-typedef struct _KAFFINITY_EX *PKAFFINITY_EX;
-#endif
-typedef struct _PEB *PPEB;
-#ifndef _NTIMAGE_
+typedef struct _PEB *PPEB;
-typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32;
-typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64;
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
-#ifdef _WIN64
-typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+extern NTSYSAPI volatile CCHAR KeNumberProcessors;
+#elif (NTDDI_VERSION >= NTDDI_WINXP)
+extern NTSYSAPI CCHAR KeNumberProcessors;
#else
-typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
+extern PCCHAR KeNumberProcessors;
#endif
-#endif /* _NTIMAGE_ */
-
-/******************************************************************************
- * Executive Types *
- ******************************************************************************/
-
-typedef struct _ZONE_SEGMENT_HEADER {
- SINGLE_LIST_ENTRY SegmentList;
- PVOID Reserved;
-} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
-
-typedef struct _ZONE_HEADER {
- SINGLE_LIST_ENTRY FreeList;
- SINGLE_LIST_ENTRY SegmentList;
- ULONG BlockSize;
- ULONG TotalSegmentSize;
-} ZONE_HEADER, *PZONE_HEADER;
-
-#define PROTECTED_POOL 0x80000000
-
-
-/******************************************************************************
- * I/O Manager Types *
- ******************************************************************************/
-
-/* DEVICE_OBJECT.Flags */
-#define DO_DEVICE_HAS_NAME 0x00000040
-#define DO_SYSTEM_BOOT_PARTITION 0x00000100
-#define DO_LONG_TERM_REQUESTS 0x00000200
-#define DO_NEVER_LAST_DEVICE 0x00000400
-#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
-#define DO_SUPPORTS_TRANSACTIONS 0x00040000
-#define DO_FORCE_NEITHER_IO 0x00080000
-#define DO_VOLUME_DEVICE_OBJECT 0x00100000
-#define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
-#define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
-#define DO_DISALLOW_EXECUTE 0x00800000
+#define MAX_WOW64_SHARED_ENTRIES 16
-#ifndef _ARC_DDK_
-#define _ARC_DDK_
-typedef enum _CONFIGURATION_TYPE {
- ArcSystem,
- CentralProcessor,
- FloatingPointProcessor,
- PrimaryIcache,
- PrimaryDcache,
- SecondaryIcache,
- SecondaryDcache,
- SecondaryCache,
- EisaAdapter,
- TcAdapter,
- ScsiAdapter,
- DtiAdapter,
- MultiFunctionAdapter,
- DiskController,
- TapeController,
- CdromController,
- WormController,
- SerialController,
- NetworkController,
- DisplayController,
- ParallelController,
- PointerController,
- KeyboardController,
- AudioController,
- OtherController,
- DiskPeripheral,
- FloppyDiskPeripheral,
- TapePeripheral,
- ModemPeripheral,
- MonitorPeripheral,
- PrinterPeripheral,
- PointerPeripheral,
- KeyboardPeripheral,
- TerminalPeripheral,
- OtherPeripheral,
- LinePeripheral,
- NetworkPeripheral,
- SystemMemory,
- DockingInformation,
- RealModeIrqRoutingTable,
- RealModePCIEnumeration,
- MaximumType
-} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
-#endif /* !_ARC_DDK_ */
+#define NX_SUPPORT_POLICY_ALWAYSOFF 0
+#define NX_SUPPORT_POLICY_ALWAYSON 1
+#define NX_SUPPORT_POLICY_OPTIN 2
+#define NX_SUPPORT_POLICY_OPTOUT 3
/*
** IRP function codes
#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
-#define IO_CHECK_CREATE_PARAMETERS 0x0200
-#define IO_ATTACH_DEVICE 0x0400
-#define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
+typedef struct _IO_COUNTERS {
+ ULONGLONG ReadOperationCount;
+ ULONGLONG WriteOperationCount;
+ ULONGLONG OtherOperationCount;
+ ULONGLONG ReadTransferCount;
+ ULONGLONG WriteTransferCount;
+ ULONGLONG OtherTransferCount;
+} IO_COUNTERS, *PIO_COUNTERS;
-typedef
-NTSTATUS
-(NTAPI *PIO_QUERY_DEVICE_ROUTINE)(
- IN PVOID Context,
- IN PUNICODE_STRING PathName,
- IN INTERFACE_TYPE BusType,
- IN ULONG BusNumber,
- IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
- IN CONFIGURATION_TYPE ControllerType,
- IN ULONG ControllerNumber,
- IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
- IN CONFIGURATION_TYPE PeripheralType,
- IN ULONG PeripheralNumber,
- IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
+typedef struct _VM_COUNTERS {
+ SIZE_T PeakVirtualSize;
+ SIZE_T VirtualSize;
+ ULONG PageFaultCount;
+ SIZE_T PeakWorkingSetSize;
+ SIZE_T WorkingSetSize;
+ SIZE_T QuotaPeakPagedPoolUsage;
+ SIZE_T QuotaPagedPoolUsage;
+ SIZE_T QuotaPeakNonPagedPoolUsage;
+ SIZE_T QuotaNonPagedPoolUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PeakPagefileUsage;
+} VM_COUNTERS, *PVM_COUNTERS;
-typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
- IoQueryDeviceIdentifier = 0,
- IoQueryDeviceConfigurationData,
- IoQueryDeviceComponentInformation,
- IoQueryDeviceMaxData
-} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
+typedef struct _VM_COUNTERS_EX
+{
+ SIZE_T PeakVirtualSize;
+ SIZE_T VirtualSize;
+ ULONG PageFaultCount;
+ SIZE_T PeakWorkingSetSize;
+ SIZE_T WorkingSetSize;
+ SIZE_T QuotaPeakPagedPoolUsage;
+ SIZE_T QuotaPagedPoolUsage;
+ SIZE_T QuotaPeakNonPagedPoolUsage;
+ SIZE_T QuotaNonPagedPoolUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PeakPagefileUsage;
+ SIZE_T PrivateUsage;
+} VM_COUNTERS_EX, *PVM_COUNTERS_EX;
-typedef VOID
-(NTAPI *PDRIVER_REINITIALIZE)(
- IN struct _DRIVER_OBJECT *DriverObject,
- IN PVOID Context OPTIONAL,
- IN ULONG Count);
+typedef struct _POOLED_USAGE_AND_LIMITS
+{
+ SIZE_T PeakPagedPoolUsage;
+ SIZE_T PagedPoolUsage;
+ SIZE_T PagedPoolLimit;
+ SIZE_T PeakNonPagedPoolUsage;
+ SIZE_T NonPagedPoolUsage;
+ SIZE_T NonPagedPoolLimit;
+ SIZE_T PeakPagefileUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PagefileLimit;
+} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
-typedef struct _CONTROLLER_OBJECT {
- CSHORT Type;
- CSHORT Size;
- PVOID ControllerExtension;
- KDEVICE_QUEUE DeviceWaitQueue;
- ULONG Spare1;
- LARGE_INTEGER Spare2;
-} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
+/* DEVICE_OBJECT.Flags */
+
+#define DO_VERIFY_VOLUME 0x00000002
+#define DO_BUFFERED_IO 0x00000004
+#define DO_EXCLUSIVE 0x00000008
+#define DO_DIRECT_IO 0x00000010
+#define DO_MAP_IO_BUFFER 0x00000020
+#define DO_DEVICE_HAS_NAME 0x00000040
+#define DO_DEVICE_INITIALIZING 0x00000080
+#define DO_SYSTEM_BOOT_PARTITION 0x00000100
+#define DO_LONG_TERM_REQUESTS 0x00000200
+#define DO_NEVER_LAST_DEVICE 0x00000400
+#define DO_SHUTDOWN_REGISTERED 0x00000800
+#define DO_BUS_ENUMERATED_DEVICE 0x00001000
+#define DO_POWER_PAGABLE 0x00002000
+#define DO_POWER_INRUSH 0x00004000
+#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
+#define DO_SUPPORTS_TRANSACTIONS 0x00040000
+#define DO_FORCE_NEITHER_IO 0x00080000
+#define DO_VOLUME_DEVICE_OBJECT 0x00100000
+#define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
+#define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
+#define DO_DISALLOW_EXECUTE 0x00800000
#define DRVO_REINIT_REGISTERED 0x00000008
#define DRVO_INITIALIZED 0x00000010
#define DRVO_BOOTREINIT_REGISTERED 0x00000020
#define DRVO_LEGACY_RESOURCES 0x00000040
-typedef struct _CONFIGURATION_INFORMATION {
- ULONG DiskCount;
- ULONG FloppyCount;
- ULONG CdRomCount;
- ULONG TapeCount;
- ULONG ScsiPortCount;
- ULONG SerialCount;
- ULONG ParallelCount;
- BOOLEAN AtDiskPrimaryAddressClaimed;
- BOOLEAN AtDiskSecondaryAddressClaimed;
- ULONG Version;
- ULONG MediumChangerCount;
-} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
-
-typedef struct _DISK_SIGNATURE {
- ULONG PartitionStyle;
- _ANONYMOUS_UNION union {
- struct {
- ULONG Signature;
- ULONG CheckSum;
- } Mbr;
- struct {
- GUID DiskId;
- } Gpt;
- } DUMMYUNIONNAME;
-} DISK_SIGNATURE, *PDISK_SIGNATURE;
-
-typedef struct _TXN_PARAMETER_BLOCK {
- USHORT Length;
- USHORT TxFsContext;
- PVOID TransactionObject;
-} TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK;
-
-#define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
-
-typedef struct _IO_DRIVER_CREATE_CONTEXT {
- CSHORT Size;
- struct _ECP_LIST *ExtraCreateParameter;
- PVOID DeviceObjectHint;
- PTXN_PARAMETER_BLOCK TxnParameters;
-} IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT;
-
-typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PGET_SET_DEVICE_DATA SetBusData;
- PGET_SET_DEVICE_DATA GetBusData;
- UCHAR CapabilityID;
-} AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD;
-
-typedef NTSTATUS
-(NTAPI *PGET_LOCATION_STRING)(
- IN OUT PVOID Context OPTIONAL,
- OUT PWCHAR *LocationStrings);
+typedef enum _ARBITER_REQUEST_SOURCE {
+ ArbiterRequestUndefined = -1,
+ ArbiterRequestLegacyReported,
+ ArbiterRequestHalReported,
+ ArbiterRequestLegacyAssigned,
+ ArbiterRequestPnpDetected,
+ ArbiterRequestPnpEnumerated
+} ARBITER_REQUEST_SOURCE;
-typedef struct _PNP_LOCATION_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PGET_LOCATION_STRING GetLocationString;
-} PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE;
+typedef enum _ARBITER_RESULT {
+ ArbiterResultUndefined = -1,
+ ArbiterResultSuccess,
+ ArbiterResultExternalConflict,
+ ArbiterResultNullRequest
+} ARBITER_RESULT;
typedef enum _ARBITER_ACTION {
ArbiterActionTestAllocation,
ULONGLONG End;
} ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
-typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS {
+typedef struct _ARBITER_PARAMETERS {
+ union {
+ struct {
IN OUT PLIST_ENTRY ArbitrationList;
IN ULONG AllocateFromCount;
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
-} ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS;
-
-typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS {
+ } TestAllocation;
+ struct {
IN OUT PLIST_ENTRY ArbitrationList;
IN ULONG AllocateFromCount;
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
-} ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS;
-
-typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS {
+ } RetestAllocation;
+ struct {
IN OUT PLIST_ENTRY ArbitrationList;
-} ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS;
-
-typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS {
+ } BootAllocation;
+ struct {
OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources;
-} ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS;
-
-typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS {
+ } QueryAllocatedResources;
+ struct {
IN PDEVICE_OBJECT PhysicalDeviceObject;
IN PIO_RESOURCE_DESCRIPTOR ConflictingResource;
OUT PULONG ConflictCount;
OUT PARBITER_CONFLICT_INFO *Conflicts;
-} ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS;
-
-typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS {
+ } QueryConflict;
+ struct {
IN PLIST_ENTRY ArbitrationList;
-} ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS;
-
-typedef struct _ARBITER_ADD_RESERVED_PARAMETERS {
+ } QueryArbitrate;
+ struct {
IN PDEVICE_OBJECT ReserveDevice;
-} ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS;
-
-typedef struct _ARBITER_PARAMETERS {
- union {
- ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation;
- ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation;
- ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation;
- ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources;
- ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict;
- ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate;
- ARBITER_ADD_RESERVED_PARAMETERS AddReserved;
+ } AddReserved;
} Parameters;
} ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
-typedef enum _ARBITER_REQUEST_SOURCE {
- ArbiterRequestUndefined = -1,
- ArbiterRequestLegacyReported,
- ArbiterRequestHalReported,
- ArbiterRequestLegacyAssigned,
- ArbiterRequestPnpDetected,
- ArbiterRequestPnpEnumerated
-} ARBITER_REQUEST_SOURCE;
-
-typedef enum _ARBITER_RESULT {
- ArbiterResultUndefined = -1,
- ArbiterResultSuccess,
- ArbiterResultExternalConflict,
- ArbiterResultNullRequest
-} ARBITER_RESULT;
-
#define ARBITER_FLAG_BOOT_CONFIG 0x00000001
typedef struct _ARBITER_LIST_ENTRY {
ULONG Flags;
} ARBITER_INTERFACE, *PARBITER_INTERFACE;
-typedef enum _RESOURCE_TRANSLATION_DIRECTION {
- TranslateChildToParent,
- TranslateParentToChild
-} RESOURCE_TRANSLATION_DIRECTION;
-
-typedef NTSTATUS
-(NTAPI *PTRANSLATE_RESOURCE_HANDLER)(
- IN OUT PVOID Context OPTIONAL,
- IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
- IN RESOURCE_TRANSLATION_DIRECTION Direction,
- IN ULONG AlternativesCount OPTIONAL,
- IN IO_RESOURCE_DESCRIPTOR Alternatives[],
- IN PDEVICE_OBJECT PhysicalDeviceObject,
- OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target);
-
-typedef NTSTATUS
-(NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
- IN OUT PVOID Context OPTIONAL,
- IN PIO_RESOURCE_DESCRIPTOR Source,
- IN PDEVICE_OBJECT PhysicalDeviceObject,
- OUT PULONG TargetCount,
- OUT PIO_RESOURCE_DESCRIPTOR *Target);
-
-typedef struct _TRANSLATOR_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PTRANSLATE_RESOURCE_HANDLER TranslateResources;
- PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
-} TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
-
-typedef struct _PCI_AGP_CAPABILITY {
- PCI_CAPABILITIES_HEADER Header;
- USHORT Minor:4;
- USHORT Major:4;
- USHORT Rsvd1:8;
- struct _PCI_AGP_STATUS {
- ULONG Rate:3;
- ULONG Agp3Mode:1;
- ULONG FastWrite:1;
- ULONG FourGB:1;
- ULONG HostTransDisable:1;
- ULONG Gart64:1;
- ULONG ITA_Coherent:1;
- ULONG SideBandAddressing:1;
- ULONG CalibrationCycle:3;
- ULONG AsyncRequestSize:3;
- ULONG Rsvd1:1;
- ULONG Isoch:1;
- ULONG Rsvd2:6;
- ULONG RequestQueueDepthMaximum:8;
- } AGPStatus;
- struct _PCI_AGP_COMMAND {
- ULONG Rate:3;
- ULONG Rsvd1:1;
- ULONG FastWriteEnable:1;
- ULONG FourGBEnable:1;
- ULONG Rsvd2:1;
- ULONG Gart64:1;
- ULONG AGPEnable:1;
- ULONG SBAEnable:1;
- ULONG CalibrationCycle:3;
- ULONG AsyncReqSize:3;
- ULONG Rsvd3:8;
- ULONG RequestQueueDepth:8;
- } AGPCommand;
-} PCI_AGP_CAPABILITY, *PPCI_AGP_CAPABILITY;
-
-typedef enum _EXTENDED_AGP_REGISTER {
- IsochStatus,
- AgpControl,
- ApertureSize,
- AperturePageSize,
- GartLow,
- GartHigh,
- IsochCommand
-} EXTENDED_AGP_REGISTER, *PEXTENDED_AGP_REGISTER;
-
-typedef struct _PCI_AGP_ISOCH_STATUS {
- ULONG ErrorCode:2;
- ULONG Rsvd1:1;
- ULONG Isoch_L:3;
- ULONG Isoch_Y:2;
- ULONG Isoch_N:8;
- ULONG Rsvd2:16;
-} PCI_AGP_ISOCH_STATUS, *PPCI_AGP_ISOCH_STATUS;
-
-typedef struct _PCI_AGP_CONTROL {
- ULONG Rsvd1:7;
- ULONG GTLB_Enable:1;
- ULONG AP_Enable:1;
- ULONG CAL_Disable:1;
- ULONG Rsvd2:22;
-} PCI_AGP_CONTROL, *PPCI_AGP_CONTROL;
-
-typedef struct _PCI_AGP_APERTURE_PAGE_SIZE {
- USHORT PageSizeMask:11;
- USHORT Rsvd1:1;
- USHORT PageSizeSelect:4;
-} PCI_AGP_APERTURE_PAGE_SIZE, *PPCI_AGP_APERTURE_PAGE_SIZE;
-
-typedef struct _PCI_AGP_ISOCH_COMMAND {
- USHORT Rsvd1:6;
- USHORT Isoch_Y:2;
- USHORT Isoch_N:8;
-} PCI_AGP_ISOCH_COMMAND, *PPCI_AGP_ISOCH_COMMAND;
-
-typedef struct PCI_AGP_EXTENDED_CAPABILITY {
- PCI_AGP_ISOCH_STATUS IsochStatus;
- PCI_AGP_CONTROL AgpControl;
- USHORT ApertureSize;
- PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize;
- ULONG GartLow;
- ULONG GartHigh;
- PCI_AGP_ISOCH_COMMAND IsochCommand;
-} PCI_AGP_EXTENDED_CAPABILITY, *PPCI_AGP_EXTENDED_CAPABILITY;
-
-#define PCI_AGP_RATE_1X 0x1
-#define PCI_AGP_RATE_2X 0x2
-#define PCI_AGP_RATE_4X 0x4
-
-#define PCIX_MODE_CONVENTIONAL_PCI 0x0
-#define PCIX_MODE1_66MHZ 0x1
-#define PCIX_MODE1_100MHZ 0x2
-#define PCIX_MODE1_133MHZ 0x3
-#define PCIX_MODE2_266_66MHZ 0x9
-#define PCIX_MODE2_266_100MHZ 0xA
-#define PCIX_MODE2_266_133MHZ 0xB
-#define PCIX_MODE2_533_66MHZ 0xD
-#define PCIX_MODE2_533_100MHZ 0xE
-#define PCIX_MODE2_533_133MHZ 0xF
-
-#define PCIX_VERSION_MODE1_ONLY 0x0
-#define PCIX_VERSION_MODE2_ECC 0x1
-#define PCIX_VERSION_DUAL_MODE_ECC 0x2
-
-typedef struct _PCIX_BRIDGE_CAPABILITY {
- PCI_CAPABILITIES_HEADER Header;
- union {
- struct {
- USHORT Bus64Bit:1;
- USHORT Bus133MHzCapable:1;
- USHORT SplitCompletionDiscarded:1;
- USHORT UnexpectedSplitCompletion:1;
- USHORT SplitCompletionOverrun:1;
- USHORT SplitRequestDelayed:1;
- USHORT BusModeFrequency:4;
- USHORT Rsvd:2;
- USHORT Version:2;
- USHORT Bus266MHzCapable:1;
- USHORT Bus533MHzCapable:1;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
- } SecondaryStatus;
- union {
- struct {
- ULONG FunctionNumber:3;
- ULONG DeviceNumber:5;
- ULONG BusNumber:8;
- ULONG Device64Bit:1;
- ULONG Device133MHzCapable:1;
- ULONG SplitCompletionDiscarded:1;
- ULONG UnexpectedSplitCompletion:1;
- ULONG SplitCompletionOverrun:1;
- ULONG SplitRequestDelayed:1;
- ULONG Rsvd:7;
- ULONG DIMCapable:1;
- ULONG Device266MHzCapable:1;
- ULONG Device533MHzCapable:1;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } BridgeStatus;
- USHORT UpstreamSplitTransactionCapacity;
- USHORT UpstreamSplitTransactionLimit;
- USHORT DownstreamSplitTransactionCapacity;
- USHORT DownstreamSplitTransactionLimit;
- union {
- struct {
- ULONG SelectSecondaryRegisters:1;
- ULONG ErrorPresentInOtherBank:1;
- ULONG AdditionalCorrectableError:1;
- ULONG AdditionalUncorrectableError:1;
- ULONG ErrorPhase:3;
- ULONG ErrorCorrected:1;
- ULONG Syndrome:8;
- ULONG ErrorFirstCommand:4;
- ULONG ErrorSecondCommand:4;
- ULONG ErrorUpperAttributes:4;
- ULONG ControlUpdateEnable:1;
- ULONG Rsvd:1;
- ULONG DisableSingleBitCorrection:1;
- ULONG EccMode:1;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } EccControlStatus;
- ULONG EccFirstAddress;
- ULONG EccSecondAddress;
- ULONG EccAttribute;
-} PCIX_BRIDGE_CAPABILITY, *PPCIX_BRIDGE_CAPABILITY;
-
-typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY {
- PCI_CAPABILITIES_HEADER Header;
- USHORT Reserved;
- USHORT SubVendorID;
- USHORT SubSystemID;
-} PCI_SUBSYSTEM_IDS_CAPABILITY, *PPCI_SUBSYSTEM_IDS_CAPABILITY;
-
-#define OSC_FIRMWARE_FAILURE 0x02
-#define OSC_UNRECOGNIZED_UUID 0x04
-#define OSC_UNRECOGNIZED_REVISION 0x08
-#define OSC_CAPABILITIES_MASKED 0x10
-
-#define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
-
-typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD {
- union {
- struct {
- ULONG ExtendedConfigOpRegions:1;
- ULONG ActiveStatePowerManagement:1;
- ULONG ClockPowerManagement:1;
- ULONG SegmentGroups:1;
- ULONG MessageSignaledInterrupts:1;
- ULONG WindowsHardwareErrorArchitecture:1;
- ULONG Reserved:26;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } u;
-} PCI_ROOT_BUS_OSC_SUPPORT_FIELD, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD;
-
-typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD {
- union {
- struct {
- ULONG ExpressNativeHotPlug:1;
- ULONG ShpcNativeHotPlug:1;
- ULONG ExpressNativePME:1;
- ULONG ExpressAdvancedErrorReporting:1;
- ULONG ExpressCapabilityStructure:1;
- ULONG Reserved:27;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } u;
-} PCI_ROOT_BUS_OSC_CONTROL_FIELD, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD;
-
-typedef enum _PCI_HARDWARE_INTERFACE {
- PciConventional,
- PciXMode1,
- PciXMode2,
- PciExpress
-} PCI_HARDWARE_INTERFACE, *PPCI_HARDWARE_INTERFACE;
-
-typedef enum {
- BusWidth32Bits,
- BusWidth64Bits
-} PCI_BUS_WIDTH;
-
-typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY {
- PCI_HARDWARE_INTERFACE SecondaryInterface;
- struct {
- BOOLEAN BusCapabilitiesFound;
- ULONG CurrentSpeedAndMode;
- ULONG SupportedSpeedsAndModes;
- BOOLEAN DeviceIDMessagingCapable;
- PCI_BUS_WIDTH SecondaryBusWidth;
- } DUMMYSTRUCTNAME;
- PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport;
- PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest;
- PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted;
-} PCI_ROOT_BUS_HARDWARE_CAPABILITY, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY;
-
-typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER {
- struct {
- USHORT CapabilityVersion:4;
- USHORT DeviceType:4;
- USHORT SlotImplemented:1;
- USHORT InterruptMessageNumber:5;
- USHORT Rsvd:2;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_CAPABILITIES_REGISTER, *PPCI_EXPRESS_CAPABILITIES_REGISTER;
-
-typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER {
- struct {
- ULONG MaxPayloadSizeSupported:3;
- ULONG PhantomFunctionsSupported:2;
- ULONG ExtendedTagSupported:1;
- ULONG L0sAcceptableLatency:3;
- ULONG L1AcceptableLatency:3;
- ULONG Undefined:3;
- ULONG RoleBasedErrorReporting:1;
- ULONG Rsvd1:2;
- ULONG CapturedSlotPowerLimit:8;
- ULONG CapturedSlotPowerLimitScale:2;
- ULONG Rsvd2:4;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER;
-
-#define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
-
-typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER {
- struct {
- USHORT CorrectableErrorEnable:1;
- USHORT NonFatalErrorEnable:1;
- USHORT FatalErrorEnable:1;
- USHORT UnsupportedRequestErrorEnable:1;
- USHORT EnableRelaxedOrder:1;
- USHORT MaxPayloadSize:3;
- USHORT ExtendedTagEnable:1;
- USHORT PhantomFunctionsEnable:1;
- USHORT AuxPowerEnable:1;
- USHORT NoSnoopEnable:1;
- USHORT MaxReadRequestSize:3;
- USHORT BridgeConfigRetryEnable:1;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_DEVICE_CONTROL_REGISTER, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER;
-
-#define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
-
-typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER {
- struct {
- USHORT CorrectableErrorDetected:1;
- USHORT NonFatalErrorDetected:1;
- USHORT FatalErrorDetected:1;
- USHORT UnsupportedRequestDetected:1;
- USHORT AuxPowerDetected:1;
- USHORT TransactionsPending:1;
- USHORT Rsvd:10;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_DEVICE_STATUS_REGISTER, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER;
-
-typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER {
- struct {
- ULONG MaximumLinkSpeed:4;
- ULONG MaximumLinkWidth:6;
- ULONG ActiveStatePMSupport:2;
- ULONG L0sExitLatency:3;
- ULONG L1ExitLatency:3;
- ULONG ClockPowerManagement:1;
- ULONG SurpriseDownErrorReportingCapable:1;
- ULONG DataLinkLayerActiveReportingCapable:1;
- ULONG Rsvd:3;
- ULONG PortNumber:8;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_LINK_CAPABILITIES_REGISTER, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER;
-
-typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER {
- struct {
- USHORT ActiveStatePMControl:2;
- USHORT Rsvd1:1;
- USHORT ReadCompletionBoundary:1;
- USHORT LinkDisable:1;
- USHORT RetrainLink:1;
- USHORT CommonClockConfig:1;
- USHORT ExtendedSynch:1;
- USHORT EnableClockPowerManagement:1;
- USHORT Rsvd2:7;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_LINK_CONTROL_REGISTER, *PPCI_EXPRESS_LINK_CONTROL_REGISTER;
-
-typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER {
- struct {
- USHORT LinkSpeed:4;
- USHORT LinkWidth:6;
- USHORT Undefined:1;
- USHORT LinkTraining:1;
- USHORT SlotClockConfig:1;
- USHORT DataLinkLayerActive:1;
- USHORT Rsvd:2;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_LINK_STATUS_REGISTER, *PPCI_EXPRESS_LINK_STATUS_REGISTER;
-
-typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER {
- struct {
- ULONG AttentionButtonPresent:1;
- ULONG PowerControllerPresent:1;
- ULONG MRLSensorPresent:1;
- ULONG AttentionIndicatorPresent:1;
- ULONG PowerIndicatorPresent:1;
- ULONG HotPlugSurprise:1;
- ULONG HotPlugCapable:1;
- ULONG SlotPowerLimit:8;
- ULONG SlotPowerLimitScale:2;
- ULONG ElectromechanicalLockPresent:1;
- ULONG NoCommandCompletedSupport:1;
- ULONG PhysicalSlotNumber:13;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER;
-
-typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER {
- struct {
- USHORT AttentionButtonEnable:1;
- USHORT PowerFaultDetectEnable:1;
- USHORT MRLSensorEnable:1;
- USHORT PresenceDetectEnable:1;
- USHORT CommandCompletedEnable:1;
- USHORT HotPlugInterruptEnable:1;
- USHORT AttentionIndicatorControl:2;
- USHORT PowerIndicatorControl:2;
- USHORT PowerControllerControl:1;
- USHORT ElectromechanicalLockControl:1;
- USHORT DataLinkStateChangeEnable:1;
- USHORT Rsvd:3;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER;
-
-typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER {
- struct {
- USHORT AttentionButtonPressed:1;
- USHORT PowerFaultDetected:1;
- USHORT MRLSensorChanged:1;
- USHORT PresenceDetectChanged:1;
- USHORT CommandCompleted:1;
- USHORT MRLSensorState:1;
- USHORT PresenceDetectState:1;
- USHORT ElectromechanicalLockEngaged:1;
- USHORT DataLinkStateChanged:1;
- USHORT Rsvd:7;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_SLOT_STATUS_REGISTER, *PPCI_EXPRESS_SLOT_STATUS_REGISTER;
-
-typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER {
- struct {
- USHORT CorrectableSerrEnable:1;
- USHORT NonFatalSerrEnable:1;
- USHORT FatalSerrEnable:1;
- USHORT PMEInterruptEnable:1;
- USHORT CRSSoftwareVisibilityEnable:1;
- USHORT Rsvd:11;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_ROOT_CONTROL_REGISTER, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER;
-
-typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER {
- struct {
- USHORT CRSSoftwareVisibility:1;
- USHORT Rsvd:15;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER;
-
-typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER {
- struct {
- ULONG PMERequestorId:16;
- ULONG PMEStatus:1;
- ULONG PMEPending:1;
- ULONG Rsvd:14;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_ROOT_STATUS_REGISTER, *PPCI_EXPRESS_ROOT_STATUS_REGISTER;
-
-typedef struct _PCI_EXPRESS_CAPABILITY {
- PCI_CAPABILITIES_HEADER Header;
- PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities;
- PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities;
- PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl;
- PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus;
- PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities;
- PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl;
- PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus;
- PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities;
- PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl;
- PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus;
- PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl;
- PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities;
- PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus;
-} PCI_EXPRESS_CAPABILITY, *PPCI_EXPRESS_CAPABILITY;
-
-typedef enum {
- MRLClosed = 0,
- MRLOpen
-} PCI_EXPRESS_MRL_STATE;
-
-typedef enum {
- SlotEmpty = 0,
- CardPresent
-} PCI_EXPRESS_CARD_PRESENCE;
-
-typedef enum {
- IndicatorOn = 1,
- IndicatorBlink,
- IndicatorOff
-} PCI_EXPRESS_INDICATOR_STATE;
-
-typedef enum {
- PowerOn = 0,
- PowerOff
-} PCI_EXPRESS_POWER_STATE;
-
-typedef enum {
- L0sEntrySupport = 1,
- L0sAndL1EntrySupport = 3
-} PCI_EXPRESS_ASPM_SUPPORT;
-
-typedef enum {
- L0sAndL1EntryDisabled,
- L0sEntryEnabled,
- L1EntryEnabled,
- L0sAndL1EntryEnabled
-} PCI_EXPRESS_ASPM_CONTROL;
-
-typedef enum {
- L0s_Below64ns = 0,
- L0s_64ns_128ns,
- L0s_128ns_256ns,
- L0s_256ns_512ns,
- L0s_512ns_1us,
- L0s_1us_2us,
- L0s_2us_4us,
- L0s_Above4us
-} PCI_EXPRESS_L0s_EXIT_LATENCY;
-
-typedef enum {
- L1_Below1us = 0,
- L1_1us_2us,
- L1_2us_4us,
- L1_4us_8us,
- L1_8us_16us,
- L1_16us_32us,
- L1_32us_64us,
- L1_Above64us
-} PCI_EXPRESS_L1_EXIT_LATENCY;
-
-typedef enum {
- PciExpressEndpoint = 0,
- PciExpressLegacyEndpoint,
- PciExpressRootPort = 4,
- PciExpressUpstreamSwitchPort,
- PciExpressDownstreamSwitchPort,
- PciExpressToPciXBridge,
- PciXToExpressBridge,
- PciExpressRootComplexIntegratedEndpoint,
- PciExpressRootComplexEventCollector
-} PCI_EXPRESS_DEVICE_TYPE;
-
-typedef enum {
- MaxPayload128Bytes = 0,
- MaxPayload256Bytes,
- MaxPayload512Bytes,
- MaxPayload1024Bytes,
- MaxPayload2048Bytes,
- MaxPayload4096Bytes
-} PCI_EXPRESS_MAX_PAYLOAD_SIZE;
-
-typedef union _PCI_EXPRESS_PME_REQUESTOR_ID {
- struct {
- USHORT FunctionNumber:3;
- USHORT DeviceNumber:5;
- USHORT BusNumber:8;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID;
-
-#if defined(_WIN64)
-
-#ifndef USE_DMA_MACROS
-#define USE_DMA_MACROS
-#endif
-
-#ifndef NO_LEGACY_DRIVERS
-#define NO_LEGACY_DRIVERS
-#endif
-
-#endif /* defined(_WIN64) */
-
-typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE {
- ResourceTypeSingle = 0,
- ResourceTypeRange,
- ResourceTypeExtendedCounterConfiguration,
- ResourceTypeOverflow,
- ResourceTypeMax
-} PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE;
-
-typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR {
- PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type;
- ULONG Flags;
- union {
- ULONG CounterIndex;
- ULONG ExtendedRegisterAddress;
- struct {
- ULONG Begin;
- ULONG End;
- } Range;
- } u;
-} PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR;
-
-typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST {
- ULONG Count;
- PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY];
-} PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST;
-
-typedef VOID
-(NTAPI *PciPin2Line)(
- IN struct _BUS_HANDLER *BusHandler,
- IN struct _BUS_HANDLER *RootHandler,
- IN PCI_SLOT_NUMBER SlotNumber,
- IN PPCI_COMMON_CONFIG PciData);
-
-typedef VOID
-(NTAPI *PciLine2Pin)(
- IN struct _BUS_HANDLER *BusHandler,
- IN struct _BUS_HANDLER *RootHandler,
- IN PCI_SLOT_NUMBER SlotNumber,
- IN PPCI_COMMON_CONFIG PciNewData,
- IN PPCI_COMMON_CONFIG PciOldData);
-
-typedef VOID
-(NTAPI *PciReadWriteConfig)(
- IN struct _BUS_HANDLER *BusHandler,
- IN PCI_SLOT_NUMBER Slot,
- IN PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
-
-#define PCI_DATA_TAG ' ICP'
-#define PCI_DATA_VERSION 1
-
-typedef struct _PCIBUSDATA {
- ULONG Tag;
- ULONG Version;
- PciReadWriteConfig ReadConfig;
- PciReadWriteConfig WriteConfig;
- PciPin2Line Pin2Line;
- PciLine2Pin Line2Pin;
- PCI_SLOT_NUMBER ParentSlot;
- PVOID Reserved[4];
-} PCIBUSDATA, *PPCIBUSDATA;
-
-#ifndef _PCIINTRF_X_
-#define _PCIINTRF_X_
-
-typedef ULONG
-(NTAPI *PCI_READ_WRITE_CONFIG)(
- IN PVOID Context,
- IN ULONG BusOffset,
- IN ULONG Slot,
- IN PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
-
-typedef VOID
-(NTAPI *PCI_PIN_TO_LINE)(
- IN PVOID Context,
- IN PPCI_COMMON_CONFIG PciData);
-
-typedef VOID
-(NTAPI *PCI_LINE_TO_PIN)(
- IN PVOID Context,
- IN PPCI_COMMON_CONFIG PciNewData,
- IN PPCI_COMMON_CONFIG PciOldData);
-
-typedef VOID
-(NTAPI *PCI_ROOT_BUS_CAPABILITY)(
- IN PVOID Context,
- OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability);
-
-typedef VOID
-(NTAPI *PCI_EXPRESS_WAKE_CONTROL)(
- IN PVOID Context,
- IN BOOLEAN EnableWake);
-
-typedef struct _PCI_BUS_INTERFACE_STANDARD {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PCI_READ_WRITE_CONFIG ReadConfig;
- PCI_READ_WRITE_CONFIG WriteConfig;
- PCI_PIN_TO_LINE PinToLine;
- PCI_LINE_TO_PIN LineToPin;
- PCI_ROOT_BUS_CAPABILITY RootBusCapability;
- PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl;
-} PCI_BUS_INTERFACE_STANDARD, *PPCI_BUS_INTERFACE_STANDARD;
-
-#define PCI_BUS_INTERFACE_STANDARD_VERSION 1
-
-#endif /* _PCIINTRF_X_ */
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
-#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
-#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
- (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
- FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
-
-#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
-#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
-#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
-
-#else
-
-#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
-#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
-#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
-
-#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
-#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
-#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-#define FILE_CHARACTERISTICS_PROPAGATED ( FILE_REMOVABLE_MEDIA | \
- FILE_READ_ONLY_DEVICE | \
- FILE_FLOPPY_DISKETTE | \
- FILE_WRITE_ONCE_MEDIA | \
- FILE_DEVICE_SECURE_OPEN )
-
-typedef struct _FILE_ALIGNMENT_INFORMATION {
- ULONG AlignmentRequirement;
-} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
-
-typedef struct _FILE_NAME_INFORMATION {
- ULONG FileNameLength;
- WCHAR FileName[1];
-} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
-
-
-typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
- ULONG FileAttributes;
- ULONG ReparseTag;
-} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
-
-typedef struct _FILE_DISPOSITION_INFORMATION {
- BOOLEAN DeleteFile;
-} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
-
-typedef struct _FILE_END_OF_FILE_INFORMATION {
- LARGE_INTEGER EndOfFile;
-} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
-
-typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
- LARGE_INTEGER ValidDataLength;
-} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
-
-typedef struct _FILE_FS_LABEL_INFORMATION {
- ULONG VolumeLabelLength;
- WCHAR VolumeLabel[1];
-} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
-
-typedef struct _FILE_FS_VOLUME_INFORMATION {
- LARGE_INTEGER VolumeCreationTime;
- ULONG VolumeSerialNumber;
- ULONG VolumeLabelLength;
- BOOLEAN SupportsObjects;
- WCHAR VolumeLabel[1];
-} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
-
-typedef struct _FILE_FS_SIZE_INFORMATION {
- LARGE_INTEGER TotalAllocationUnits;
- LARGE_INTEGER AvailableAllocationUnits;
- ULONG SectorsPerAllocationUnit;
- ULONG BytesPerSector;
-} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
-
-typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
- LARGE_INTEGER TotalAllocationUnits;
- LARGE_INTEGER CallerAvailableAllocationUnits;
- LARGE_INTEGER ActualAvailableAllocationUnits;
- ULONG SectorsPerAllocationUnit;
- ULONG BytesPerSector;
-} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
-
-typedef struct _FILE_FS_OBJECTID_INFORMATION {
- UCHAR ObjectId[16];
- UCHAR ExtendedInfo[48];
-} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
-
-typedef union _FILE_SEGMENT_ELEMENT {
- PVOID64 Buffer;
- ULONGLONG Alignment;
-}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
-
-#define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
-#define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
-#define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
-
-typedef enum _BUS_DATA_TYPE {
- ConfigurationSpaceUndefined = -1,
- Cmos,
- EisaConfiguration,
- Pos,
- CbusConfiguration,
- PCIConfiguration,
- VMEConfiguration,
- NuBusConfiguration,
- PCMCIAConfiguration,
- MPIConfiguration,
- MPSAConfiguration,
- PNPISAConfiguration,
- SgiInternalConfiguration,
- MaximumBusDataType
-} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
-
-/* Hardware Abstraction Layer Types */
-
-typedef BOOLEAN
-(NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
- IN ULONG Columns,
- IN ULONG Rows);
-
-typedef PBUS_HANDLER
-(FASTCALL *pHalHandlerForBus)(
- IN INTERFACE_TYPE InterfaceType,
- IN ULONG BusNumber);
-
-typedef VOID
-(FASTCALL *pHalReferenceBusHandler)(
- IN PBUS_HANDLER BusHandler);
-
typedef enum _HAL_QUERY_INFORMATION_CLASS {
HalInstalledBusInformation,
HalProfileSourceInformation,
HalProfileDpgoSourceInterruptHandler
} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
-typedef NTSTATUS
-(NTAPI *pHalQuerySystemInformation)(
- IN HAL_QUERY_INFORMATION_CLASS InformationClass,
- IN ULONG BufferSize,
- IN OUT PVOID Buffer,
- OUT PULONG ReturnedLength);
+typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
+ KPROFILE_SOURCE Source;
+ ULONG_PTR Interval;
+} HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
-typedef NTSTATUS
-(NTAPI *pHalSetSystemInformation)(
- IN HAL_SET_INFORMATION_CLASS InformationClass,
- IN ULONG BufferSize,
- IN PVOID Buffer);
+typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
+ KPROFILE_SOURCE Source;
+ BOOLEAN Supported;
+ ULONG Interval;
+} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
-typedef VOID
-(FASTCALL *pHalExamineMBR)(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG SectorSize,
- IN ULONG MBRTypeIdentifier,
- OUT PVOID *Buffer);
+typedef struct _MAP_REGISTER_ENTRY {
+ PVOID MapRegister;
+ BOOLEAN WriteToDevice;
+} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
-typedef NTSTATUS
-(FASTCALL *pHalIoReadPartitionTable)(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG SectorSize,
- IN BOOLEAN ReturnRecognizedPartitions,
- OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
+typedef struct _DEBUG_DEVICE_ADDRESS {
+ UCHAR Type;
+ BOOLEAN Valid;
+ UCHAR Reserved[2];
+ PUCHAR TranslatedAddress;
+ ULONG Length;
+} DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS;
-typedef NTSTATUS
-(FASTCALL *pHalIoSetPartitionInformation)(
- IN PDEVICE_OBJECT DeviceObject,
+typedef struct _DEBUG_MEMORY_REQUIREMENTS {
+ PHYSICAL_ADDRESS Start;
+ PHYSICAL_ADDRESS MaxEnd;
+ PVOID VirtualAddress;
+ ULONG Length;
+ BOOLEAN Cached;
+ BOOLEAN Aligned;
+} DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS;
+
+typedef struct _DEBUG_DEVICE_DESCRIPTOR {
+ ULONG Bus;
+ ULONG Slot;
+ USHORT Segment;
+ USHORT VendorID;
+ USHORT DeviceID;
+ UCHAR BaseClass;
+ UCHAR SubClass;
+ UCHAR ProgIf;
+ BOOLEAN Initialized;
+ BOOLEAN Configured;
+ DEBUG_DEVICE_ADDRESS BaseAddress[6];
+ DEBUG_MEMORY_REQUIREMENTS Memory;
+} DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR;
+
+typedef struct _PM_DISPATCH_TABLE {
+ ULONG Signature;
+ ULONG Version;
+ PVOID Function[1];
+} PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
+
+typedef enum _RESOURCE_TRANSLATION_DIRECTION {
+ TranslateChildToParent,
+ TranslateParentToChild
+} RESOURCE_TRANSLATION_DIRECTION;
+
+typedef NTSTATUS
+(NTAPI *PTRANSLATE_RESOURCE_HANDLER)(
+ IN OUT PVOID Context,
+ IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
+ IN RESOURCE_TRANSLATION_DIRECTION Direction,
+ IN ULONG AlternativesCount OPTIONAL,
+ IN IO_RESOURCE_DESCRIPTOR Alternatives[],
+ IN PDEVICE_OBJECT PhysicalDeviceObject,
+ OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target);
+
+typedef NTSTATUS
+(NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
+ IN PVOID Context OPTIONAL,
+ IN PIO_RESOURCE_DESCRIPTOR Source,
+ IN PDEVICE_OBJECT PhysicalDeviceObject,
+ OUT PULONG TargetCount,
+ OUT PIO_RESOURCE_DESCRIPTOR *Target);
+
+typedef struct _TRANSLATOR_INTERFACE {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PTRANSLATE_RESOURCE_HANDLER TranslateResources;
+ PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
+} TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
+
+typedef VOID
+(FASTCALL *pHalExamineMBR)(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG MBRTypeIdentifier,
+ OUT PVOID *Buffer);
+
+typedef NTSTATUS
+(FASTCALL *pHalIoReadPartitionTable)(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN BOOLEAN ReturnRecognizedPartitions,
+ OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
+
+typedef NTSTATUS
+(FASTCALL *pHalIoSetPartitionInformation)(
+ IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN ULONG PartitionNumber,
IN ULONG PartitionType);
IN ULONG NumberOfHeads,
IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
+typedef PBUS_HANDLER
+(FASTCALL *pHalHandlerForBus)(
+ IN INTERFACE_TYPE InterfaceType,
+ IN ULONG BusNumber);
+
+typedef VOID
+(FASTCALL *pHalReferenceBusHandler)(
+ IN PBUS_HANDLER BusHandler);
+
+typedef NTSTATUS
+(NTAPI *pHalQuerySystemInformation)(
+ IN HAL_QUERY_INFORMATION_CLASS InformationClass,
+ IN ULONG BufferSize,
+ IN OUT PVOID Buffer,
+ OUT PULONG ReturnedLength);
+
+typedef NTSTATUS
+(NTAPI *pHalSetSystemInformation)(
+ IN HAL_SET_INFORMATION_CLASS InformationClass,
+ IN ULONG BufferSize,
+ IN PVOID Buffer);
+
typedef NTSTATUS
(NTAPI *pHalQueryBusSlots)(
IN PBUS_HANDLER BusHandler,
(NTAPI *pHalInitPnpDriver)(
VOID);
-typedef struct _PM_DISPATCH_TABLE {
- ULONG Signature;
- ULONG Version;
- PVOID Function[1];
-} PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
-
typedef NTSTATUS
(NTAPI *pHalInitPowerManagement)(
IN PPM_DISPATCH_TABLE PmDriverDispatchTable,
IN PHYSICAL_ADDRESS PhysicalAddress,
IN LARGE_INTEGER NumberOfBytes);
-typedef BOOLEAN
+typedef VOID
+(NTAPI *pHalEndOfBoot)(
+ VOID);
+
+typedef
+BOOLEAN
(NTAPI *pHalTranslateBusAddress)(
IN INTERFACE_TYPE InterfaceType,
IN ULONG BusNumber,
IN OUT PULONG AddressSpace,
OUT PPHYSICAL_ADDRESS TranslatedAddress);
-typedef NTSTATUS
+typedef
+NTSTATUS
(NTAPI *pHalAssignSlotResources)(
IN PUNICODE_STRING RegistryPath,
IN PUNICODE_STRING DriverClassName OPTIONAL,
IN ULONG SlotNumber,
IN OUT PCM_RESOURCE_LIST *AllocatedResources);
-typedef VOID
+typedef
+VOID
(NTAPI *pHalHaltSystem)(
VOID);
-typedef BOOLEAN
+typedef
+BOOLEAN
(NTAPI *pHalResetDisplay)(
VOID);
-typedef struct _MAP_REGISTER_ENTRY {
- PVOID MapRegister;
- BOOLEAN WriteToDevice;
-} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
-
-typedef UCHAR
+typedef
+UCHAR
(NTAPI *pHalVectorToIDTEntry)(
ULONG Vector);
-typedef BOOLEAN
+typedef
+BOOLEAN
(NTAPI *pHalFindBusAddressTranslation)(
IN PHYSICAL_ADDRESS BusAddress,
IN OUT PULONG AddressSpace,
IN OUT PULONG_PTR Context,
IN BOOLEAN NextBus);
-typedef VOID
-(NTAPI *pHalEndOfBoot)(
- VOID);
+typedef
+NTSTATUS
+(NTAPI *pKdSetupPciDeviceForDebugging)(
+ IN PVOID LoaderBlock OPTIONAL,
+ IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
+
+typedef
+NTSTATUS
+(NTAPI *pKdReleasePciDeviceForDebugging)(
+ IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
+
+typedef
+PVOID
+(NTAPI *pKdGetAcpiTablePhase0)(
+ IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
+ IN ULONG Signature);
-typedef PVOID
+typedef
+PVOID
(NTAPI *pHalGetAcpiTable)(
IN ULONG Signature,
IN PCSTR OemId OPTIONAL,
IN PCSTR OemTableId OPTIONAL);
-#if defined(_IA64_)
-typedef NTSTATUS
-(*pHalGetErrorCapList)(
- IN OUT PULONG CapsListLength,
- IN OUT PUCHAR ErrorCapList);
+typedef
+VOID
+(NTAPI *pKdCheckPowerButton)(
+ VOID);
-typedef NTSTATUS
-(*pHalInjectError)(
- IN ULONG BufferLength,
- IN PUCHAR Buffer);
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+typedef
+PVOID
+(NTAPI *pKdMapPhysicalMemory64)(
+ IN PHYSICAL_ADDRESS PhysicalAddress,
+ IN ULONG NumberPages,
+ IN BOOLEAN FlushCurrentTLB);
+
+typedef
+VOID
+(NTAPI *pKdUnmapVirtualAddress)(
+ IN PVOID VirtualAddress,
+ IN ULONG NumberPages,
+ IN BOOLEAN FlushCurrentTLB);
+#else
+typedef
+PVOID
+(NTAPI *pKdMapPhysicalMemory64)(
+ IN PHYSICAL_ADDRESS PhysicalAddress,
+ IN ULONG NumberPages);
+
+typedef
+VOID
+(NTAPI *pKdUnmapVirtualAddress)(
+ IN PVOID VirtualAddress,
+ IN ULONG NumberPages);
#endif
-typedef VOID
+
+typedef
+ULONG
+(NTAPI *pKdGetPciDataByOffset)(
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ OUT PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length);
+
+typedef
+ULONG
+(NTAPI *pKdSetPciDataByOffset)(
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ IN PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length);
+
+typedef BOOLEAN
+(NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
+ IN ULONG Columns,
+ IN ULONG Rows);
+
+typedef
+VOID
(NTAPI *PCI_ERROR_HANDLER_CALLBACK)(
VOID);
-typedef VOID
+typedef
+VOID
(NTAPI *pHalSetPciErrorHandlerCallback)(
IN PCI_ERROR_HANDLER_CALLBACK Callback);
#define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
#define HalEndOfBoot HALDISPATCH->HalEndOfBoot
#define HalMirrorVerify HALDISPATCH->HalMirrorVerify
-#define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
-#define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
-#if defined(_IA64_)
-#define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
-#define HalInjectError HALDISPATCH->HalInjectError
-#endif
-
-typedef struct _HAL_BUS_INFORMATION {
- INTERFACE_TYPE BusType;
- BUS_DATA_TYPE ConfigurationType;
- ULONG BusNumber;
- ULONG Reserved;
-} HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION;
-
-typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
- KPROFILE_SOURCE Source;
- BOOLEAN Supported;
- ULONG Interval;
-} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
-
-typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX {
- KPROFILE_SOURCE Source;
- BOOLEAN Supported;
- ULONG_PTR Interval;
- ULONG_PTR DefInterval;
- ULONG_PTR MaxInterval;
- ULONG_PTR MinInterval;
-} HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX;
-typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
- KPROFILE_SOURCE Source;
- ULONG_PTR Interval;
-} HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
+typedef struct _FILE_ALIGNMENT_INFORMATION {
+ ULONG AlignmentRequirement;
+} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
-typedef struct _HAL_PROFILE_SOURCE_LIST {
- KPROFILE_SOURCE Source;
- PWSTR Description;
-} HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST;
+typedef struct _FILE_NAME_INFORMATION {
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
-typedef enum _HAL_DISPLAY_BIOS_INFORMATION {
- HalDisplayInt10Bios,
- HalDisplayEmulatedBios,
- HalDisplayNoBios
-} HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION;
-typedef struct _HAL_POWER_INFORMATION {
- ULONG TBD;
-} HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION;
+typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
+ ULONG FileAttributes;
+ ULONG ReparseTag;
+} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
-typedef struct _HAL_PROCESSOR_SPEED_INFO {
- ULONG ProcessorSpeed;
-} HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION;
+typedef struct _FILE_DISPOSITION_INFORMATION {
+ BOOLEAN DeleteFile;
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
-typedef struct _HAL_CALLBACKS {
- PCALLBACK_OBJECT SetSystemInformation;
- PCALLBACK_OBJECT BusCheck;
-} HAL_CALLBACKS, *PHAL_CALLBACKS;
+typedef struct _FILE_END_OF_FILE_INFORMATION {
+ LARGE_INTEGER EndOfFile;
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
-typedef struct _HAL_PROCESSOR_FEATURE {
- ULONG UsableFeatureBits;
-} HAL_PROCESSOR_FEATURE;
+typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
+ LARGE_INTEGER ValidDataLength;
+} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
-typedef NTSTATUS
-(NTAPI *PHALIOREADWRITEHANDLER)(
- IN BOOLEAN fRead,
- IN ULONG dwAddr,
- IN ULONG dwSize,
- IN OUT PULONG pdwData);
-
-typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST {
- ULONG BadAddrBegin;
- ULONG BadAddrSize;
- ULONG OSVersionTrigger;
- PHALIOREADWRITEHANDLER IOHandler;
-} HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST;
-
-#if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
-
-typedef VOID
-(NTAPI *PHALMCAINTERFACELOCK)(
- VOID);
-
-typedef VOID
-(NTAPI *PHALMCAINTERFACEUNLOCK)(
- VOID);
+typedef union _FILE_SEGMENT_ELEMENT {
+ PVOID64 Buffer;
+ ULONGLONG Alignment;
+}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
-typedef NTSTATUS
-(NTAPI *PHALMCAINTERFACEREADREGISTER)(
- IN UCHAR BankNumber,
- IN OUT PVOID Exception);
-
-typedef struct _HAL_MCA_INTERFACE {
- PHALMCAINTERFACELOCK Lock;
- PHALMCAINTERFACEUNLOCK Unlock;
- PHALMCAINTERFACEREADREGISTER ReadRegister;
-} HAL_MCA_INTERFACE;
-
-typedef enum {
- ApicDestinationModePhysical = 1,
- ApicDestinationModeLogicalFlat,
- ApicDestinationModeLogicalClustered,
- ApicDestinationModeUnknown
-} HAL_APIC_DESTINATION_MODE, *PHAL_APIC_DESTINATION_MODE;
-
-#if defined(_AMD64_)
-
-struct _KTRAP_FRAME;
-struct _KEXCEPTION_FRAME;
-
-typedef ERROR_SEVERITY
-(NTAPI *PDRIVER_EXCPTN_CALLBACK)(
- IN PVOID Context,
- IN struct _KTRAP_FRAME *TrapFrame,
- IN struct _KEXCEPTION_FRAME *ExceptionFrame,
- IN PMCA_EXCEPTION Exception);
+#define SE_UNSOLICITED_INPUT_PRIVILEGE 6
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTSYSAPI
+ULONGLONG
+NTAPI
+VerSetConditionMask(
+ IN ULONGLONG ConditionMask,
+ IN ULONG TypeMask,
+ IN UCHAR Condition);
#endif
-#if defined(_X86_) || defined(_IA64_)
-typedef
-#if defined(_IA64_)
-ERROR_SEVERITY
-#else
-VOID
-#endif
-(NTAPI *PDRIVER_EXCPTN_CALLBACK)(
- IN PVOID Context,
- IN PMCA_EXCEPTION BankLog);
-#endif
+#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
+ ((ConditionMask) = VerSetConditionMask((ConditionMask), \
+ (TypeBitMask), (ComparisonType)))
-typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK;
+/* RtlVerifyVersionInfo() TypeMask */
-typedef struct _MCA_DRIVER_INFO {
- PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback;
- PKDEFERRED_ROUTINE DpcCallback;
- PVOID DeviceContext;
-} MCA_DRIVER_INFO, *PMCA_DRIVER_INFO;
+#define VER_MINORVERSION 0x0000001
+#define VER_MAJORVERSION 0x0000002
+#define VER_BUILDNUMBER 0x0000004
+#define VER_PLATFORMID 0x0000008
+#define VER_SERVICEPACKMINOR 0x0000010
+#define VER_SERVICEPACKMAJOR 0x0000020
+#define VER_SUITENAME 0x0000040
+#define VER_PRODUCT_TYPE 0x0000080
-typedef struct _HAL_ERROR_INFO {
- ULONG Version;
- ULONG InitMaxSize;
- ULONG McaMaxSize;
- ULONG McaPreviousEventsCount;
- ULONG McaCorrectedEventsCount;
- ULONG McaKernelDeliveryFails;
- ULONG McaDriverDpcQueueFails;
- ULONG McaReserved;
- ULONG CmcMaxSize;
- ULONG CmcPollingInterval;
- ULONG CmcInterruptsCount;
- ULONG CmcKernelDeliveryFails;
- ULONG CmcDriverDpcQueueFails;
- ULONG CmcGetStateFails;
- ULONG CmcClearStateFails;
- ULONG CmcReserved;
- ULONGLONG CmcLogId;
- ULONG CpeMaxSize;
- ULONG CpePollingInterval;
- ULONG CpeInterruptsCount;
- ULONG CpeKernelDeliveryFails;
- ULONG CpeDriverDpcQueueFails;
- ULONG CpeGetStateFails;
- ULONG CpeClearStateFails;
- ULONG CpeInterruptSources;
- ULONGLONG CpeLogId;
- ULONGLONG KernelReserved[4];
-} HAL_ERROR_INFO, *PHAL_ERROR_INFO;
-
-#define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
-#define HAL_MCE_DISABLED ((ULONG)0)
-
-#define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
-#define HAL_CMC_DISABLED HAL_MCE_DISABLED
-
-#define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
-#define HAL_CPE_DISABLED HAL_MCE_DISABLED
-
-#define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
-#define HAL_MCA_DISABLED HAL_MCE_DISABLED
+/* RtlVerifyVersionInfo() ComparisonType */
-typedef VOID
-(NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)(
- IN PVOID Context,
- IN PCMC_EXCEPTION CmcLog);
+#define VER_EQUAL 1
+#define VER_GREATER 2
+#define VER_GREATER_EQUAL 3
+#define VER_LESS 4
+#define VER_LESS_EQUAL 5
+#define VER_AND 6
+#define VER_OR 7
-typedef VOID
-(NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)(
- IN PVOID Context,
- IN PCPE_EXCEPTION CmcLog);
+#define VER_CONDITION_MASK 7
+#define VER_NUM_BITS_PER_CONDITION_MASK 3
-typedef struct _CMC_DRIVER_INFO {
- PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback;
- PKDEFERRED_ROUTINE DpcCallback;
- PVOID DeviceContext;
-} CMC_DRIVER_INFO, *PCMC_DRIVER_INFO;
+typedef struct _IMAGE_INFO {
+ _ANONYMOUS_UNION union {
+ ULONG Properties;
+ _ANONYMOUS_STRUCT struct {
+ ULONG ImageAddressingMode:8;
+ ULONG SystemModeImage:1;
+ ULONG ImageMappedToAllPids:1;
+ ULONG ExtendedInfoPresent:1;
+ ULONG Reserved:22;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ PVOID ImageBase;
+ ULONG ImageSelector;
+ SIZE_T ImageSize;
+ ULONG ImageSectionNumber;
+} IMAGE_INFO, *PIMAGE_INFO;
-typedef struct _CPE_DRIVER_INFO {
- PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback;
- PKDEFERRED_ROUTINE DpcCallback;
- PVOID DeviceContext;
-} CPE_DRIVER_INFO, *PCPE_DRIVER_INFO;
+#define IMAGE_ADDRESSING_MODE_32BIT 3
-#endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
+typedef enum _BUS_DATA_TYPE {
+ ConfigurationSpaceUndefined = -1,
+ Cmos,
+ EisaConfiguration,
+ Pos,
+ CbusConfiguration,
+ PCIConfiguration,
+ VMEConfiguration,
+ NuBusConfiguration,
+ PCMCIAConfiguration,
+ MPIConfiguration,
+ MPSAConfiguration,
+ PNPISAConfiguration,
+ SgiInternalConfiguration,
+ MaximumBusDataType
+} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
-#if defined(_IA64_)
+typedef struct _NT_TIB {
+ struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+ PVOID StackBase;
+ PVOID StackLimit;
+ PVOID SubSystemTib;
+ _ANONYMOUS_UNION union {
+ PVOID FiberData;
+ ULONG Version;
+ } DUMMYUNIONNAME;
+ PVOID ArbitraryUserPointer;
+ struct _NT_TIB *Self;
+} NT_TIB, *PNT_TIB;
-typedef NTSTATUS
-(*HALSENDCROSSPARTITIONIPI)(
- IN USHORT ProcessorID,
- IN UCHAR HardwareVector);
+typedef struct _NT_TIB32 {
+ ULONG ExceptionList;
+ ULONG StackBase;
+ ULONG StackLimit;
+ ULONG SubSystemTib;
+ __GNU_EXTENSION union {
+ ULONG FiberData;
+ ULONG Version;
+ };
+ ULONG ArbitraryUserPointer;
+ ULONG Self;
+} NT_TIB32,*PNT_TIB32;
-typedef NTSTATUS
-(*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)(
- OUT PULONG Vector,
- OUT PKIRQL Irql,
- IN OUT PGROUP_AFFINITY Affinity,
- OUT PUCHAR HardwareVector);
+typedef struct _NT_TIB64 {
+ ULONG64 ExceptionList;
+ ULONG64 StackBase;
+ ULONG64 StackLimit;
+ ULONG64 SubSystemTib;
+ __GNU_EXTENSION union {
+ ULONG64 FiberData;
+ ULONG Version;
+ };
+ ULONG64 ArbitraryUserPointer;
+ ULONG64 Self;
+} NT_TIB64,*PNT_TIB64;
-typedef VOID
-(*HALFREECROSSPARTITIONINTERRUPTVECTOR)(
- IN ULONG Vector,
- IN PGROUP_AFFINITY Affinity);
+typedef enum _PROCESSINFOCLASS {
+ ProcessBasicInformation,
+ ProcessQuotaLimits,
+ ProcessIoCounters,
+ ProcessVmCounters,
+ ProcessTimes,
+ ProcessBasePriority,
+ ProcessRaisePriority,
+ ProcessDebugPort,
+ ProcessExceptionPort,
+ ProcessAccessToken,
+ ProcessLdtInformation,
+ ProcessLdtSize,
+ ProcessDefaultHardErrorMode,
+ ProcessIoPortHandlers,
+ ProcessPooledUsageAndLimits,
+ ProcessWorkingSetWatch,
+ ProcessUserModeIOPL,
+ ProcessEnableAlignmentFaultFixup,
+ ProcessPriorityClass,
+ ProcessWx86Information,
+ ProcessHandleCount,
+ ProcessAffinityMask,
+ ProcessPriorityBoost,
+ ProcessDeviceMap,
+ ProcessSessionInformation,
+ ProcessForegroundInformation,
+ ProcessWow64Information,
+ ProcessImageFileName,
+ ProcessLUIDDeviceMapsEnabled,
+ ProcessBreakOnTermination,
+ ProcessDebugObjectHandle,
+ ProcessDebugFlags,
+ ProcessHandleTracing,
+ ProcessIoPriority,
+ ProcessExecuteFlags,
+ ProcessTlsInformation,
+ ProcessCookie,
+ ProcessImageInformation,
+ ProcessCycleTime,
+ ProcessPagePriority,
+ ProcessInstrumentationCallback,
+ ProcessThreadStackAllocation,
+ ProcessWorkingSetWatchEx,
+ ProcessImageFileNameWin32,
+ ProcessImageFileMapping,
+ ProcessAffinityUpdateMode,
+ ProcessMemoryAllocationMode,
+ ProcessGroupInformation,
+ ProcessTokenVirtualizationEnabled,
+ ProcessConsoleHostProcess,
+ ProcessWindowInformation,
+ MaxProcessInfoClass
+} PROCESSINFOCLASS;
-typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE {
- HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi;
- HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector;
- HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector;
-} HAL_CROSS_PARTITION_IPI_INTERFACE;
+typedef enum _THREADINFOCLASS {
+ ThreadBasicInformation,
+ ThreadTimes,
+ ThreadPriority,
+ ThreadBasePriority,
+ ThreadAffinityMask,
+ ThreadImpersonationToken,
+ ThreadDescriptorTableEntry,
+ ThreadEnableAlignmentFaultFixup,
+ ThreadEventPair_Reusable,
+ ThreadQuerySetWin32StartAddress,
+ ThreadZeroTlsCell,
+ ThreadPerformanceCount,
+ ThreadAmILastThread,
+ ThreadIdealProcessor,
+ ThreadPriorityBoost,
+ ThreadSetTlsArrayAddress,
+ ThreadIsIoPending,
+ ThreadHideFromDebugger,
+ ThreadBreakOnTermination,
+ ThreadSwitchLegacyState,
+ ThreadIsTerminated,
+ ThreadLastSystemCall,
+ ThreadIoPriority,
+ ThreadCycleTime,
+ ThreadPagePriority,
+ ThreadActualBasePriority,
+ ThreadTebInformation,
+ ThreadCSwitchMon,
+ ThreadCSwitchPmu,
+ ThreadWow64Context,
+ ThreadGroupInformation,
+ ThreadUmsInformation,
+ ThreadCounterProfiling,
+ ThreadIdealProcessorEx,
+ MaxThreadInfoClass
+} THREADINFOCLASS;
-#define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
- FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
- HalFreeCrossPartitionInterruptVector)
+typedef struct _PROCESS_BASIC_INFORMATION {
+ NTSTATUS ExitStatus;
+ struct _PEB *PebBaseAddress;
+ ULONG_PTR AffinityMask;
+ KPRIORITY BasePriority;
+ ULONG_PTR UniqueProcessId;
+ ULONG_PTR InheritedFromUniqueProcessId;
+} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
-#endif /* defined(_IA64_) */
+typedef struct _PROCESS_WS_WATCH_INFORMATION {
+ PVOID FaultingPc;
+ PVOID FaultingVa;
+} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
-typedef struct _HAL_PLATFORM_INFORMATION {
- ULONG PlatformFlags;
-} HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION;
+typedef struct _PROCESS_DEVICEMAP_INFORMATION {
+ __GNU_EXTENSION union {
+ struct {
+ HANDLE DirectoryHandle;
+ } Set;
+ struct {
+ ULONG DriveMap;
+ UCHAR DriveType[32];
+ } Query;
+ };
+} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
-#define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
-#define HAL_PLATFORM_DISABLE_PTCG 0x04L
-#define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
-#define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
-#define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L
+typedef struct _KERNEL_USER_TIMES {
+ LARGE_INTEGER CreateTime;
+ LARGE_INTEGER ExitTime;
+ LARGE_INTEGER KernelTime;
+ LARGE_INTEGER UserTime;
+} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
-/******************************************************************************
- * Kernel Types *
- ******************************************************************************/
+typedef struct _PROCESS_ACCESS_TOKEN {
+ HANDLE Token;
+ HANDLE Thread;
+} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
-#define NX_SUPPORT_POLICY_ALWAYSOFF 0
-#define NX_SUPPORT_POLICY_ALWAYSON 1
-#define NX_SUPPORT_POLICY_OPTIN 2
-#define NX_SUPPORT_POLICY_OPTOUT 3
+typedef struct _PROCESS_SESSION_INFORMATION {
+ ULONG SessionId;
+} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
-typedef VOID
-(NTAPI *PEXPAND_STACK_CALLOUT)(
- IN PVOID Parameter OPTIONAL);
+typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
+ IoQueryDeviceIdentifier = 0,
+ IoQueryDeviceConfigurationData,
+ IoQueryDeviceComponentInformation,
+ IoQueryDeviceMaxData
+} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
+
+typedef struct _DISK_SIGNATURE {
+ ULONG PartitionStyle;
+ _ANONYMOUS_UNION union {
+ struct {
+ ULONG Signature;
+ ULONG CheckSum;
+ } Mbr;
+ struct {
+ GUID DiskId;
+ } Gpt;
+ } DUMMYUNIONNAME;
+} DISK_SIGNATURE, *PDISK_SIGNATURE;
+
+typedef ULONG_PTR
+(NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
+ IN PVOID Context);
+
+typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
+ PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
+ PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
+} DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
+
+#define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
+#define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
+#define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
+#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
+#define DRIVER_VERIFIER_IO_CHECKING 0x0010
typedef VOID
(NTAPI *PTIMER_APC_ROUTINE)(
IN ULONG TimerLowValue,
IN LONG TimerHighValue);
-typedef enum _TIMER_SET_INFORMATION_CLASS {
- TimerSetCoalescableTimer,
- MaxTimerInfoClass
-} TIMER_SET_INFORMATION_CLASS;
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO {
- IN LARGE_INTEGER DueTime;
- IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL;
- IN PVOID TimerContext OPTIONAL;
- IN struct _COUNTED_REASON_CONTEXT *WakeContext OPTIONAL;
- IN ULONG Period OPTIONAL;
- IN ULONG TolerableDelay;
- OUT PBOOLEAN PreviousState OPTIONAL;
-} TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO;
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-#define XSTATE_LEGACY_FLOATING_POINT 0
-#define XSTATE_LEGACY_SSE 1
-#define XSTATE_GSSE 2
-
-#define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
-#define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
-#define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
-#define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE))
-
-#define MAXIMUM_XSTATE_FEATURES 64
-
-typedef struct _XSTATE_FEATURE {
- ULONG Offset;
- ULONG Size;
-} XSTATE_FEATURE, *PXSTATE_FEATURE;
-
-typedef struct _XSTATE_CONFIGURATION {
- ULONG64 EnabledFeatures;
- ULONG Size;
- ULONG OptimizedSave:1;
- XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
-} XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION;
-
-#define MAX_WOW64_SHARED_ENTRIES 16
-
-typedef struct _KUSER_SHARED_DATA {
- ULONG TickCountLowDeprecated;
- ULONG TickCountMultiplier;
- volatile KSYSTEM_TIME InterruptTime;
- volatile KSYSTEM_TIME SystemTime;
- volatile KSYSTEM_TIME TimeZoneBias;
- USHORT ImageNumberLow;
- USHORT ImageNumberHigh;
- WCHAR NtSystemRoot[260];
- ULONG MaxStackTraceDepth;
- ULONG CryptoExponent;
- ULONG TimeZoneId;
- ULONG LargePageMinimum;
- ULONG Reserved2[7];
- NT_PRODUCT_TYPE NtProductType;
- BOOLEAN ProductTypeIsValid;
- ULONG NtMajorVersion;
- ULONG NtMinorVersion;
- BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
- ULONG Reserved1;
- ULONG Reserved3;
- volatile ULONG TimeSlip;
- ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
- ULONG AltArchitecturePad[1];
- LARGE_INTEGER SystemExpirationDate;
- ULONG SuiteMask;
- BOOLEAN KdDebuggerEnabled;
+typedef struct _KUSER_SHARED_DATA
+{
+ ULONG TickCountLowDeprecated;
+ ULONG TickCountMultiplier;
+ volatile KSYSTEM_TIME InterruptTime;
+ volatile KSYSTEM_TIME SystemTime;
+ volatile KSYSTEM_TIME TimeZoneBias;
+ USHORT ImageNumberLow;
+ USHORT ImageNumberHigh;
+ WCHAR NtSystemRoot[260];
+ ULONG MaxStackTraceDepth;
+ ULONG CryptoExponent;
+ ULONG TimeZoneId;
+ ULONG LargePageMinimum;
+ ULONG Reserved2[7];
+ NT_PRODUCT_TYPE NtProductType;
+ BOOLEAN ProductTypeIsValid;
+ ULONG NtMajorVersion;
+ ULONG NtMinorVersion;
+ BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
+ ULONG Reserved1;
+ ULONG Reserved3;
+ volatile ULONG TimeSlip;
+ ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
+ ULONG AltArchitecturePad[1];
+ LARGE_INTEGER SystemExpirationDate;
+ ULONG SuiteMask;
+ BOOLEAN KdDebuggerEnabled;
#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
- UCHAR NXSupportPolicy;
+ UCHAR NXSupportPolicy;
#endif
- volatile ULONG ActiveConsoleId;
- volatile ULONG DismountCount;
- ULONG ComPlusPackage;
- ULONG LastSystemRITEventTickCount;
- ULONG NumberOfPhysicalPages;
- BOOLEAN SafeBootMode;
+ volatile ULONG ActiveConsoleId;
+ volatile ULONG DismountCount;
+ ULONG ComPlusPackage;
+ ULONG LastSystemRITEventTickCount;
+ ULONG NumberOfPhysicalPages;
+ BOOLEAN SafeBootMode;
#if (NTDDI_VERSION >= NTDDI_WIN7)
- union {
- UCHAR TscQpcData;
- struct {
- UCHAR TscQpcEnabled:1;
- UCHAR TscQpcSpareFlag:1;
- UCHAR TscQpcShift:6;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- UCHAR TscQpcPad[2];
+ union {
+ UCHAR TscQpcData;
+ struct {
+ UCHAR TscQpcEnabled:1;
+ UCHAR TscQpcSpareFlag:1;
+ UCHAR TscQpcShift:6;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ UCHAR TscQpcPad[2];
#endif
#if (NTDDI_VERSION >= NTDDI_VISTA)
- union {
- ULONG SharedDataFlags;
- struct {
- ULONG DbgErrorPortPresent:1;
- ULONG DbgElevationEnabled:1;
- ULONG DbgVirtEnabled:1;
- ULONG DbgInstallerDetectEnabled:1;
- ULONG DbgSystemDllRelocated:1;
- ULONG DbgDynProcessorEnabled:1;
- ULONG DbgSEHValidationEnabled:1;
- ULONG SpareBits:25;
- } DUMMYSTRUCTNAME2;
- } DUMMYUNIONNAME2;
+ union {
+ ULONG SharedDataFlags;
+ struct {
+ ULONG DbgErrorPortPresent:1;
+ ULONG DbgElevationEnabled:1;
+ ULONG DbgVirtEnabled:1;
+ ULONG DbgInstallerDetectEnabled:1;
+ ULONG DbgSystemDllRelocated:1;
+ ULONG DbgDynProcessorEnabled:1;
+ ULONG DbgSEHValidationEnabled:1;
+ ULONG SpareBits:25;
+ } DUMMYSTRUCTNAME2;
+ } DUMMYUNIONNAME2;
#else
- ULONG TraceLogging;
+ ULONG TraceLogging;
#endif
- ULONG DataFlagsPad[1];
- ULONGLONG TestRetInstruction;
- ULONG SystemCall;
- ULONG SystemCallReturn;
- ULONGLONG SystemCallPad[3];
- _ANONYMOUS_UNION union {
- volatile KSYSTEM_TIME TickCount;
- volatile ULONG64 TickCountQuad;
- _ANONYMOUS_STRUCT struct {
- ULONG ReservedTickCountOverlay[3];
- ULONG TickCountPad[1];
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME3;
- ULONG Cookie;
- ULONG CookiePad[1];
+ ULONG DataFlagsPad[1];
+ ULONGLONG TestRetInstruction;
+ ULONG SystemCall;
+ ULONG SystemCallReturn;
+ ULONGLONG SystemCallPad[3];
+ _ANONYMOUS_UNION union {
+ volatile KSYSTEM_TIME TickCount;
+ volatile ULONG64 TickCountQuad;
+ _ANONYMOUS_STRUCT struct {
+ ULONG ReservedTickCountOverlay[3];
+ ULONG TickCountPad[1];
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME3;
+ ULONG Cookie;
+ ULONG CookiePad[1];
#if (NTDDI_VERSION >= NTDDI_WS03)
- LONGLONG ConsoleSessionForegroundProcessId;
- ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
+ LONGLONG ConsoleSessionForegroundProcessId;
+ ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
#endif
#if (NTDDI_VERSION >= NTDDI_VISTA)
#if (NTDDI_VERSION >= NTDDI_WIN7)
- USHORT UserModeGlobalLogger[16];
+ USHORT UserModeGlobalLogger[16];
#else
- USHORT UserModeGlobalLogger[8];
- ULONG HeapTracingPid[2];
- ULONG CritSecTracingPid[2];
+ USHORT UserModeGlobalLogger[8];
+ ULONG HeapTracingPid[2];
+ ULONG CritSecTracingPid[2];
#endif
- ULONG ImageFileExecutionOptions;
+ ULONG ImageFileExecutionOptions;
#if (NTDDI_VERSION >= NTDDI_VISTASP1)
- ULONG LangGenerationCount;
+ ULONG LangGenerationCount;
#else
- /* 4 bytes padding */
+ /* 4 bytes padding */
#endif
- ULONGLONG Reserved5;
- volatile ULONG64 InterruptTimeBias;
+ ULONGLONG Reserved5;
+ volatile ULONG64 InterruptTimeBias;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN7)
- volatile ULONG64 TscQpcBias;
- volatile ULONG ActiveProcessorCount;
- volatile USHORT ActiveGroupCount;
- USHORT Reserved4;
- volatile ULONG AitSamplingValue;
- volatile ULONG AppCompatFlag;
- ULONGLONG SystemDllNativeRelocation;
- ULONG SystemDllWowRelocation;
- ULONG XStatePad[1];
- XSTATE_CONFIGURATION XState;
+ volatile ULONG64 TscQpcBias;
+ volatile ULONG ActiveProcessorCount;
+ volatile USHORT ActiveGroupCount;
+ USHORT Reserved4;
+ volatile ULONG AitSamplingValue;
+ volatile ULONG AppCompatFlag;
+ ULONGLONG SystemDllNativeRelocation;
+ ULONG SystemDllWowRelocation;
+ ULONG XStatePad[1];
+ XSTATE_CONFIGURATION XState;
#endif
} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-extern NTSYSAPI volatile CCHAR KeNumberProcessors;
-#elif (NTDDI_VERSION >= NTDDI_WINXP)
-extern NTSYSAPI CCHAR KeNumberProcessors;
+extern NTKERNELAPI PVOID MmHighestUserAddress;
+extern NTKERNELAPI PVOID MmSystemRangeStart;
+extern NTKERNELAPI ULONG MmUserProbeAddress;
+
+
+#ifdef _X86_
+
+#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
+#define MM_SYSTEM_RANGE_START MmSystemRangeStart
+#if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
+#define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
+extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_;
#else
-extern PCCHAR KeNumberProcessors;
+#define MM_USER_PROBE_ADDRESS MmUserProbeAddress
+#endif
+#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
+#define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
+#define MM_SYSTEM_SPACE_END 0xFFFFFFFF
+#if !defined (_X86PAE_)
+#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
+#else
+#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
#endif
+#define KeGetPcr() PCR
-/******************************************************************************
- * Kernel Debugger Types *
- ******************************************************************************/
-typedef struct _DEBUG_DEVICE_ADDRESS {
- UCHAR Type;
- BOOLEAN Valid;
- UCHAR Reserved[2];
- PUCHAR TranslatedAddress;
- ULONG Length;
-} DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS;
+#define KERNEL_STACK_SIZE 12288
+#define KERNEL_LARGE_STACK_SIZE 61440
+#define KERNEL_LARGE_STACK_COMMIT 12288
-typedef struct _DEBUG_MEMORY_REQUIREMENTS {
- PHYSICAL_ADDRESS Start;
- PHYSICAL_ADDRESS MaxEnd;
- PVOID VirtualAddress;
- ULONG Length;
- BOOLEAN Cached;
- BOOLEAN Aligned;
-} DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS;
+#define SIZE_OF_80387_REGISTERS 80
-typedef struct _DEBUG_DEVICE_DESCRIPTOR {
- ULONG Bus;
- ULONG Slot;
- USHORT Segment;
- USHORT VendorID;
- USHORT DeviceID;
- UCHAR BaseClass;
- UCHAR SubClass;
- UCHAR ProgIf;
- BOOLEAN Initialized;
- BOOLEAN Configured;
- DEBUG_DEVICE_ADDRESS BaseAddress[6];
- DEBUG_MEMORY_REQUIREMENTS Memory;
-} DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR;
+#define PCR_MINOR_VERSION 1
+#define PCR_MAJOR_VERSION 1
-typedef NTSTATUS
-(NTAPI *pKdSetupPciDeviceForDebugging)(
- IN PVOID LoaderBlock OPTIONAL,
- IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
+#if !defined(RC_INVOKED)
-typedef NTSTATUS
-(NTAPI *pKdReleasePciDeviceForDebugging)(
- IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
+#define CONTEXT_i386 0x10000
+#define CONTEXT_i486 0x10000
+#define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
+#define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
+#define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
+#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
-typedef PVOID
-(NTAPI *pKdGetAcpiTablePhase0)(
- IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
- IN ULONG Signature);
+#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
-typedef VOID
-(NTAPI *pKdCheckPowerButton)(
- VOID);
+#endif /* !defined(RC_INVOKED) */
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-typedef PVOID
-(NTAPI *pKdMapPhysicalMemory64)(
- IN PHYSICAL_ADDRESS PhysicalAddress,
- IN ULONG NumberPages,
- IN BOOLEAN FlushCurrentTLB);
+typedef struct _KPCR {
+ union {
+ NT_TIB NtTib;
+ struct {
+ struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
+ PVOID Used_StackBase;
+ PVOID Spare2;
+ PVOID TssCopy;
+ ULONG ContextSwitches;
+ KAFFINITY SetMemberCopy;
+ PVOID Used_Self;
+ };
+ };
+ struct _KPCR *SelfPcr;
+ struct _KPRCB *Prcb;
+ KIRQL Irql;
+ ULONG IRR;
+ ULONG IrrActive;
+ ULONG IDR;
+ PVOID KdVersionBlock;
+ struct _KIDTENTRY *IDT;
+ struct _KGDTENTRY *GDT;
+ struct _KTSS *TSS;
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ KAFFINITY SetMember;
+ ULONG StallScaleFactor;
+ UCHAR SpareUnused;
+ UCHAR Number;
+ UCHAR Spare0;
+ UCHAR SecondLevelCacheAssociativity;
+ ULONG VdmAlert;
+ ULONG KernelReserved[14];
+ ULONG SecondLevelCacheSize;
+ ULONG HalReserved[16];
+} KPCR, *PKPCR;
-typedef VOID
-(NTAPI *pKdUnmapVirtualAddress)(
- IN PVOID VirtualAddress,
- IN ULONG NumberPages,
- IN BOOLEAN FlushCurrentTLB);
-#else
-typedef PVOID
-(NTAPI *pKdMapPhysicalMemory64)(
- IN PHYSICAL_ADDRESS PhysicalAddress,
- IN ULONG NumberPages);
+FORCEINLINE
+ULONG
+KeGetCurrentProcessorNumber(VOID)
+{
+ return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number));
+}
-typedef VOID
-(NTAPI *pKdUnmapVirtualAddress)(
- IN PVOID VirtualAddress,
- IN ULONG NumberPages);
-#endif
+typedef struct _FLOATING_SAVE_AREA {
+ ULONG ControlWord;
+ ULONG StatusWord;
+ ULONG TagWord;
+ ULONG ErrorOffset;
+ ULONG ErrorSelector;
+ ULONG DataOffset;
+ ULONG DataSelector;
+ UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
+ ULONG Cr0NpxState;
+} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
-typedef ULONG
-(NTAPI *pKdGetPciDataByOffset)(
- IN ULONG BusNumber,
- IN ULONG SlotNumber,
- OUT PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
+#include "pshpack4.h"
+typedef struct _CONTEXT {
+ ULONG ContextFlags;
+ ULONG Dr0;
+ ULONG Dr1;
+ ULONG Dr2;
+ ULONG Dr3;
+ ULONG Dr6;
+ ULONG Dr7;
+ FLOATING_SAVE_AREA FloatSave;
+ ULONG SegGs;
+ ULONG SegFs;
+ ULONG SegEs;
+ ULONG SegDs;
+ ULONG Edi;
+ ULONG Esi;
+ ULONG Ebx;
+ ULONG Edx;
+ ULONG Ecx;
+ ULONG Eax;
+ ULONG Ebp;
+ ULONG Eip;
+ ULONG SegCs;
+ ULONG EFlags;
+ ULONG Esp;
+ ULONG SegSs;
+ UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
+} CONTEXT;
+#include "poppack.h"
-typedef ULONG
-(NTAPI *pKdSetPciDataByOffset)(
- IN ULONG BusNumber,
- IN ULONG SlotNumber,
- IN PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
-/******************************************************************************
- * Memory manager Types *
- ******************************************************************************/
+#endif /* _X86_ */
-typedef struct _PHYSICAL_MEMORY_RANGE {
- PHYSICAL_ADDRESS BaseAddress;
- LARGE_INTEGER NumberOfBytes;
-} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
+#ifdef _AMD64_
-typedef NTSTATUS
-(NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)(
- IN PMDL DestinationMdl,
- IN PMDL SourceMdl,
- IN PVOID Context);
-
-typedef enum _MM_ROTATE_DIRECTION {
- MmToFrameBuffer,
- MmToFrameBufferNoCopy,
- MmToRegularMemory,
- MmToRegularMemoryNoCopy,
- MmMaximumRotateDirection
-} MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION;
-
-
-/******************************************************************************
- * Process Manager Types *
- ******************************************************************************/
-
-#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
-#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
-#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
-#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
-#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
-
-typedef struct _QUOTA_LIMITS {
- SIZE_T PagedPoolLimit;
- SIZE_T NonPagedPoolLimit;
- SIZE_T MinimumWorkingSetSize;
- SIZE_T MaximumWorkingSetSize;
- SIZE_T PagefileLimit;
- LARGE_INTEGER TimeLimit;
-} QUOTA_LIMITS, *PQUOTA_LIMITS;
-
-typedef union _RATE_QUOTA_LIMIT {
- ULONG RateData;
- struct {
- ULONG RatePercent:7;
- ULONG Reserved0:25;
- } DUMMYSTRUCTNAME;
-} RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT;
-
-typedef struct _QUOTA_LIMITS_EX {
- SIZE_T PagedPoolLimit;
- SIZE_T NonPagedPoolLimit;
- SIZE_T MinimumWorkingSetSize;
- SIZE_T MaximumWorkingSetSize;
- SIZE_T PagefileLimit;
- LARGE_INTEGER TimeLimit;
- SIZE_T WorkingSetLimit;
- SIZE_T Reserved2;
- SIZE_T Reserved3;
- SIZE_T Reserved4;
- ULONG Flags;
- RATE_QUOTA_LIMIT CpuRateLimit;
-} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
-
-typedef struct _IO_COUNTERS {
- ULONGLONG ReadOperationCount;
- ULONGLONG WriteOperationCount;
- ULONGLONG OtherOperationCount;
- ULONGLONG ReadTransferCount;
- ULONGLONG WriteTransferCount;
- ULONGLONG OtherTransferCount;
-} IO_COUNTERS, *PIO_COUNTERS;
-
-typedef struct _VM_COUNTERS {
- SIZE_T PeakVirtualSize;
- SIZE_T VirtualSize;
- ULONG PageFaultCount;
- SIZE_T PeakWorkingSetSize;
- SIZE_T WorkingSetSize;
- SIZE_T QuotaPeakPagedPoolUsage;
- SIZE_T QuotaPagedPoolUsage;
- SIZE_T QuotaPeakNonPagedPoolUsage;
- SIZE_T QuotaNonPagedPoolUsage;
- SIZE_T PagefileUsage;
- SIZE_T PeakPagefileUsage;
-} VM_COUNTERS, *PVM_COUNTERS;
-
-typedef struct _VM_COUNTERS_EX {
- SIZE_T PeakVirtualSize;
- SIZE_T VirtualSize;
- ULONG PageFaultCount;
- SIZE_T PeakWorkingSetSize;
- SIZE_T WorkingSetSize;
- SIZE_T QuotaPeakPagedPoolUsage;
- SIZE_T QuotaPagedPoolUsage;
- SIZE_T QuotaPeakNonPagedPoolUsage;
- SIZE_T QuotaNonPagedPoolUsage;
- SIZE_T PagefileUsage;
- SIZE_T PeakPagefileUsage;
- SIZE_T PrivateUsage;
-} VM_COUNTERS_EX, *PVM_COUNTERS_EX;
-
-#define MAX_HW_COUNTERS 16
-#define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
-
-typedef enum _HARDWARE_COUNTER_TYPE {
- PMCCounter,
- MaxHardwareCounterType
-} HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE;
-
-typedef struct _HARDWARE_COUNTER {
- HARDWARE_COUNTER_TYPE Type;
- ULONG Reserved;
- ULONG64 Index;
-} HARDWARE_COUNTER, *PHARDWARE_COUNTER;
-
-typedef struct _POOLED_USAGE_AND_LIMITS {
- SIZE_T PeakPagedPoolUsage;
- SIZE_T PagedPoolUsage;
- SIZE_T PagedPoolLimit;
- SIZE_T PeakNonPagedPoolUsage;
- SIZE_T NonPagedPoolUsage;
- SIZE_T NonPagedPoolLimit;
- SIZE_T PeakPagefileUsage;
- SIZE_T PagefileUsage;
- SIZE_T PagefileLimit;
-} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
-
-typedef struct _PROCESS_ACCESS_TOKEN {
- HANDLE Token;
- HANDLE Thread;
-} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
-
-#define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
-#define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
-
-typedef struct _PROCESS_EXCEPTION_PORT {
- IN HANDLE ExceptionPortHandle;
- IN OUT ULONG StateFlags;
-} PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT;
-
-typedef VOID
-(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)(
- IN HANDLE ParentId,
- IN HANDLE ProcessId,
- IN BOOLEAN Create);
-
-typedef struct _PS_CREATE_NOTIFY_INFO {
- IN SIZE_T Size;
- union {
- IN ULONG Flags;
- struct {
- IN ULONG FileOpenNameAvailable:1;
- IN ULONG Reserved:31;
- };
- };
- IN HANDLE ParentProcessId;
- IN CLIENT_ID CreatingThreadId;
- IN OUT struct _FILE_OBJECT *FileObject;
- IN PCUNICODE_STRING ImageFileName;
- IN PCUNICODE_STRING CommandLine OPTIONAL;
- IN OUT NTSTATUS CreationStatus;
-} PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;
-
-typedef VOID
-(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)(
- IN OUT PEPROCESS Process,
- IN HANDLE ProcessId,
- IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL);
-
-typedef VOID
-(NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)(
- IN HANDLE ProcessId,
- IN HANDLE ThreadId,
- IN BOOLEAN Create);
-
-#define IMAGE_ADDRESSING_MODE_32BIT 3
-
-typedef struct _IMAGE_INFO {
- _ANONYMOUS_UNION union {
- ULONG Properties;
- _ANONYMOUS_STRUCT struct {
- ULONG ImageAddressingMode:8;
- ULONG SystemModeImage:1;
- ULONG ImageMappedToAllPids:1;
- ULONG ExtendedInfoPresent:1;
- ULONG Reserved:21;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- PVOID ImageBase;
- ULONG ImageSelector;
- SIZE_T ImageSize;
- ULONG ImageSectionNumber;
-} IMAGE_INFO, *PIMAGE_INFO;
-
-typedef struct _IMAGE_INFO_EX {
- SIZE_T Size;
- IMAGE_INFO ImageInfo;
- struct _FILE_OBJECT *FileObject;
-} IMAGE_INFO_EX, *PIMAGE_INFO_EX;
-
-typedef VOID
-(NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(
- IN PUNICODE_STRING FullImageName,
- IN HANDLE ProcessId,
- IN PIMAGE_INFO ImageInfo);
-
-#define THREAD_CSWITCH_PMU_DISABLE FALSE
-#define THREAD_CSWITCH_PMU_ENABLE TRUE
-
-#define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
-
-#define PROCESS_HANDLE_TRACING_MAX_STACKS 16
-
-typedef struct _NT_TIB {
- struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
- PVOID StackBase;
- PVOID StackLimit;
- PVOID SubSystemTib;
- _ANONYMOUS_UNION union {
- PVOID FiberData;
- ULONG Version;
- } DUMMYUNIONNAME;
- PVOID ArbitraryUserPointer;
- struct _NT_TIB *Self;
-} NT_TIB, *PNT_TIB;
-
-typedef struct _NT_TIB32 {
- ULONG ExceptionList;
- ULONG StackBase;
- ULONG StackLimit;
- ULONG SubSystemTib;
- __GNU_EXTENSION union {
- ULONG FiberData;
- ULONG Version;
- };
- ULONG ArbitraryUserPointer;
- ULONG Self;
-} NT_TIB32,*PNT_TIB32;
-
-typedef struct _NT_TIB64 {
- ULONG64 ExceptionList;
- ULONG64 StackBase;
- ULONG64 StackLimit;
- ULONG64 SubSystemTib;
- __GNU_EXTENSION union {
- ULONG64 FiberData;
- ULONG Version;
- };
- ULONG64 ArbitraryUserPointer;
- ULONG64 Self;
-} NT_TIB64,*PNT_TIB64;
-
-typedef enum _PROCESSINFOCLASS {
- ProcessBasicInformation,
- ProcessQuotaLimits,
- ProcessIoCounters,
- ProcessVmCounters,
- ProcessTimes,
- ProcessBasePriority,
- ProcessRaisePriority,
- ProcessDebugPort,
- ProcessExceptionPort,
- ProcessAccessToken,
- ProcessLdtInformation,
- ProcessLdtSize,
- ProcessDefaultHardErrorMode,
- ProcessIoPortHandlers,
- ProcessPooledUsageAndLimits,
- ProcessWorkingSetWatch,
- ProcessUserModeIOPL,
- ProcessEnableAlignmentFaultFixup,
- ProcessPriorityClass,
- ProcessWx86Information,
- ProcessHandleCount,
- ProcessAffinityMask,
- ProcessPriorityBoost,
- ProcessDeviceMap,
- ProcessSessionInformation,
- ProcessForegroundInformation,
- ProcessWow64Information,
- ProcessImageFileName,
- ProcessLUIDDeviceMapsEnabled,
- ProcessBreakOnTermination,
- ProcessDebugObjectHandle,
- ProcessDebugFlags,
- ProcessHandleTracing,
- ProcessIoPriority,
- ProcessExecuteFlags,
- ProcessTlsInformation,
- ProcessCookie,
- ProcessImageInformation,
- ProcessCycleTime,
- ProcessPagePriority,
- ProcessInstrumentationCallback,
- ProcessThreadStackAllocation,
- ProcessWorkingSetWatchEx,
- ProcessImageFileNameWin32,
- ProcessImageFileMapping,
- ProcessAffinityUpdateMode,
- ProcessMemoryAllocationMode,
- ProcessGroupInformation,
- ProcessTokenVirtualizationEnabled,
- ProcessConsoleHostProcess,
- ProcessWindowInformation,
- MaxProcessInfoClass
-} PROCESSINFOCLASS;
-
-typedef enum _THREADINFOCLASS {
- ThreadBasicInformation,
- ThreadTimes,
- ThreadPriority,
- ThreadBasePriority,
- ThreadAffinityMask,
- ThreadImpersonationToken,
- ThreadDescriptorTableEntry,
- ThreadEnableAlignmentFaultFixup,
- ThreadEventPair_Reusable,
- ThreadQuerySetWin32StartAddress,
- ThreadZeroTlsCell,
- ThreadPerformanceCount,
- ThreadAmILastThread,
- ThreadIdealProcessor,
- ThreadPriorityBoost,
- ThreadSetTlsArrayAddress,
- ThreadIsIoPending,
- ThreadHideFromDebugger,
- ThreadBreakOnTermination,
- ThreadSwitchLegacyState,
- ThreadIsTerminated,
- ThreadLastSystemCall,
- ThreadIoPriority,
- ThreadCycleTime,
- ThreadPagePriority,
- ThreadActualBasePriority,
- ThreadTebInformation,
- ThreadCSwitchMon,
- ThreadCSwitchPmu,
- ThreadWow64Context,
- ThreadGroupInformation,
- ThreadUmsInformation,
- ThreadCounterProfiling,
- ThreadIdealProcessorEx,
- MaxThreadInfoClass
-} THREADINFOCLASS;
-
-typedef struct _PAGE_PRIORITY_INFORMATION {
- ULONG PagePriority;
-} PAGE_PRIORITY_INFORMATION, *PPAGE_PRIORITY_INFORMATION;
-
-typedef struct _PROCESS_WS_WATCH_INFORMATION {
- PVOID FaultingPc;
- PVOID FaultingVa;
-} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
-
-typedef struct _PROCESS_BASIC_INFORMATION {
- NTSTATUS ExitStatus;
- struct _PEB *PebBaseAddress;
- ULONG_PTR AffinityMask;
- KPRIORITY BasePriority;
- ULONG_PTR UniqueProcessId;
- ULONG_PTR InheritedFromUniqueProcessId;
-} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
-
-typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {
- SIZE_T Size;
- PROCESS_BASIC_INFORMATION BasicInfo;
- union {
- ULONG Flags;
- struct {
- ULONG IsProtectedProcess:1;
- ULONG IsWow64Process:1;
- ULONG IsProcessDeleting:1;
- ULONG IsCrossSessionCreate:1;
- ULONG SpareBits:28;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
-} PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION;
-
-typedef struct _PROCESS_DEVICEMAP_INFORMATION {
- __GNU_EXTENSION union {
- struct {
- HANDLE DirectoryHandle;
- } Set;
- struct {
- ULONG DriveMap;
- UCHAR DriveType[32];
- } Query;
- };
-} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
-
-typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX {
- union {
- struct {
- HANDLE DirectoryHandle;
- } Set;
- struct {
- ULONG DriveMap;
- UCHAR DriveType[32];
- } Query;
- } DUMMYUNIONNAME;
- ULONG Flags;
-} PROCESS_DEVICEMAP_INFORMATION_EX, *PPROCESS_DEVICEMAP_INFORMATION_EX;
-
-typedef struct _PROCESS_SESSION_INFORMATION {
- ULONG SessionId;
-} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
-
-typedef struct _PROCESS_HANDLE_TRACING_ENABLE {
- ULONG Flags;
-} PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE;
-
-typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX {
- ULONG Flags;
- ULONG TotalSlots;
-} PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX;
-
-typedef struct _PROCESS_HANDLE_TRACING_ENTRY {
- HANDLE Handle;
- CLIENT_ID ClientId;
- ULONG Type;
- PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS];
-} PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY;
-
-typedef struct _PROCESS_HANDLE_TRACING_QUERY {
- HANDLE Handle;
- ULONG TotalTraces;
- PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1];
-} PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY;
-
-extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
-
-
-/******************************************************************************
- * Runtime Library Types *
- ******************************************************************************/
-
-
-
-#ifndef _RTL_RUN_ONCE_DEF
-#define _RTL_RUN_ONCE_DEF
-
-#define RTL_RUN_ONCE_INIT {0}
-
-#define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
-#define RTL_RUN_ONCE_ASYNC 0x00000002UL
-#define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
-
-#define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
-
-#define RTL_HASH_ALLOCATED_HEADER 0x00000001
-
-#define RTL_HASH_RESERVED_SIGNATURE 0
-
-/* RtlVerifyVersionInfo() ComparisonType */
-
-#define VER_EQUAL 1
-#define VER_GREATER 2
-#define VER_GREATER_EQUAL 3
-#define VER_LESS 4
-#define VER_LESS_EQUAL 5
-#define VER_AND 6
-#define VER_OR 7
-
-#define VER_CONDITION_MASK 7
-#define VER_NUM_BITS_PER_CONDITION_MASK 3
-
-/* RtlVerifyVersionInfo() TypeMask */
-
-#define VER_MINORVERSION 0x0000001
-#define VER_MAJORVERSION 0x0000002
-#define VER_BUILDNUMBER 0x0000004
-#define VER_PLATFORMID 0x0000008
-#define VER_SERVICEPACKMINOR 0x0000010
-#define VER_SERVICEPACKMAJOR 0x0000020
-#define VER_SUITENAME 0x0000040
-#define VER_PRODUCT_TYPE 0x0000080
-
-#define VER_NT_WORKSTATION 0x0000001
-#define VER_NT_DOMAIN_CONTROLLER 0x0000002
-#define VER_NT_SERVER 0x0000003
-
-#define VER_PLATFORM_WIN32s 0
-#define VER_PLATFORM_WIN32_WINDOWS 1
-#define VER_PLATFORM_WIN32_NT 2
-
-typedef union _RTL_RUN_ONCE {
- PVOID Ptr;
-} RTL_RUN_ONCE, *PRTL_RUN_ONCE;
-
-typedef ULONG /* LOGICAL */
-(NTAPI *PRTL_RUN_ONCE_INIT_FN) (
- IN OUT PRTL_RUN_ONCE RunOnce,
- IN OUT PVOID Parameter OPTIONAL,
- IN OUT PVOID *Context OPTIONAL);
-
-#endif /* _RTL_RUN_ONCE_DEF */
-
-typedef enum _TABLE_SEARCH_RESULT {
- TableEmptyTree,
- TableFoundNode,
- TableInsertAsLeft,
- TableInsertAsRight
-} TABLE_SEARCH_RESULT;
-
-typedef enum _RTL_GENERIC_COMPARE_RESULTS {
- GenericLessThan,
- GenericGreaterThan,
- GenericEqual
-} RTL_GENERIC_COMPARE_RESULTS;
-
-// Forwarder
-struct _RTL_AVL_TABLE;
-
-typedef RTL_GENERIC_COMPARE_RESULTS
-(NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
- IN struct _RTL_AVL_TABLE *Table,
- IN PVOID FirstStruct,
- IN PVOID SecondStruct);
-
-typedef PVOID
-(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
- IN struct _RTL_AVL_TABLE *Table,
- IN CLONG ByteSize);
-
-typedef VOID
-(NTAPI *PRTL_AVL_FREE_ROUTINE) (
- IN struct _RTL_AVL_TABLE *Table,
- IN PVOID Buffer);
-
-typedef NTSTATUS
-(NTAPI *PRTL_AVL_MATCH_FUNCTION) (
- IN struct _RTL_AVL_TABLE *Table,
- IN PVOID UserData,
- IN PVOID MatchData);
-
-typedef struct _RTL_BALANCED_LINKS {
- struct _RTL_BALANCED_LINKS *Parent;
- struct _RTL_BALANCED_LINKS *LeftChild;
- struct _RTL_BALANCED_LINKS *RightChild;
- CHAR Balance;
- UCHAR Reserved[3];
-} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
-
-typedef struct _RTL_AVL_TABLE {
- RTL_BALANCED_LINKS BalancedRoot;
- PVOID OrderedPointer;
- ULONG WhichOrderedElement;
- ULONG NumberGenericTableElements;
- ULONG DepthOfTree;
- PRTL_BALANCED_LINKS RestartKey;
- ULONG DeleteCount;
- PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
- PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
- PRTL_AVL_FREE_ROUTINE FreeRoutine;
- PVOID TableContext;
-} RTL_AVL_TABLE, *PRTL_AVL_TABLE;
-
-#ifndef RTL_USE_AVL_TABLES
-
-struct _RTL_GENERIC_TABLE;
-
-typedef RTL_GENERIC_COMPARE_RESULTS
-(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
- IN struct _RTL_GENERIC_TABLE *Table,
- IN PVOID FirstStruct,
- IN PVOID SecondStruct);
-
-typedef PVOID
-(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
- IN struct _RTL_GENERIC_TABLE *Table,
- IN CLONG ByteSize);
-
-typedef VOID
-(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
- IN struct _RTL_GENERIC_TABLE *Table,
- IN PVOID Buffer);
-
-typedef struct _RTL_SPLAY_LINKS {
- struct _RTL_SPLAY_LINKS *Parent;
- struct _RTL_SPLAY_LINKS *LeftChild;
- struct _RTL_SPLAY_LINKS *RightChild;
-} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
-
-typedef struct _RTL_GENERIC_TABLE {
- PRTL_SPLAY_LINKS TableRoot;
- LIST_ENTRY InsertOrderList;
- PLIST_ENTRY OrderedPointer;
- ULONG WhichOrderedElement;
- ULONG NumberGenericTableElements;
- PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
- PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
- PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
- PVOID TableContext;
-} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
-
-#endif /* !RTL_USE_AVL_TABLES */
-
-#ifdef RTL_USE_AVL_TABLES
-
-#undef PRTL_GENERIC_COMPARE_ROUTINE
-#undef RTL_GENERIC_COMPARE_ROUTINE
-#undef PRTL_GENERIC_ALLOCATE_ROUTINE
-#undef RTL_GENERIC_ALLOCATE_ROUTINE
-#undef PRTL_GENERIC_FREE_ROUTINE
-#undef RTL_GENERIC_FREE_ROUTINE
-#undef RTL_GENERIC_TABLE
-#undef PRTL_GENERIC_TABLE
-
-#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
-#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
-#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
-#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
-#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
-#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
-#define RTL_GENERIC_TABLE RTL_AVL_TABLE
-#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
-
-#endif /* RTL_USE_AVL_TABLES */
-
-typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY {
- LIST_ENTRY Linkage;
- ULONG_PTR Signature;
-} RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY;
-
-typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT {
- PLIST_ENTRY ChainHead;
- PLIST_ENTRY PrevLinkage;
- ULONG_PTR Signature;
-} RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT;
-
-typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR {
- RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry;
- PLIST_ENTRY ChainHead;
- ULONG BucketIndex;
-} RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR;
-
-typedef struct _RTL_DYNAMIC_HASH_TABLE {
- ULONG Flags;
- ULONG Shift;
- ULONG TableSize;
- ULONG Pivot;
- ULONG DivisorMask;
- ULONG NumEntries;
- ULONG NonEmptyBuckets;
- ULONG NumEnumerators;
- PVOID Directory;
-} RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE;
-
-typedef struct _OSVERSIONINFOA {
- ULONG dwOSVersionInfoSize;
- ULONG dwMajorVersion;
- ULONG dwMinorVersion;
- ULONG dwBuildNumber;
- ULONG dwPlatformId;
- CHAR szCSDVersion[128];
-} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
-
-typedef struct _OSVERSIONINFOW {
- ULONG dwOSVersionInfoSize;
- ULONG dwMajorVersion;
- ULONG dwMinorVersion;
- ULONG dwBuildNumber;
- ULONG dwPlatformId;
- WCHAR szCSDVersion[128];
-} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
-
-typedef struct _OSVERSIONINFOEXA {
- ULONG dwOSVersionInfoSize;
- ULONG dwMajorVersion;
- ULONG dwMinorVersion;
- ULONG dwBuildNumber;
- ULONG dwPlatformId;
- CHAR szCSDVersion[128];
- USHORT wServicePackMajor;
- USHORT wServicePackMinor;
- USHORT wSuiteMask;
- UCHAR wProductType;
- UCHAR wReserved;
-} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
-
-typedef struct _OSVERSIONINFOEXW {
- ULONG dwOSVersionInfoSize;
- ULONG dwMajorVersion;
- ULONG dwMinorVersion;
- ULONG dwBuildNumber;
- ULONG dwPlatformId;
- WCHAR szCSDVersion[128];
- USHORT wServicePackMajor;
- USHORT wServicePackMinor;
- USHORT wSuiteMask;
- UCHAR wProductType;
- UCHAR wReserved;
-} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
-
-#ifdef UNICODE
-typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
-typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
-typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
-typedef OSVERSIONINFOW OSVERSIONINFO;
-typedef POSVERSIONINFOW POSVERSIONINFO;
-typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
-#else
-typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
-typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
-typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
-typedef OSVERSIONINFOA OSVERSIONINFO;
-typedef POSVERSIONINFOA POSVERSIONINFO;
-typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
-#endif /* UNICODE */
-
-#define HASH_ENTRY_KEY(x) ((x)->Signature)
-
-/******************************************************************************
- * Security Manager Types *
- ******************************************************************************/
-#define SE_UNSOLICITED_INPUT_PRIVILEGE 6
-
-typedef enum _WELL_KNOWN_SID_TYPE {
- WinNullSid = 0,
- WinWorldSid = 1,
- WinLocalSid = 2,
- WinCreatorOwnerSid = 3,
- WinCreatorGroupSid = 4,
- WinCreatorOwnerServerSid = 5,
- WinCreatorGroupServerSid = 6,
- WinNtAuthoritySid = 7,
- WinDialupSid = 8,
- WinNetworkSid = 9,
- WinBatchSid = 10,
- WinInteractiveSid = 11,
- WinServiceSid = 12,
- WinAnonymousSid = 13,
- WinProxySid = 14,
- WinEnterpriseControllersSid = 15,
- WinSelfSid = 16,
- WinAuthenticatedUserSid = 17,
- WinRestrictedCodeSid = 18,
- WinTerminalServerSid = 19,
- WinRemoteLogonIdSid = 20,
- WinLogonIdsSid = 21,
- WinLocalSystemSid = 22,
- WinLocalServiceSid = 23,
- WinNetworkServiceSid = 24,
- WinBuiltinDomainSid = 25,
- WinBuiltinAdministratorsSid = 26,
- WinBuiltinUsersSid = 27,
- WinBuiltinGuestsSid = 28,
- WinBuiltinPowerUsersSid = 29,
- WinBuiltinAccountOperatorsSid = 30,
- WinBuiltinSystemOperatorsSid = 31,
- WinBuiltinPrintOperatorsSid = 32,
- WinBuiltinBackupOperatorsSid = 33,
- WinBuiltinReplicatorSid = 34,
- WinBuiltinPreWindows2000CompatibleAccessSid = 35,
- WinBuiltinRemoteDesktopUsersSid = 36,
- WinBuiltinNetworkConfigurationOperatorsSid = 37,
- WinAccountAdministratorSid = 38,
- WinAccountGuestSid = 39,
- WinAccountKrbtgtSid = 40,
- WinAccountDomainAdminsSid = 41,
- WinAccountDomainUsersSid = 42,
- WinAccountDomainGuestsSid = 43,
- WinAccountComputersSid = 44,
- WinAccountControllersSid = 45,
- WinAccountCertAdminsSid = 46,
- WinAccountSchemaAdminsSid = 47,
- WinAccountEnterpriseAdminsSid = 48,
- WinAccountPolicyAdminsSid = 49,
- WinAccountRasAndIasServersSid = 50,
- WinNTLMAuthenticationSid = 51,
- WinDigestAuthenticationSid = 52,
- WinSChannelAuthenticationSid = 53,
- WinThisOrganizationSid = 54,
- WinOtherOrganizationSid = 55,
- WinBuiltinIncomingForestTrustBuildersSid = 56,
- WinBuiltinPerfMonitoringUsersSid = 57,
- WinBuiltinPerfLoggingUsersSid = 58,
- WinBuiltinAuthorizationAccessSid = 59,
- WinBuiltinTerminalServerLicenseServersSid = 60,
- WinBuiltinDCOMUsersSid = 61,
- WinBuiltinIUsersSid = 62,
- WinIUserSid = 63,
- WinBuiltinCryptoOperatorsSid = 64,
- WinUntrustedLabelSid = 65,
- WinLowLabelSid = 66,
- WinMediumLabelSid = 67,
- WinHighLabelSid = 68,
- WinSystemLabelSid = 69,
- WinWriteRestrictedCodeSid = 70,
- WinCreatorOwnerRightsSid = 71,
- WinCacheablePrincipalsGroupSid = 72,
- WinNonCacheablePrincipalsGroupSid = 73,
- WinEnterpriseReadonlyControllersSid = 74,
- WinAccountReadonlyControllersSid = 75,
- WinBuiltinEventLogReadersGroup = 76,
- WinNewEnterpriseReadonlyControllersSid = 77,
- WinBuiltinCertSvcDComAccessGroup = 78,
- WinMediumPlusLabelSid = 79,
- WinLocalLogonSid = 80,
- WinConsoleLogonSid = 81,
- WinThisOrganizationCertificateSid = 82,
-} WELL_KNOWN_SID_TYPE;
-
-
-
-#if defined(_M_IX86)
-
-#define PAUSE_PROCESSOR YieldProcessor();
-
-#define KERNEL_STACK_SIZE 12288
-#define KERNEL_LARGE_STACK_SIZE 61440
-#define KERNEL_LARGE_STACK_COMMIT 12288
-
-#define SIZE_OF_80387_REGISTERS 80
-
-#if !defined(RC_INVOKED)
-
-#define CONTEXT_i386 0x10000
-#define CONTEXT_i486 0x10000
-#define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
-#define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
-#define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
-#define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
-#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
-#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
-
-#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
-#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
- CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
- CONTEXT_EXTENDED_REGISTERS)
-
-#define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
-
-#endif /* !defined(RC_INVOKED) */
-
-typedef struct _FLOATING_SAVE_AREA {
- ULONG ControlWord;
- ULONG StatusWord;
- ULONG TagWord;
- ULONG ErrorOffset;
- ULONG ErrorSelector;
- ULONG DataOffset;
- ULONG DataSelector;
- UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
- ULONG Cr0NpxState;
-} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
-
-#include "pshpack4.h"
-typedef struct _CONTEXT {
- ULONG ContextFlags;
- ULONG Dr0;
- ULONG Dr1;
- ULONG Dr2;
- ULONG Dr3;
- ULONG Dr6;
- ULONG Dr7;
- FLOATING_SAVE_AREA FloatSave;
- ULONG SegGs;
- ULONG SegFs;
- ULONG SegEs;
- ULONG SegDs;
- ULONG Edi;
- ULONG Esi;
- ULONG Ebx;
- ULONG Edx;
- ULONG Ecx;
- ULONG Eax;
- ULONG Ebp;
- ULONG Eip;
- ULONG SegCs;
- ULONG EFlags;
- ULONG Esp;
- ULONG SegSs;
- UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
-} CONTEXT;
-#include "poppack.h"
-
-#define KeGetPcr() PCR
-
-#define PCR_MINOR_VERSION 1
-#define PCR_MAJOR_VERSION 1
-
-typedef struct _KPCR {
- union {
- NT_TIB NtTib;
- struct {
- struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
- PVOID Used_StackBase;
- PVOID Spare2;
- PVOID TssCopy;
- ULONG ContextSwitches;
- KAFFINITY SetMemberCopy;
- PVOID Used_Self;
- };
- };
- struct _KPCR *SelfPcr;
- struct _KPRCB *Prcb;
- KIRQL Irql;
- ULONG IRR;
- ULONG IrrActive;
- ULONG IDR;
- PVOID KdVersionBlock;
- struct _KIDTENTRY *IDT;
- struct _KGDTENTRY *GDT;
- struct _KTSS *TSS;
- USHORT MajorVersion;
- USHORT MinorVersion;
- KAFFINITY SetMember;
- ULONG StallScaleFactor;
- UCHAR SpareUnused;
- UCHAR Number;
- UCHAR Spare0;
- UCHAR SecondLevelCacheAssociativity;
- ULONG VdmAlert;
- ULONG KernelReserved[14];
- ULONG SecondLevelCacheSize;
- ULONG HalReserved[16];
-} KPCR, *PKPCR;
-
-FORCEINLINE
-ULONG
-KeGetCurrentProcessorNumber(VOID)
-{
- return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number));
-}
-
-
-
-
-
-
-extern NTKERNELAPI PVOID MmHighestUserAddress;
-extern NTKERNELAPI PVOID MmSystemRangeStart;
-extern NTKERNELAPI ULONG MmUserProbeAddress;
-
-#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
-#define MM_SYSTEM_RANGE_START MmSystemRangeStart
-#if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
-#define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
-extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_;
-#else
-#define MM_USER_PROBE_ADDRESS MmUserProbeAddress
-#endif
-#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
-#define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
-#define MM_SYSTEM_SPACE_END 0xFFFFFFFF
-#if !defined (_X86PAE_)
-#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
-#else
-#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
-#endif
-
-#elif defined(_M_AMD64)
-
-#define PAUSE_PROCESSOR YieldProcessor();
-
-#define KERNEL_STACK_SIZE 0x6000
-#define KERNEL_LARGE_STACK_SIZE 0x12000
-#define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
-
-#define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
-
-#define EXCEPTION_READ_FAULT 0
-#define EXCEPTION_WRITE_FAULT 1
-#define EXCEPTION_EXECUTE_FAULT 8
-
-#if !defined(RC_INVOKED)
-
-#define CONTEXT_AMD64 0x100000
-
-#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
-#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
-#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
-#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
-#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
-
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
-#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
-
-#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
-
-#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
-#define CONTEXT_SERVICE_ACTIVE 0x10000000
-#define CONTEXT_EXCEPTION_REQUEST 0x40000000
-#define CONTEXT_EXCEPTION_REPORTING 0x80000000
-
-#endif /* !defined(RC_INVOKED) */
-
-#define INITIAL_MXCSR 0x1f80
-#define INITIAL_FPCSR 0x027f
-
-typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
- ULONG64 P1Home;
- ULONG64 P2Home;
- ULONG64 P3Home;
- ULONG64 P4Home;
- ULONG64 P5Home;
- ULONG64 P6Home;
- ULONG ContextFlags;
- ULONG MxCsr;
- USHORT SegCs;
- USHORT SegDs;
- USHORT SegEs;
- USHORT SegFs;
- USHORT SegGs;
- USHORT SegSs;
- ULONG EFlags;
- ULONG64 Dr0;
- ULONG64 Dr1;
- ULONG64 Dr2;
- ULONG64 Dr3;
- ULONG64 Dr6;
- ULONG64 Dr7;
- ULONG64 Rax;
- ULONG64 Rcx;
- ULONG64 Rdx;
- ULONG64 Rbx;
- ULONG64 Rsp;
- ULONG64 Rbp;
- ULONG64 Rsi;
- ULONG64 Rdi;
- ULONG64 R8;
- ULONG64 R9;
- ULONG64 R10;
- ULONG64 R11;
- ULONG64 R12;
- ULONG64 R13;
- ULONG64 R14;
- ULONG64 R15;
- ULONG64 Rip;
- union {
- XMM_SAVE_AREA32 FltSave;
- struct {
- M128A Header[2];
- M128A Legacy[8];
- M128A Xmm0;
- M128A Xmm1;
- M128A Xmm2;
- M128A Xmm3;
- M128A Xmm4;
- M128A Xmm5;
- M128A Xmm6;
- M128A Xmm7;
- M128A Xmm8;
- M128A Xmm9;
- M128A Xmm10;
- M128A Xmm11;
- M128A Xmm12;
- M128A Xmm13;
- M128A Xmm14;
- M128A Xmm15;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- M128A VectorRegister[26];
- ULONG64 VectorControl;
- ULONG64 DebugControl;
- ULONG64 LastBranchToRip;
- ULONG64 LastBranchFromRip;
- ULONG64 LastExceptionToRip;
- ULONG64 LastExceptionFromRip;
-} CONTEXT;
-
-#define PCR_MINOR_VERSION 1
-#define PCR_MAJOR_VERSION 1
-
-typedef struct _KPCR
-{
- _ANONYMOUS_UNION union
- {
- NT_TIB NtTib;
- _ANONYMOUS_STRUCT struct
- {
- union _KGDTENTRY64 *GdtBase;
- struct _KTSS64 *TssBase;
- ULONG64 UserRsp;
- struct _KPCR *Self;
- struct _KPRCB *CurrentPrcb;
- PKSPIN_LOCK_QUEUE LockArray;
- PVOID Used_Self;
- };
- };
- union _KIDTENTRY64 *IdtBase;
- ULONG64 Unused[2];
- KIRQL Irql;
- UCHAR SecondLevelCacheAssociativity;
- UCHAR ObsoleteNumber;
- UCHAR Fill0;
- ULONG Unused0[3];
- USHORT MajorVersion;
- USHORT MinorVersion;
- ULONG StallScaleFactor;
- PVOID Unused1[3];
- ULONG KernelReserved[15];
- ULONG SecondLevelCacheSize;
- ULONG HalReserved[16];
- ULONG Unused2;
- PVOID KdVersionBlock;
- PVOID Unused3;
- ULONG PcrAlign1[24];
-} KPCR, *PKPCR;
-
-FORCEINLINE
-PKPCR
-KeGetPcr(VOID)
-{
- return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self));
-}
-
-FORCEINLINE
-ULONG
-KeGetCurrentProcessorNumber(VOID)
-{
- return (ULONG)__readgsword(0x184);
-}
-
-
-#define PTI_SHIFT 12L
-#define PDI_SHIFT 21L
-#define PPI_SHIFT 30L
-#define PXI_SHIFT 39L
-#define PTE_PER_PAGE 512
-#define PDE_PER_PAGE 512
-#define PPE_PER_PAGE 512
-#define PXE_PER_PAGE 512
-#define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
-#define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
-#define PPI_MASK (PPE_PER_PAGE - 1)
-#define PXI_MASK (PXE_PER_PAGE - 1)
-
-#define PXE_BASE 0xFFFFF6FB7DBED000ULL
-#define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
-#define PPE_BASE 0xFFFFF6FB7DA00000ULL
-#define PDE_BASE 0xFFFFF6FB40000000ULL
-#define PTE_BASE 0xFFFFF68000000000ULL
-#define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
-#define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
-#define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
-#define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
-
-extern NTKERNELAPI PVOID MmHighestUserAddress;
-extern NTKERNELAPI PVOID MmSystemRangeStart;
-extern NTKERNELAPI ULONG64 MmUserProbeAddress;
-
-#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
-#define MM_SYSTEM_RANGE_START MmSystemRangeStart
-#define MM_USER_PROBE_ADDRESS MmUserProbeAddress
-#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
-#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
-
-
-#elif defined(_M_IA64)
-
-#elif defined(_M_PPC)
-
-
-#elif defined(_M_MIPS)
-
-#elif defined(_M_ARM)
-#else
-#error Unknown Architecture
-#endif
-
-/******************************************************************************
- * Executive Functions *
- ******************************************************************************/
-static __inline PVOID
-ExAllocateFromZone(
- IN PZONE_HEADER Zone)
-{
- if (Zone->FreeList.Next)
- Zone->FreeList.Next = Zone->FreeList.Next->Next;
- return (PVOID) Zone->FreeList.Next;
-}
-
-static __inline PVOID
-ExFreeToZone(
- IN PZONE_HEADER Zone,
- IN PVOID Block)
-{
- ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
- Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
- return ((PSINGLE_LIST_ENTRY) Block)->Next;
-}
-
-/*
- * PVOID
- * ExInterlockedAllocateFromZone(
- * IN PZONE_HEADER Zone,
- * IN PKSPIN_LOCK Lock)
- */
-#define ExInterlockedAllocateFromZone(Zone, Lock) \
- ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
-
-/* PVOID
- * ExInterlockedFreeToZone(
- * IN PZONE_HEADER Zone,
- * IN PVOID Block,
- * IN PKSPIN_LOCK Lock);
- */
-#define ExInterlockedFreeToZone(Zone, Block, Lock) \
- ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
-
-/*
- * BOOLEAN
- * ExIsFullZone(
- * IN PZONE_HEADER Zone)
- */
-#define ExIsFullZone(Zone) \
- ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
-
-/* BOOLEAN
- * ExIsObjectInFirstZoneSegment(
- * IN PZONE_HEADER Zone,
- * IN PVOID Object);
- */
-#define ExIsObjectInFirstZoneSegment(Zone,Object) \
- ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
- ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
- (Zone)->TotalSegmentSize)) )
-
-#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
-#define ExAcquireResourceShared ExAcquireResourceSharedLite
-#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
-#define ExDeleteResource ExDeleteResourceLite
-#define ExInitializeResource ExInitializeResourceLite
-#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
-#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
-#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
-#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
-
-#ifdef _X86_
-
-typedef enum _INTERLOCKED_RESULT {
- ResultNegative = RESULT_NEGATIVE,
- ResultZero = RESULT_ZERO,
- ResultPositive = RESULT_POSITIVE
-} INTERLOCKED_RESULT;
-
-NTKERNELAPI
-INTERLOCKED_RESULT
-FASTCALL
-Exfi386InterlockedIncrementLong(
- IN OUT LONG volatile *Addend);
-
-NTKERNELAPI
-INTERLOCKED_RESULT
-FASTCALL
-Exfi386InterlockedDecrementLong(
- IN PLONG Addend);
-
-NTKERNELAPI
-ULONG
-FASTCALL
-Exfi386InterlockedExchangeUlong(
- IN PULONG Target,
- IN ULONG Value);
-#endif
-
-
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-NTKERNELAPI
-NTSTATUS
-NTAPI
-ExExtendZone(
- IN OUT PZONE_HEADER Zone,
- IN OUT PVOID Segment,
- IN ULONG SegmentSize);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-ExInitializeZone(
- OUT PZONE_HEADER Zone,
- IN ULONG BlockSize,
- IN OUT PVOID InitialSegment,
- IN ULONG InitialSegmentSize);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-ExInterlockedExtendZone(
- IN OUT PZONE_HEADER Zone,
- IN OUT PVOID Segment,
- IN ULONG SegmentSize,
- IN OUT PKSPIN_LOCK Lock);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-ExUuidCreate(
- OUT UUID *Uuid);
-
-NTKERNELAPI
-DECLSPEC_NORETURN
-VOID
-NTAPI
-ExRaiseAccessViolation(VOID);
-
-NTKERNELAPI
-DECLSPEC_NORETURN
-VOID
-NTAPI
-ExRaiseDatatypeMisalignment(VOID);
-
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-
-/* Hardware Abstraction Layer Functions */
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
-
-/* Nothing here */
-
-#else /* USE_DMA_MACROS ... */
-
-//DECLSPEC_DEPRECATED_DDK
-NTHALAPI
-VOID
-NTAPI
-IoFreeAdapterChannel(
- IN PADAPTER_OBJECT AdapterObject);
-
-//DECLSPEC_DEPRECATED_DDK
-NTHALAPI
-BOOLEAN
-NTAPI
-IoFlushAdapterBuffers(
- IN PADAPTER_OBJECT AdapterObject,
- IN PMDL Mdl,
- IN PVOID MapRegisterBase,
- IN PVOID CurrentVa,
- IN ULONG Length,
- IN BOOLEAN WriteToDevice);
-
-//DECLSPEC_DEPRECATED_DDK
-NTHALAPI
-VOID
-NTAPI
-IoFreeMapRegisters(
- IN PADAPTER_OBJECT AdapterObject,
- IN PVOID MapRegisterBase,
- IN ULONG NumberOfMapRegisters);
-
-//DECLSPEC_DEPRECATED_DDK
-NTHALAPI
-PVOID
-NTAPI
-HalAllocateCommonBuffer(
- IN PADAPTER_OBJECT AdapterObject,
- IN ULONG Length,
- OUT PPHYSICAL_ADDRESS LogicalAddress,
- IN BOOLEAN CacheEnabled);
-
-//DECLSPEC_DEPRECATED_DDK
-NTHALAPI
-VOID
-NTAPI
-HalFreeCommonBuffer(
- IN PADAPTER_OBJECT AdapterObject,
- IN ULONG Length,
- IN PHYSICAL_ADDRESS LogicalAddress,
- IN PVOID VirtualAddress,
- IN BOOLEAN CacheEnabled);
-
-//DECLSPEC_DEPRECATED_DDK
-NTHALAPI
-ULONG
-NTAPI
-HalReadDmaCounter(
- IN PADAPTER_OBJECT AdapterObject);
-
-NTHALAPI
-NTSTATUS
-NTAPI
-HalAllocateAdapterChannel(
- IN PADAPTER_OBJECT AdapterObject,
- IN PWAIT_CONTEXT_BLOCK Wcb,
- IN ULONG NumberOfMapRegisters,
- IN PDRIVER_CONTROL ExecutionRoutine);
-
-#endif /* USE_DMA_MACROS ... */
-
-#if !defined(NO_LEGACY_DRIVERS)
-NTHALAPI
-NTSTATUS
-NTAPI
-HalAssignSlotResources(
- IN PUNICODE_STRING RegistryPath,
- IN PUNICODE_STRING DriverClassName,
- IN PDRIVER_OBJECT DriverObject,
- IN PDEVICE_OBJECT DeviceObject,
- IN INTERFACE_TYPE BusType,
- IN ULONG BusNumber,
- IN ULONG SlotNumber,
- IN OUT PCM_RESOURCE_LIST *AllocatedResources);
-
-NTHALAPI
-ULONG
-NTAPI
-HalGetInterruptVector(
- IN INTERFACE_TYPE InterfaceType,
- IN ULONG BusNumber,
- IN ULONG BusInterruptLevel,
- IN ULONG BusInterruptVector,
- OUT PKIRQL Irql,
- OUT PKAFFINITY Affinity);
-
-NTHALAPI
-ULONG
-NTAPI
-HalSetBusData(
- IN BUS_DATA_TYPE BusDataType,
- IN ULONG BusNumber,
- IN ULONG SlotNumber,
- IN PVOID Buffer,
- IN ULONG Length);
-
-NTHALAPI
-ULONG
-NTAPI
-HalGetBusData(
- IN BUS_DATA_TYPE BusDataType,
- IN ULONG BusNumber,
- IN ULONG SlotNumber,
- OUT PVOID Buffer,
- IN ULONG Length);
-
-NTHALAPI
-BOOLEAN
-NTAPI
-HalMakeBeep(
- IN ULONG Frequency);
-#endif /* !defined(NO_LEGACY_DRIVERS) */
-
-NTHALAPI
-PADAPTER_OBJECT
-NTAPI
-HalGetAdapter(
- IN PDEVICE_DESCRIPTION DeviceDescription,
- OUT PULONG NumberOfMapRegisters);
-
-VOID
-NTAPI
-HalPutDmaAdapter(
- IN PADAPTER_OBJECT DmaAdapter);
-
-NTHALAPI
-VOID
-NTAPI
-HalAcquireDisplayOwnership(
- IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
-
-NTHALAPI
-ULONG
-NTAPI
-HalGetBusDataByOffset(
- IN BUS_DATA_TYPE BusDataType,
- IN ULONG BusNumber,
- IN ULONG SlotNumber,
- OUT PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
-
-NTHALAPI
-ULONG
-NTAPI
-HalSetBusDataByOffset(
- IN BUS_DATA_TYPE BusDataType,
- IN ULONG BusNumber,
- IN ULONG SlotNumber,
- IN PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
-
-NTHALAPI
-BOOLEAN
-NTAPI
-HalTranslateBusAddress(
- IN INTERFACE_TYPE InterfaceType,
- IN ULONG BusNumber,
- IN PHYSICAL_ADDRESS BusAddress,
- IN OUT PULONG AddressSpace,
- OUT PPHYSICAL_ADDRESS TranslatedAddress);
-
-NTHALAPI
-PVOID
-NTAPI
-HalAllocateCrashDumpRegisters(
- IN PADAPTER_OBJECT AdapterObject,
- IN OUT PULONG NumberOfMapRegisters);
-
-NTSTATUS
-NTAPI
-HalGetScatterGatherList(
- IN PADAPTER_OBJECT DmaAdapter,
- IN PDEVICE_OBJECT DeviceObject,
- IN PMDL Mdl,
- IN PVOID CurrentVa,
- IN ULONG Length,
- IN PDRIVER_LIST_CONTROL ExecutionRoutine,
- IN PVOID Context,
- IN BOOLEAN WriteToDevice);
-
-VOID
-NTAPI
-HalPutScatterGatherList(
- IN PADAPTER_OBJECT DmaAdapter,
- IN PSCATTER_GATHER_LIST ScatterGather,
- IN BOOLEAN WriteToDevice);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-NTKERNELAPI
-VOID
-FASTCALL
-HalExamineMBR(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG SectorSize,
- IN ULONG MBRTypeIdentifier,
- OUT PVOID *Buffer);
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-NTSTATUS
-NTAPI
-HalAllocateHardwareCounters(
- IN PGROUP_AFFINITY GroupAffinty,
- IN ULONG GroupCount,
- IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList,
- OUT PHANDLE CounterSetHandle);
-
-NTSTATUS
-NTAPI
-HalFreeHardwareCounters(
- IN HANDLE CounterSetHandle);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-#if defined(_IA64_)
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-NTHALAPI
-ULONG
-NTAPI
-HalGetDmaAlignmentRequirement(VOID);
-#endif
-#endif /* defined(_IA64_) */
-
-#if defined(_M_IX86) || defined(_M_AMD64)
-#define HalGetDmaAlignmentRequirement() 1L
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR;
-typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
-
-NTHALAPI
-VOID
-NTAPI
-HalBugCheckSystem(
- IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource,
- IN PWHEA_ERROR_RECORD ErrorRecord);
-
-#else
-
-typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
-
-NTHALAPI
-VOID
-NTAPI
-HalBugCheckSystem(
- IN PWHEA_ERROR_RECORD ErrorRecord);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-
-/******************************************************************************
- * I/O Manager Functions *
- ******************************************************************************/
-/*
- * VOID IoAssignArcName(
- * IN PUNICODE_STRING ArcName,
- * IN PUNICODE_STRING DeviceName);
- */
-#define IoAssignArcName(_ArcName, _DeviceName) ( \
- IoCreateSymbolicLink((_ArcName), (_DeviceName)))
-
-/*
- * VOID
- * IoDeassignArcName(
- * IN PUNICODE_STRING ArcName)
- */
-#define IoDeassignArcName IoDeleteSymbolicLink
-
-VOID
-FORCEINLINE
-NTAPI
-IoInitializeDriverCreateContext(
- PIO_DRIVER_CREATE_CONTEXT DriverContext)
-{
- RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT));
- DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT);
-}
-
-
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-#if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoAllocateAdapterChannel(
- IN PADAPTER_OBJECT AdapterObject,
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG NumberOfMapRegisters,
- IN PDRIVER_CONTROL ExecutionRoutine,
- IN PVOID Context);
-#endif
-
-#if !defined(DMA_MACROS_DEFINED)
-//DECLSPEC_DEPRECATED_DDK
-NTHALAPI
-PHYSICAL_ADDRESS
-NTAPI
-IoMapTransfer(
- IN PADAPTER_OBJECT AdapterObject,
- IN PMDL Mdl,
- IN PVOID MapRegisterBase,
- IN PVOID CurrentVa,
- IN OUT PULONG Length,
- IN BOOLEAN WriteToDevice);
-#endif
-
-NTKERNELAPI
-VOID
-NTAPI
-IoAllocateController(
- IN PCONTROLLER_OBJECT ControllerObject,
- IN PDEVICE_OBJECT DeviceObject,
- IN PDRIVER_CONTROL ExecutionRoutine,
- IN PVOID Context OPTIONAL);
-
-NTKERNELAPI
-PCONTROLLER_OBJECT
-NTAPI
-IoCreateController(
- IN ULONG Size);
-
-NTKERNELAPI
-VOID
-NTAPI
-IoDeleteController(
- IN PCONTROLLER_OBJECT ControllerObject);
-
-NTKERNELAPI
-VOID
-NTAPI
-IoFreeController(
- IN PCONTROLLER_OBJECT ControllerObject);
-
-NTKERNELAPI
-PCONFIGURATION_INFORMATION
-NTAPI
-IoGetConfigurationInformation(VOID);
-
-NTKERNELAPI
-PDEVICE_OBJECT
-NTAPI
-IoGetDeviceToVerify(
- IN PETHREAD Thread);
-
-NTKERNELAPI
-VOID
-NTAPI
-IoCancelFileOpen(
- IN PDEVICE_OBJECT DeviceObject,
- IN PFILE_OBJECT FileObject);
-
-NTKERNELAPI
-PGENERIC_MAPPING
-NTAPI
-IoGetFileObjectGenericMapping(VOID);
-
-NTKERNELAPI
-PIRP
-NTAPI
-IoMakeAssociatedIrp(
- IN PIRP Irp,
- IN CCHAR StackSize);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoQueryDeviceDescription(
- IN PINTERFACE_TYPE BusType OPTIONAL,
- IN PULONG BusNumber OPTIONAL,
- IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
- IN PULONG ControllerNumber OPTIONAL,
- IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
- IN PULONG PeripheralNumber OPTIONAL,
- IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
- IN OUT PVOID Context OPTIONAL);
-
-NTKERNELAPI
-VOID
-NTAPI
-IoRaiseHardError(
- IN PIRP Irp,
- IN PVPB Vpb OPTIONAL,
- IN PDEVICE_OBJECT RealDeviceObject);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-IoRaiseInformationalHardError(
- IN NTSTATUS ErrorStatus,
- IN PUNICODE_STRING String OPTIONAL,
- IN PKTHREAD Thread OPTIONAL);
-
-NTKERNELAPI
-VOID
-NTAPI
-IoRegisterBootDriverReinitialization(
- IN PDRIVER_OBJECT DriverObject,
- IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
- IN PVOID Context OPTIONAL);
-
-NTKERNELAPI
-VOID
-NTAPI
-IoRegisterDriverReinitialization(
- IN PDRIVER_OBJECT DriverObject,
- IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
- IN PVOID Context OPTIONAL);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoAttachDeviceByPointer(
- IN PDEVICE_OBJECT SourceDevice,
- IN PDEVICE_OBJECT TargetDevice);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoReportDetectedDevice(
- IN PDRIVER_OBJECT DriverObject,
- IN INTERFACE_TYPE LegacyBusType,
- IN ULONG BusNumber,
- IN ULONG SlotNumber,
- IN PCM_RESOURCE_LIST ResourceList OPTIONAL,
- IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
- IN BOOLEAN ResourceAssigned,
- IN OUT PDEVICE_OBJECT *DeviceObject OPTIONAL);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoReportResourceForDetection(
- IN PDRIVER_OBJECT DriverObject,
- IN PCM_RESOURCE_LIST DriverList OPTIONAL,
- IN ULONG DriverListSize OPTIONAL,
- IN PDEVICE_OBJECT DeviceObject OPTIONAL,
- IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
- IN ULONG DeviceListSize OPTIONAL,
- OUT PBOOLEAN ConflictDetected);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoReportResourceUsage(
- IN PUNICODE_STRING DriverClassName OPTIONAL,
- IN PDRIVER_OBJECT DriverObject,
- IN PCM_RESOURCE_LIST DriverList OPTIONAL,
- IN ULONG DriverListSize OPTIONAL,
- IN PDEVICE_OBJECT DeviceObject,
- IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
- IN ULONG DeviceListSize OPTIONAL,
- IN BOOLEAN OverrideConflict,
- OUT PBOOLEAN ConflictDetected);
-
-NTKERNELAPI
-VOID
-NTAPI
-IoSetHardErrorOrVerifyDevice(
- IN PIRP Irp,
- IN PDEVICE_OBJECT DeviceObject);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoAssignResources(
- IN PUNICODE_STRING RegistryPath,
- IN PUNICODE_STRING DriverClassName OPTIONAL,
- IN PDRIVER_OBJECT DriverObject,
- IN PDEVICE_OBJECT DeviceObject OPTIONAL,
- IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL,
- IN OUT PCM_RESOURCE_LIST *AllocatedResources);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-IoSetThreadHardErrorMode(
- IN BOOLEAN EnableHardErrors);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-IoIsFileOriginRemote(
- IN PFILE_OBJECT FileObject);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoSetFileOrigin(
- IN PFILE_OBJECT FileObject,
- IN BOOLEAN Remote);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-NTKERNELAPI
-NTSTATUS
-FASTCALL
-IoReadPartitionTable(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG SectorSize,
- IN BOOLEAN ReturnRecognizedPartitions,
- OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
-
-NTKERNELAPI
-NTSTATUS
-FASTCALL
-IoSetPartitionInformation(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG SectorSize,
- IN ULONG PartitionNumber,
- IN ULONG PartitionType);
-
-NTKERNELAPI
-NTSTATUS
-FASTCALL
-IoWritePartitionTable(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG SectorSize,
- IN ULONG SectorsPerTrack,
- IN ULONG NumberOfHeads,
- IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoCreateDisk(
- IN PDEVICE_OBJECT DeviceObject,
- IN struct _CREATE_DISK* Disk OPTIONAL);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoReadDiskSignature(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG BytesPerSector,
- OUT PDISK_SIGNATURE Signature);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoReadPartitionTableEx(
- IN PDEVICE_OBJECT DeviceObject,
- OUT struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoSetPartitionInformationEx(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG PartitionNumber,
- IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoSetSystemPartition(
- IN PUNICODE_STRING VolumeNameString);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoVerifyPartitionTable(
- IN PDEVICE_OBJECT DeviceObject,
- IN BOOLEAN FixErrors);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoVolumeDeviceToDosName(
- IN PVOID VolumeDeviceObject,
- OUT PUNICODE_STRING DosName);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoWritePartitionTableEx(
- IN PDEVICE_OBJECT DeviceObject,
- IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoCreateFileSpecifyDeviceObjectHint(
- OUT PHANDLE FileHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PLARGE_INTEGER AllocationSize OPTIONAL,
- IN ULONG FileAttributes,
- IN ULONG ShareAccess,
- IN ULONG Disposition,
- IN ULONG CreateOptions,
- IN PVOID EaBuffer OPTIONAL,
- IN ULONG EaLength,
- IN CREATE_FILE_TYPE CreateFileType,
- IN PVOID InternalParameters OPTIONAL,
- IN ULONG Options,
- IN PVOID DeviceObject OPTIONAL);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoAttachDeviceToDeviceStackSafe(
- IN PDEVICE_OBJECT SourceDevice,
- IN PDEVICE_OBJECT TargetDevice,
- OUT PDEVICE_OBJECT *AttachedToDeviceObject);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-
-#if (NTDDI_VERSION >= NTDDI_WS03)
-NTKERNELAPI
-IO_PAGING_PRIORITY
-FASTCALL
-IoGetPagingIoPriority(
- IN PIRP Irp);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
-
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
-BOOLEAN
-NTAPI
-IoTranslateBusAddress(
- IN INTERFACE_TYPE InterfaceType,
- IN ULONG BusNumber,
- IN PHYSICAL_ADDRESS BusAddress,
- IN OUT PULONG AddressSpace,
- OUT PPHYSICAL_ADDRESS TranslatedAddress);
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoUpdateDiskGeometry(
- IN PDEVICE_OBJECT DeviceObject,
- IN struct _DISK_GEOMETRY_EX* OldDiskGeometry,
- IN struct _DISK_GEOMETRY_EX* NewDiskGeometry);
+#define PTI_SHIFT 12L
+#define PDI_SHIFT 21L
+#define PPI_SHIFT 30L
+#define PXI_SHIFT 39L
+#define PTE_PER_PAGE 512
+#define PDE_PER_PAGE 512
+#define PPE_PER_PAGE 512
+#define PXE_PER_PAGE 512
+#define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
+#define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
+#define PPI_MASK (PPE_PER_PAGE - 1)
+#define PXI_MASK (PXE_PER_PAGE - 1)
-PTXN_PARAMETER_BLOCK
-NTAPI
-IoGetTransactionParameterBlock(
- IN PFILE_OBJECT FileObject);
+#define PXE_BASE 0xFFFFF6FB7DBED000ULL
+#define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
+#define PPE_BASE 0xFFFFF6FB7DA00000ULL
+#define PDE_BASE 0xFFFFF6FB40000000ULL
+#define PTE_BASE 0xFFFFF68000000000ULL
+#define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
+#define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
+#define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
+#define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoCreateFileEx(
- OUT PHANDLE FileHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PLARGE_INTEGER AllocationSize OPTIONAL,
- IN ULONG FileAttributes,
- IN ULONG ShareAccess,
- IN ULONG Disposition,
- IN ULONG CreateOptions,
- IN PVOID EaBuffer OPTIONAL,
- IN ULONG EaLength,
- IN CREATE_FILE_TYPE CreateFileType,
- IN PVOID InternalParameters OPTIONAL,
- IN ULONG Options,
- IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL);
+#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
+#define MM_SYSTEM_RANGE_START MmSystemRangeStart
+#define MM_USER_PROBE_ADDRESS MmUserProbeAddress
+#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
+#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
+#define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
-NTSTATUS
-NTAPI
-IoSetIrpExtraCreateParameter(
- IN OUT PIRP Irp,
- IN struct _ECP_LIST *ExtraCreateParameter);
+typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
+ ULONG64 P1Home;
+ ULONG64 P2Home;
+ ULONG64 P3Home;
+ ULONG64 P4Home;
+ ULONG64 P5Home;
+ ULONG64 P6Home;
-VOID
-NTAPI
-IoClearIrpExtraCreateParameter(
- IN OUT PIRP Irp);
+ /* Control flags */
+ ULONG ContextFlags;
+ ULONG MxCsr;
-NTSTATUS
-NTAPI
-IoGetIrpExtraCreateParameter(
- IN PIRP Irp,
- OUT struct _ECP_LIST **ExtraCreateParameter OPTIONAL);
+ /* Segment */
+ USHORT SegCs;
+ USHORT SegDs;
+ USHORT SegEs;
+ USHORT SegFs;
+ USHORT SegGs;
+ USHORT SegSs;
+ ULONG EFlags;
-BOOLEAN
-NTAPI
-IoIsFileObjectIgnoringSharing(
- IN PFILE_OBJECT FileObject);
+ /* Debug */
+ ULONG64 Dr0;
+ ULONG64 Dr1;
+ ULONG64 Dr2;
+ ULONG64 Dr3;
+ ULONG64 Dr6;
+ ULONG64 Dr7;
+ /* Integer */
+ ULONG64 Rax;
+ ULONG64 Rcx;
+ ULONG64 Rdx;
+ ULONG64 Rbx;
+ ULONG64 Rsp;
+ ULONG64 Rbp;
+ ULONG64 Rsi;
+ ULONG64 Rdi;
+ ULONG64 R8;
+ ULONG64 R9;
+ ULONG64 R10;
+ ULONG64 R11;
+ ULONG64 R12;
+ ULONG64 R13;
+ ULONG64 R14;
+ ULONG64 R15;
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+ /* Counter */
+ ULONG64 Rip;
+ /* Floating point */
+ union {
+ XMM_SAVE_AREA32 FltSave;
+ struct {
+ M128A Header[2];
+ M128A Legacy[8];
+ M128A Xmm0;
+ M128A Xmm1;
+ M128A Xmm2;
+ M128A Xmm3;
+ M128A Xmm4;
+ M128A Xmm5;
+ M128A Xmm6;
+ M128A Xmm7;
+ M128A Xmm8;
+ M128A Xmm9;
+ M128A Xmm10;
+ M128A Xmm11;
+ M128A Xmm12;
+ M128A Xmm13;
+ M128A Xmm14;
+ M128A Xmm15;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-NTSTATUS
-NTAPI
-IoSetFileObjectIgnoreSharing(
- IN PFILE_OBJECT FileObject);
+ /* Vector */
+ M128A VectorRegister[26];
+ ULONG64 VectorControl;
+ /* Debug control */
+ ULONG64 DebugControl;
+ ULONG64 LastBranchToRip;
+ ULONG64 LastBranchFromRip;
+ ULONG64 LastExceptionToRip;
+ ULONG64 LastExceptionFromRip;
+} CONTEXT;
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+typedef struct _KPCR
+{
+ _ANONYMOUS_UNION union
+ {
+ NT_TIB NtTib;
+ _ANONYMOUS_STRUCT struct
+ {
+ union _KGDTENTRY64 *GdtBase;
+ struct _KTSS64 *TssBase;
+ ULONG64 UserRsp;
+ struct _KPCR *Self;
+ struct _KPRCB *CurrentPrcb;
+ PKSPIN_LOCK_QUEUE LockArray;
+ PVOID Used_Self;
+ };
+ };
+ union _KIDTENTRY64 *IdtBase;
+ ULONG64 Unused[2];
+ KIRQL Irql;
+ UCHAR SecondLevelCacheAssociativity;
+ UCHAR ObsoleteNumber;
+ UCHAR Fill0;
+ ULONG Unused0[3];
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ ULONG StallScaleFactor;
+ PVOID Unused1[3];
+ ULONG KernelReserved[15];
+ ULONG SecondLevelCacheSize;
+ ULONG HalReserved[16];
+ ULONG Unused2;
+ PVOID KdVersionBlock;
+ PVOID Unused3;
+ ULONG PcrAlign1[24];
+} KPCR, *PKPCR;
+FORCEINLINE
+PKPCR
+KeGetPcr(VOID)
+{
+ return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self));
+}
-/******************************************************************************
- * Kernel Debugger Functions *
- ******************************************************************************/
-NTSYSAPI
+FORCEINLINE
ULONG
-NTAPI
-DbgPrompt(
- IN PCCH Prompt,
- OUT PCH Response,
- IN ULONG MaximumResponseLength);
+KeGetCurrentProcessorNumber(VOID)
+{
+ return (ULONG)__readgsword(0x184);
+}
-/******************************************************************************
- * Kernel Functions *
- ******************************************************************************/
-NTKERNELAPI
-VOID
-FASTCALL
-KeInvalidateRangeAllCaches(
- IN PVOID BaseAddress,
- IN ULONG Length);
+#if !defined(RC_INVOKED)
+#define CONTEXT_AMD64 0x100000
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
+#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
+#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
-NTKERNELAPI
-VOID
-NTAPI
-KeSetImportanceDpc(
- IN OUT PRKDPC Dpc,
- IN KDPC_IMPORTANCE Importance);
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
-NTKERNELAPI
-LONG
-NTAPI
-KePulseEvent(
- IN OUT PRKEVENT Event,
- IN KPRIORITY Increment,
- IN BOOLEAN Wait);
+#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
-NTKERNELAPI
-LONG
-NTAPI
-KeSetBasePriorityThread(
- IN OUT PRKTHREAD Thread,
- IN LONG Increment);
+#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
+#define CONTEXT_SERVICE_ACTIVE 0x10000000
+#define CONTEXT_EXCEPTION_REQUEST 0x40000000
+#define CONTEXT_EXCEPTION_REPORTING 0x80000000
-NTKERNELAPI
-VOID
-NTAPI
-KeEnterCriticalRegion(VOID);
+#endif /* RC_INVOKED */
-NTKERNELAPI
-VOID
-NTAPI
-KeLeaveCriticalRegion(VOID);
+#endif /* _AMD64_ */
-NTKERNELAPI
-DECLSPEC_NORETURN
-VOID
-NTAPI
-KeBugCheck(
- IN ULONG BugCheckCode);
+typedef enum _INTERLOCKED_RESULT {
+ ResultNegative = RESULT_NEGATIVE,
+ ResultZero = RESULT_ZERO,
+ ResultPositive = RESULT_POSITIVE
+} INTERLOCKED_RESULT;
+
+typedef struct _OSVERSIONINFOA {
+ ULONG dwOSVersionInfoSize;
+ ULONG dwMajorVersion;
+ ULONG dwMinorVersion;
+ ULONG dwBuildNumber;
+ ULONG dwPlatformId;
+ CHAR szCSDVersion[128];
+} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
+typedef struct _OSVERSIONINFOW {
+ ULONG dwOSVersionInfoSize;
+ ULONG dwMajorVersion;
+ ULONG dwMinorVersion;
+ ULONG dwBuildNumber;
+ ULONG dwPlatformId;
+ WCHAR szCSDVersion[128];
+} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
-#if defined(SINGLE_GROUP_LEGACY_API)
+typedef struct _OSVERSIONINFOEXA {
+ ULONG dwOSVersionInfoSize;
+ ULONG dwMajorVersion;
+ ULONG dwMinorVersion;
+ ULONG dwBuildNumber;
+ ULONG dwPlatformId;
+ CHAR szCSDVersion[128];
+ USHORT wServicePackMajor;
+ USHORT wServicePackMinor;
+ USHORT wSuiteMask;
+ UCHAR wProductType;
+ UCHAR wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+typedef struct _OSVERSIONINFOEXW {
+ ULONG dwOSVersionInfoSize;
+ ULONG dwMajorVersion;
+ ULONG dwMinorVersion;
+ ULONG dwBuildNumber;
+ ULONG dwPlatformId;
+ WCHAR szCSDVersion[128];
+ USHORT wServicePackMajor;
+ USHORT wServicePackMinor;
+ USHORT wSuiteMask;
+ UCHAR wProductType;
+ UCHAR wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
-NTKERNELAPI
-VOID
-NTAPI
-KeSetTargetProcessorDpc(
- IN OUT PRKDPC Dpc,
- IN CCHAR Number);
+#ifdef UNICODE
+typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
+typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
+typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
+typedef OSVERSIONINFOW OSVERSIONINFO;
+typedef POSVERSIONINFOW POSVERSIONINFO;
+typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
+#else
+typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
+typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
+typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
+typedef OSVERSIONINFOA OSVERSIONINFO;
+typedef POSVERSIONINFOA POSVERSIONINFO;
+typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
+#endif /* UNICODE */
-NTKERNELAPI
-KAFFINITY
-NTAPI
-KeQueryActiveProcessors(VOID);
+/* Executive Types */
-#endif /* defined(SINGLE_GROUP_LEGACY_API) */
+#define PROTECTED_POOL 0x80000000
+typedef struct _ZONE_SEGMENT_HEADER {
+ SINGLE_LIST_ENTRY SegmentList;
+ PVOID Reserved;
+} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+typedef struct _ZONE_HEADER {
+ SINGLE_LIST_ENTRY FreeList;
+ SINGLE_LIST_ENTRY SegmentList;
+ ULONG BlockSize;
+ ULONG TotalSegmentSize;
+} ZONE_HEADER, *PZONE_HEADER;
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeAreApcsDisabled(VOID);
+/* Executive Functions */
+static __inline PVOID
+ExAllocateFromZone(
+ IN PZONE_HEADER Zone)
+{
+ if (Zone->FreeList.Next)
+ Zone->FreeList.Next = Zone->FreeList.Next->Next;
+ return (PVOID) Zone->FreeList.Next;
+}
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+static __inline PVOID
+ExFreeToZone(
+ IN PZONE_HEADER Zone,
+ IN PVOID Block)
+{
+ ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
+ Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
+ return ((PSINGLE_LIST_ENTRY) Block)->Next;
+}
+/*
+ * PVOID
+ * ExInterlockedAllocateFromZone(
+ * IN PZONE_HEADER Zone,
+ * IN PKSPIN_LOCK Lock)
+ */
+#define ExInterlockedAllocateFromZone(Zone, Lock) \
+ ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
-#if (NTDDI_VERSION >= NTDDI_WS03)
+/* PVOID
+ * ExInterlockedFreeToZone(
+ * IN PZONE_HEADER Zone,
+ * IN PVOID Block,
+ * IN PKSPIN_LOCK Lock);
+ */
+#define ExInterlockedFreeToZone(Zone, Block, Lock) \
+ ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
+/*
+ * BOOLEAN
+ * ExIsFullZone(
+ * IN PZONE_HEADER Zone)
+ */
+#define ExIsFullZone(Zone) \
+ ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeInvalidateAllCaches(VOID);
+/* BOOLEAN
+ * ExIsObjectInFirstZoneSegment(
+ * IN PZONE_HEADER Zone,
+ * IN PVOID Object);
+ */
+#define ExIsObjectInFirstZoneSegment(Zone,Object) \
+ ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
+ ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
+ (Zone)->TotalSegmentSize)) )
-#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
+#define ExAcquireResourceShared ExAcquireResourceSharedLite
+#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
+#define ExDeleteResource ExDeleteResourceLite
+#define ExInitializeResource ExInitializeResourceLite
+#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
+#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
+#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
+#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTKERNELAPI
NTSTATUS
NTAPI
-KeExpandKernelStackAndCallout(
- IN PEXPAND_STACK_CALLOUT Callout,
- IN PVOID Parameter OPTIONAL,
- IN SIZE_T Size);
+ExExtendZone(
+ IN OUT PZONE_HEADER Zone,
+ IN OUT PVOID Segment,
+ IN ULONG SegmentSize);
NTKERNELAPI
-VOID
+NTSTATUS
NTAPI
-KeEnterGuardedRegion(VOID);
+ExInitializeZone(
+ OUT PZONE_HEADER Zone,
+ IN ULONG BlockSize,
+ IN OUT PVOID InitialSegment,
+ IN ULONG InitialSegmentSize);
NTKERNELAPI
-VOID
+NTSTATUS
NTAPI
-KeLeaveGuardedRegion(VOID);
-
-
-#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
+ExInterlockedExtendZone(
+ IN OUT PZONE_HEADER Zone,
+ IN OUT PVOID Segment,
+ IN ULONG SegmentSize,
+ IN OUT PKSPIN_LOCK Lock);
-#if defined(SINGLE_GROUP_LEGACY_API)
NTKERNELAPI
-ULONG
+NTSTATUS
NTAPI
-KeQueryActiveProcessorCount(
- OUT PKAFFINITY ActiveProcessors OPTIONAL);
+ExUuidCreate(
+ OUT UUID *Uuid);
NTKERNELAPI
-ULONG
+DECLSPEC_NORETURN
+VOID
NTAPI
-KeQueryMaximumProcessorCount(VOID);
-
-#endif /* SINGLE_GROUP_LEGACY_API */
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+ExRaiseAccessViolation(
+ VOID);
NTKERNELAPI
-ULONG
+DECLSPEC_NORETURN
+VOID
NTAPI
-KeQueryActiveProcessorCountEx(
- IN USHORT GroupNumber);
+ExRaiseDatatypeMisalignment(
+ VOID);
-NTKERNELAPI
-ULONG
-NTAPI
-KeQueryMaximumProcessorCountEx(
- IN USHORT GroupNumber);
+#endif
-NTKERNELAPI
-USHORT
-NTAPI
-KeQueryActiveGroupCount(VOID);
+#ifdef _X86_
NTKERNELAPI
-USHORT
-NTAPI
-KeQueryMaximumGroupCount(VOID);
+INTERLOCKED_RESULT
+FASTCALL
+Exfi386InterlockedIncrementLong(
+ IN OUT LONG volatile *Addend);
NTKERNELAPI
-KAFFINITY
-NTAPI
-KeQueryGroupAffinity(
- IN USHORT GroupNumber);
+INTERLOCKED_RESULT
+FASTCALL
+Exfi386InterlockedDecrementLong(
+ IN PLONG Addend);
NTKERNELAPI
ULONG
-NTAPI
-KeGetCurrentProcessorNumberEx(
- OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL);
+FASTCALL
+Exfi386InterlockedExchangeUlong(
+ IN PULONG Target,
+ IN ULONG Value);
-NTKERNELAPI
-VOID
-NTAPI
-KeQueryNodeActiveAffinity(
- IN USHORT NodeNumber,
- OUT PGROUP_AFFINITY Affinity OPTIONAL,
- OUT PUSHORT Count OPTIONAL);
+#endif /* _X86_ */
-NTKERNELAPI
-USHORT
-NTAPI
-KeQueryNodeMaximumProcessorCount(
- IN USHORT NodeNumber);
+#ifndef _ARC_DDK_
+#define _ARC_DDK_
+typedef enum _CONFIGURATION_TYPE {
+ ArcSystem,
+ CentralProcessor,
+ FloatingPointProcessor,
+ PrimaryIcache,
+ PrimaryDcache,
+ SecondaryIcache,
+ SecondaryDcache,
+ SecondaryCache,
+ EisaAdapter,
+ TcAdapter,
+ ScsiAdapter,
+ DtiAdapter,
+ MultiFunctionAdapter,
+ DiskController,
+ TapeController,
+ CdromController,
+ WormController,
+ SerialController,
+ NetworkController,
+ DisplayController,
+ ParallelController,
+ PointerController,
+ KeyboardController,
+ AudioController,
+ OtherController,
+ DiskPeripheral,
+ FloppyDiskPeripheral,
+ TapePeripheral,
+ ModemPeripheral,
+ MonitorPeripheral,
+ PrinterPeripheral,
+ PointerPeripheral,
+ KeyboardPeripheral,
+ TerminalPeripheral,
+ OtherPeripheral,
+ LinePeripheral,
+ NetworkPeripheral,
+ SystemMemory,
+ DockingInformation,
+ RealModeIrqRoutingTable,
+ RealModePCIEnumeration,
+ MaximumType
+} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
+#endif /* !_ARC_DDK_ */
-NTKERNELAPI
-USHORT
-NTAPI
-KeQueryHighestNodeNumber(VOID);
+typedef struct _CONTROLLER_OBJECT {
+ CSHORT Type;
+ CSHORT Size;
+ PVOID ControllerExtension;
+ KDEVICE_QUEUE DeviceWaitQueue;
+ ULONG Spare1;
+ LARGE_INTEGER Spare2;
+} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
-NTKERNELAPI
-USHORT
-NTAPI
-KeGetCurrentNodeNumber(VOID);
+typedef struct _CONFIGURATION_INFORMATION {
+ ULONG DiskCount;
+ ULONG FloppyCount;
+ ULONG CdRomCount;
+ ULONG TapeCount;
+ ULONG ScsiPortCount;
+ ULONG SerialCount;
+ ULONG ParallelCount;
+ BOOLEAN AtDiskPrimaryAddressClaimed;
+ BOOLEAN AtDiskSecondaryAddressClaimed;
+ ULONG Version;
+ ULONG MediumChangerCount;
+} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
-NTKERNELAPI
+typedef
NTSTATUS
-NTAPI
-KeQueryLogicalProcessorRelationship(
- IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL,
- IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
- OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL,
- IN OUT PULONG Length);
+(NTAPI *PIO_QUERY_DEVICE_ROUTINE)(
+ IN PVOID Context,
+ IN PUNICODE_STRING PathName,
+ IN INTERFACE_TYPE BusType,
+ IN ULONG BusNumber,
+ IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
+ IN CONFIGURATION_TYPE ControllerType,
+ IN ULONG ControllerNumber,
+ IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
+ IN CONFIGURATION_TYPE PeripheralType,
+ IN ULONG PeripheralNumber,
+ IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
-NTKERNELAPI
-NTSTATUS
-NTAPI
-KeSetHardwareCounterConfiguration(
- IN PHARDWARE_COUNTER CounterArray,
+typedef
+VOID
+(NTAPI DRIVER_REINITIALIZE)(
+ IN struct _DRIVER_OBJECT *DriverObject,
+ IN PVOID Context,
IN ULONG Count);
-NTKERNELAPI
-NTSTATUS
-NTAPI
-KeQueryHardwareCounterConfiguration(
- OUT PHARDWARE_COUNTER CounterArray,
- IN ULONG MaximumCount,
- OUT PULONG Count);
-
+typedef DRIVER_REINITIALIZE *PDRIVER_REINITIALIZE;
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-
-/******************************************************************************
- * Memory manager Functions *
- ******************************************************************************/
+/** Filesystem runtime library routines **/
#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTKERNELAPI
-PPHYSICAL_MEMORY_RANGE
+BOOLEAN
NTAPI
-MmGetPhysicalMemoryRanges(VOID);
+FsRtlIsTotalDeviceFailure(
+ IN NTSTATUS Status);
+#endif
-NTKERNELAPI
-PHYSICAL_ADDRESS
-NTAPI
-MmGetPhysicalAddress(
- IN PVOID BaseAddress);
+/* Hardware Abstraction Layer Types */
-NTKERNELAPI
-BOOLEAN
-NTAPI
-MmIsNonPagedSystemAddressValid(
- IN PVOID VirtualAddress);
+typedef VOID
+(NTAPI *PciPin2Line)(
+ IN struct _BUS_HANDLER *BusHandler,
+ IN struct _BUS_HANDLER *RootHandler,
+ IN PCI_SLOT_NUMBER SlotNumber,
+ IN PPCI_COMMON_CONFIG PciData);
-NTKERNELAPI
-PVOID
-NTAPI
-MmAllocateNonCachedMemory(
- IN SIZE_T NumberOfBytes);
+typedef VOID
+(NTAPI *PciLine2Pin)(
+ IN struct _BUS_HANDLER *BusHandler,
+ IN struct _BUS_HANDLER *RootHandler,
+ IN PCI_SLOT_NUMBER SlotNumber,
+ IN PPCI_COMMON_CONFIG PciNewData,
+ IN PPCI_COMMON_CONFIG PciOldData);
-NTKERNELAPI
-VOID
-NTAPI
-MmFreeNonCachedMemory(
- IN PVOID BaseAddress,
- IN SIZE_T NumberOfBytes);
+typedef VOID
+(NTAPI *PciReadWriteConfig)(
+ IN struct _BUS_HANDLER *BusHandler,
+ IN PCI_SLOT_NUMBER Slot,
+ IN PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length);
-NTKERNELAPI
-PVOID
-NTAPI
-MmGetVirtualForPhysical(
- IN PHYSICAL_ADDRESS PhysicalAddress);
+#define PCI_DATA_TAG ' ICP'
+#define PCI_DATA_VERSION 1
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmMapUserAddressesToPage(
- IN PVOID BaseAddress,
- IN SIZE_T NumberOfBytes,
- IN PVOID PageAddress);
+typedef struct _PCIBUSDATA {
+ ULONG Tag;
+ ULONG Version;
+ PciReadWriteConfig ReadConfig;
+ PciReadWriteConfig WriteConfig;
+ PciPin2Line Pin2Line;
+ PciLine2Pin Line2Pin;
+ PCI_SLOT_NUMBER ParentSlot;
+ PVOID Reserved[4];
+} PCIBUSDATA, *PPCIBUSDATA;
-NTKERNELAPI
-PVOID
-NTAPI
-MmMapVideoDisplay(
- IN PHYSICAL_ADDRESS PhysicalAddress,
- IN SIZE_T NumberOfBytes,
- IN MEMORY_CACHING_TYPE CacheType);
+/* Hardware Abstraction Layer Functions */
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmMapViewInSessionSpace(
- IN PVOID Section,
- OUT PVOID *MappedBase,
- IN OUT PSIZE_T ViewSize);
+#if !defined(NO_LEGACY_DRIVERS)
-NTKERNELAPI
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTHALAPI
NTSTATUS
NTAPI
-MmMapViewInSystemSpace(
- IN PVOID Section,
- OUT PVOID *MappedBase,
- IN OUT PSIZE_T ViewSize);
+HalAssignSlotResources(
+ IN PUNICODE_STRING RegistryPath,
+ IN PUNICODE_STRING DriverClassName,
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN INTERFACE_TYPE BusType,
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ IN OUT PCM_RESOURCE_LIST *AllocatedResources);
-NTKERNELAPI
-BOOLEAN
+NTHALAPI
+ULONG
NTAPI
-MmIsAddressValid(
- IN PVOID VirtualAddress);
+HalGetInterruptVector(
+ IN INTERFACE_TYPE InterfaceType,
+ IN ULONG BusNumber,
+ IN ULONG BusInterruptLevel,
+ IN ULONG BusInterruptVector,
+ OUT PKIRQL Irql,
+ OUT PKAFFINITY Affinity);
-NTKERNELAPI
-BOOLEAN
+NTHALAPI
+ULONG
NTAPI
-MmIsThisAnNtAsSystem(VOID);
+HalSetBusData(
+ IN BUS_DATA_TYPE BusDataType,
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ IN PVOID Buffer,
+ IN ULONG Length);
-NTKERNELAPI
-VOID
-NTAPI
-MmLockPagableSectionByHandle(
- IN PVOID ImageSectionHandle);
+#endif
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmUnmapViewInSessionSpace(
- IN PVOID MappedBase);
+#endif /* !defined(NO_LEGACY_DRIVERS) */
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmUnmapViewInSystemSpace(
- IN PVOID MappedBase);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
-NTKERNELAPI
-VOID
+NTHALAPI
+PADAPTER_OBJECT
NTAPI
-MmUnsecureVirtualMemory(
- IN HANDLE SecureHandle);
+HalGetAdapter(
+ IN PDEVICE_DESCRIPTION DeviceDescription,
+ IN OUT PULONG NumberOfMapRegisters);
-NTKERNELAPI
-NTSTATUS
+NTHALAPI
+BOOLEAN
NTAPI
-MmRemovePhysicalMemory(
- IN PPHYSICAL_ADDRESS StartAddress,
- IN OUT PLARGE_INTEGER NumberOfBytes);
+HalMakeBeep(
+ IN ULONG Frequency);
-NTKERNELAPI
-HANDLE
+VOID
NTAPI
-MmSecureVirtualMemory(
- IN PVOID Address,
- IN SIZE_T Size,
- IN ULONG ProbeMode);
+HalPutDmaAdapter(
+ IN PADAPTER_OBJECT DmaAdapter);
-NTKERNELAPI
+NTHALAPI
VOID
NTAPI
-MmUnmapVideoDisplay(
- IN PVOID BaseAddress,
- IN SIZE_T NumberOfBytes);
+HalAcquireDisplayOwnership(
+ IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
-NTKERNELAPI
-NTSTATUS
+NTHALAPI
+ULONG
NTAPI
-MmAddPhysicalMemory(
- IN PPHYSICAL_ADDRESS StartAddress,
- IN OUT PLARGE_INTEGER NumberOfBytes);
+HalGetBusData(
+ IN BUS_DATA_TYPE BusDataType,
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ OUT PVOID Buffer,
+ IN ULONG Length);
-NTKERNELAPI
-PVOID
+NTHALAPI
+ULONG
NTAPI
-MmAllocateContiguousMemory(
- IN SIZE_T NumberOfBytes,
- IN PHYSICAL_ADDRESS HighestAcceptableAddress);
+HalGetBusDataByOffset(
+ IN BUS_DATA_TYPE BusDataType,
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ OUT PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length);
-NTKERNELAPI
-PVOID
+NTHALAPI
+ULONG
NTAPI
-MmAllocateContiguousMemorySpecifyCache(
- IN SIZE_T NumberOfBytes,
- IN PHYSICAL_ADDRESS LowestAcceptableAddress,
- IN PHYSICAL_ADDRESS HighestAcceptableAddress,
- IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
- IN MEMORY_CACHING_TYPE CacheType);
+HalSetBusDataByOffset(
+ IN BUS_DATA_TYPE BusDataType,
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ IN PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length);
-NTKERNELAPI
-PVOID
+NTHALAPI
+BOOLEAN
NTAPI
-MmAllocateContiguousMemorySpecifyCacheNode(
- IN SIZE_T NumberOfBytes,
- IN PHYSICAL_ADDRESS LowestAcceptableAddress,
- IN PHYSICAL_ADDRESS HighestAcceptableAddress,
- IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
- IN MEMORY_CACHING_TYPE CacheType,
- IN NODE_REQUIREMENT PreferredNode);
+HalTranslateBusAddress(
+ IN INTERFACE_TYPE InterfaceType,
+ IN ULONG BusNumber,
+ IN PHYSICAL_ADDRESS BusAddress,
+ IN OUT PULONG AddressSpace,
+ OUT PPHYSICAL_ADDRESS TranslatedAddress);
-NTKERNELAPI
-VOID
-NTAPI
-MmFreeContiguousMemory(
- IN PVOID BaseAddress);
+#endif
+#if (NTDDI_VERSION >= NTDDI_WINXP)
NTKERNELAPI
VOID
-NTAPI
-MmFreeContiguousMemorySpecifyCache(
- IN PVOID BaseAddress,
- IN SIZE_T NumberOfBytes,
- IN MEMORY_CACHING_TYPE CacheType);
-
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+FASTCALL
+HalExamineMBR(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG MBRTypeIdentifier,
+ OUT PVOID *Buffer);
+#endif
-#if (NTDDI_VERSION >= NTDDI_WINXP)
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+// nothing here
+#else
-NTKERNELAPI
-NTSTATUS
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+VOID
NTAPI
-MmAdvanceMdl(
- IN OUT PMDL Mdl,
- IN ULONG NumberOfBytes);
+IoFreeAdapterChannel(
+ IN PADAPTER_OBJECT AdapterObject);
-NTKERNELAPI
-PVOID
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+BOOLEAN
NTAPI
-MmAllocateMappingAddress(
- IN SIZE_T NumberOfBytes,
- IN ULONG PoolTag);
+IoFlushAdapterBuffers(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN PMDL Mdl,
+ IN PVOID MapRegisterBase,
+ IN PVOID CurrentVa,
+ IN ULONG Length,
+ IN BOOLEAN WriteToDevice);
-NTKERNELAPI
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
VOID
NTAPI
-MmFreeMappingAddress(
- IN PVOID BaseAddress,
- IN ULONG PoolTag);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmIsVerifierEnabled(
- OUT PULONG VerifierFlags);
+IoFreeMapRegisters(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN PVOID MapRegisterBase,
+ IN ULONG NumberOfMapRegisters);
-NTKERNELAPI
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
PVOID
NTAPI
-MmMapLockedPagesWithReservedMapping(
- IN PVOID MappingAddress,
- IN ULONG PoolTag,
- IN PMDL MemoryDescriptorList,
- IN MEMORY_CACHING_TYPE CacheType);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmProtectMdlSystemAddress(
- IN PMDL MemoryDescriptorList,
- IN ULONG NewProtect);
+HalAllocateCommonBuffer(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN ULONG Length,
+ OUT PPHYSICAL_ADDRESS LogicalAddress,
+ IN BOOLEAN CacheEnabled);
-NTKERNELAPI
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
VOID
NTAPI
-MmUnmapReservedMapping(
- IN PVOID BaseAddress,
- IN ULONG PoolTag,
- IN PMDL MemoryDescriptorList);
+HalFreeCommonBuffer(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN ULONG Length,
+ IN PHYSICAL_ADDRESS LogicalAddress,
+ IN PVOID VirtualAddress,
+ IN BOOLEAN CacheEnabled);
-NTKERNELAPI
-NTSTATUS
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+ULONG
NTAPI
-MmAddVerifierThunks(
- IN PVOID ThunkBuffer,
- IN ULONG ThunkBufferSize);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+HalReadDmaCounter(
+ IN PADAPTER_OBJECT AdapterObject);
-#if (NTDDI_VERSION >= NTDDI_WS03)
-NTKERNELAPI
+NTHALAPI
NTSTATUS
NTAPI
-MmCreateMirror(VOID);
-#endif
-
+HalAllocateAdapterChannel(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN PWAIT_CONTEXT_BLOCK Wcb,
+ IN ULONG NumberOfMapRegisters,
+ IN PDRIVER_CONTROL ExecutionRoutine);
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-NTSTATUS
-NTAPI
-MmRotatePhysicalView(
- IN PVOID VirtualAddress,
- IN OUT PSIZE_T NumberOfBytes,
- IN PMDLX NewMdl OPTIONAL,
- IN MM_ROTATE_DIRECTION Direction,
- IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction,
- IN PVOID Context OPTIONAL);
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-#endif
+#endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
-/******************************************************************************
- * Process Manager Functions *
- ******************************************************************************/
+/* I/O Manager Functions */
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtOpenProcess(
- OUT PHANDLE ProcessHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN PCLIENT_ID ClientId OPTIONAL);
+/*
+ * VOID IoAssignArcName(
+ * IN PUNICODE_STRING ArcName,
+ * IN PUNICODE_STRING DeviceName);
+ */
+#define IoAssignArcName(_ArcName, _DeviceName) ( \
+ IoCreateSymbolicLink((_ArcName), (_DeviceName)))
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtQueryInformationProcess(
- IN HANDLE ProcessHandle,
- IN PROCESSINFOCLASS ProcessInformationClass,
- OUT PVOID ProcessInformation OPTIONAL,
- IN ULONG ProcessInformationLength,
- OUT PULONG ReturnLength OPTIONAL);
+/*
+ * VOID
+ * IoDeassignArcName(
+ * IN PUNICODE_STRING ArcName)
+ */
+#define IoDeassignArcName IoDeleteSymbolicLink
#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
+#if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
NTKERNELAPI
NTSTATUS
NTAPI
-PsSetCreateProcessNotifyRoutine(
- IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
- IN BOOLEAN Remove);
+IoAllocateAdapterChannel(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG NumberOfMapRegisters,
+ IN PDRIVER_CONTROL ExecutionRoutine,
+ IN PVOID Context);
+#endif
-NTKERNELAPI
-NTSTATUS
+//DECLSPEC_DEPRECATED_DDK
+NTHALAPI
+PHYSICAL_ADDRESS
NTAPI
-PsSetCreateThreadNotifyRoutine(
- IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
+IoMapTransfer(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN PMDL Mdl,
+ IN PVOID MapRegisterBase,
+ IN PVOID CurrentVa,
+ IN OUT PULONG Length,
+ IN BOOLEAN WriteToDevice);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-PsSetLoadImageNotifyRoutine(
- IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
+IoAllocateController(
+ IN PCONTROLLER_OBJECT ControllerObject,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PDRIVER_CONTROL ExecutionRoutine,
+ IN PVOID Context OPTIONAL);
NTKERNELAPI
-HANDLE
+PCONTROLLER_OBJECT
NTAPI
-PsGetCurrentProcessId(VOID);
+IoCreateController(
+ IN ULONG Size);
NTKERNELAPI
-HANDLE
+VOID
NTAPI
-PsGetCurrentThreadId(VOID);
+IoDeleteController(
+ IN PCONTROLLER_OBJECT ControllerObject);
NTKERNELAPI
-BOOLEAN
+VOID
NTAPI
-PsGetVersion(
- OUT PULONG MajorVersion OPTIONAL,
- OUT PULONG MinorVersion OPTIONAL,
- OUT PULONG BuildNumber OPTIONAL,
- OUT PUNICODE_STRING CSDVersion OPTIONAL);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
+IoFreeController(
+ IN PCONTROLLER_OBJECT ControllerObject);
NTKERNELAPI
-HANDLE
+PCONFIGURATION_INFORMATION
NTAPI
-PsGetProcessId(
- IN PEPROCESS Process);
+IoGetConfigurationInformation(
+ VOID);
NTKERNELAPI
-HANDLE
+PDEVICE_OBJECT
NTAPI
-PsGetThreadId(
+IoGetDeviceToVerify(
IN PETHREAD Thread);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-PsRemoveCreateThreadNotifyRoutine(
- IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
+IoCancelFileOpen(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PFILE_OBJECT FileObject);
NTKERNELAPI
-NTSTATUS
+PGENERIC_MAPPING
NTAPI
-PsRemoveLoadImageNotifyRoutine(
- IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
+IoGetFileObjectGenericMapping(
+ VOID);
NTKERNELAPI
-LONGLONG
+PIRP
NTAPI
-PsGetProcessCreateTimeQuadPart(
- IN PEPROCESS Process);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+IoMakeAssociatedIrp(
+ IN PIRP Irp,
+ IN CCHAR StackSize);
-#if (NTDDI_VERSION >= NTDDI_WS03)
NTKERNELAPI
-HANDLE
+NTSTATUS
NTAPI
-PsGetThreadProcessId(
- IN PETHREAD Thread);
-#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+IoQueryDeviceDescription(
+ IN PINTERFACE_TYPE BusType OPTIONAL,
+ IN PULONG BusNumber OPTIONAL,
+ IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
+ IN PULONG ControllerNumber OPTIONAL,
+ IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
+ IN PULONG PeripheralNumber OPTIONAL,
+ IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
+ IN OUT PVOID Context OPTIONAL);
NTKERNELAPI
-BOOLEAN
+VOID
NTAPI
-PsSetCurrentThreadPrefetching(
- IN BOOLEAN Prefetching);
+IoRaiseHardError(
+ IN PIRP Irp,
+ IN PVPB Vpb OPTIONAL,
+ IN PDEVICE_OBJECT RealDeviceObject);
NTKERNELAPI
BOOLEAN
NTAPI
-PsIsCurrentThreadPrefetching(VOID);
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+IoRaiseInformationalHardError(
+ IN NTSTATUS ErrorStatus,
+ IN PUNICODE_STRING String OPTIONAL,
+ IN PKTHREAD Thread OPTIONAL);
-#if (NTDDI_VERSION >= NTDDI_VISTASP1)
NTKERNELAPI
-NTSTATUS
-NTAPI
-PsSetCreateProcessNotifyRoutineEx(
- IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
- IN BOOLEAN Remove);
-#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
-/******************************************************************************
- * Runtime Library Functions *
- ******************************************************************************/
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-
-
-#ifndef RTL_USE_AVL_TABLES
-
-NTSYSAPI
VOID
NTAPI
-RtlInitializeGenericTable(
- OUT PRTL_GENERIC_TABLE Table,
- IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
- IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
- IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
- IN PVOID TableContext OPTIONAL);
-
-NTSYSAPI
-PVOID
-NTAPI
-RtlInsertElementGenericTable(
- IN PRTL_GENERIC_TABLE Table,
- IN PVOID Buffer,
- IN CLONG BufferSize,
- OUT PBOOLEAN NewElement OPTIONAL);
-
-NTSYSAPI
-PVOID
-NTAPI
-RtlInsertElementGenericTableFull(
- IN PRTL_GENERIC_TABLE Table,
- IN PVOID Buffer,
- IN CLONG BufferSize,
- OUT PBOOLEAN NewElement OPTIONAL,
- IN PVOID NodeOrParent,
- IN TABLE_SEARCH_RESULT SearchResult);
-
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlDeleteElementGenericTable(
- IN PRTL_GENERIC_TABLE Table,
- IN PVOID Buffer);
+IoRegisterBootDriverReinitialization(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+ IN PVOID Context OPTIONAL);
-NTSYSAPI
-PVOID
+NTKERNELAPI
+VOID
NTAPI
-RtlLookupElementGenericTable(
- IN PRTL_GENERIC_TABLE Table,
- IN PVOID Buffer);
+IoRegisterDriverReinitialization(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+ IN PVOID Context OPTIONAL);
-NTSYSAPI
-PVOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlLookupElementGenericTableFull(
- IN PRTL_GENERIC_TABLE Table,
- IN PVOID Buffer,
- OUT PVOID *NodeOrParent,
- OUT TABLE_SEARCH_RESULT *SearchResult);
+IoAttachDeviceByPointer(
+ IN PDEVICE_OBJECT SourceDevice,
+ IN PDEVICE_OBJECT TargetDevice);
-NTSYSAPI
-PVOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlEnumerateGenericTable(
- IN PRTL_GENERIC_TABLE Table,
- IN BOOLEAN Restart);
+IoReportDetectedDevice(
+ IN PDRIVER_OBJECT DriverObject,
+ IN INTERFACE_TYPE LegacyBusType,
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ IN PCM_RESOURCE_LIST ResourceList OPTIONAL,
+ IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
+ IN BOOLEAN ResourceAssigned,
+ IN OUT PDEVICE_OBJECT *DeviceObject);
-NTSYSAPI
-PVOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlEnumerateGenericTableWithoutSplaying(
- IN PRTL_GENERIC_TABLE Table,
- IN OUT PVOID *RestartKey);
+IoReportResourceForDetection(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PCM_RESOURCE_LIST DriverList OPTIONAL,
+ IN ULONG DriverListSize OPTIONAL,
+ IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+ IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
+ IN ULONG DeviceListSize OPTIONAL,
+ OUT PBOOLEAN ConflictDetected);
-NTSYSAPI
-PVOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlGetElementGenericTable(
- IN PRTL_GENERIC_TABLE Table,
- IN ULONG I);
+IoReportResourceUsage(
+ IN PUNICODE_STRING DriverClassName OPTIONAL,
+ IN PDRIVER_OBJECT DriverObject,
+ IN PCM_RESOURCE_LIST DriverList OPTIONAL,
+ IN ULONG DriverListSize OPTIONAL,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
+ IN ULONG DeviceListSize OPTIONAL,
+ IN BOOLEAN OverrideConflict,
+ OUT PBOOLEAN ConflictDetected);
-NTSYSAPI
-ULONG
+NTKERNELAPI
+VOID
NTAPI
-RtlNumberGenericTableElements(
- IN PRTL_GENERIC_TABLE Table);
+IoSetHardErrorOrVerifyDevice(
+ IN PIRP Irp,
+ IN PDEVICE_OBJECT DeviceObject);
-NTSYSAPI
-BOOLEAN
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlIsGenericTableEmpty(
- IN PRTL_GENERIC_TABLE Table);
+IoAssignResources(
+ IN PUNICODE_STRING RegistryPath,
+ IN PUNICODE_STRING DriverClassName OPTIONAL,
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+ IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL,
+ IN OUT PCM_RESOURCE_LIST *AllocatedResources);
-#endif /* !RTL_USE_AVL_TABLES */
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-#define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
+#if (NTDDI_VERSION >= NTDDI_WINXP)
-NTSYSAPI
-PRTL_SPLAY_LINKS
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlSplay(
- IN OUT PRTL_SPLAY_LINKS Links);
+IoCreateDisk(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN struct _CREATE_DISK* Disk OPTIONAL);
-NTSYSAPI
-PRTL_SPLAY_LINKS
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlDelete(
- IN PRTL_SPLAY_LINKS Links);
+IoReadDiskSignature(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG BytesPerSector,
+ OUT PDISK_SIGNATURE Signature);
-NTSYSAPI
-VOID
-NTAPI
-RtlDeleteNoSplay(
- IN PRTL_SPLAY_LINKS Links,
- IN OUT PRTL_SPLAY_LINKS *Root);
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoReadPartitionTable(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN BOOLEAN ReturnRecognizedPartitions,
+ OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
-NTSYSAPI
-PRTL_SPLAY_LINKS
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlSubtreeSuccessor(
- IN PRTL_SPLAY_LINKS Links);
+IoReadPartitionTableEx(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
-NTSYSAPI
-PRTL_SPLAY_LINKS
-NTAPI
-RtlSubtreePredecessor(
- IN PRTL_SPLAY_LINKS Links);
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoSetPartitionInformation(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG PartitionNumber,
+ IN ULONG PartitionType);
-NTSYSAPI
-PRTL_SPLAY_LINKS
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlRealSuccessor(
- IN PRTL_SPLAY_LINKS Links);
+IoSetPartitionInformationEx(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG PartitionNumber,
+ IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
-NTSYSAPI
-PRTL_SPLAY_LINKS
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlRealPredecessor(
- IN PRTL_SPLAY_LINKS Links);
+IoSetSystemPartition(
+ IN PUNICODE_STRING VolumeNameString);
-NTSYSAPI
+NTKERNELAPI
BOOLEAN
NTAPI
-RtlPrefixUnicodeString(
- IN PCUNICODE_STRING String1,
- IN PCUNICODE_STRING String2,
- IN BOOLEAN CaseInSensitive);
-
-NTSYSAPI
-VOID
-NTAPI
-RtlUpperString(
- IN OUT PSTRING DestinationString,
- IN const PSTRING SourceString);
+IoSetThreadHardErrorMode(
+ IN BOOLEAN EnableHardErrors);
-NTSYSAPI
+NTKERNELAPI
NTSTATUS
NTAPI
-RtlUpcaseUnicodeString(
- IN OUT PUNICODE_STRING DestinationString,
- IN PCUNICODE_STRING SourceString,
- IN BOOLEAN AllocateDestinationString);
-
-NTSYSAPI
-VOID
-NTAPI
-RtlMapGenericMask(
- IN OUT PACCESS_MASK AccessMask,
- IN PGENERIC_MAPPING GenericMapping);
+IoVerifyPartitionTable(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN BOOLEAN FixErrors);
-NTSYSAPI
+NTKERNELAPI
NTSTATUS
NTAPI
-RtlVolumeDeviceToDosName(
+IoVolumeDeviceToDosName(
IN PVOID VolumeDeviceObject,
OUT PUNICODE_STRING DosName);
-NTSYSAPI
+NTKERNELAPI
NTSTATUS
-NTAPI
-RtlGetVersion(
- IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
+FASTCALL
+IoWritePartitionTable(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG SectorsPerTrack,
+ IN ULONG NumberOfHeads,
+ IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
-NTSYSAPI
+NTKERNELAPI
NTSTATUS
NTAPI
-RtlVerifyVersionInfo(
- IN PRTL_OSVERSIONINFOEXW VersionInfo,
- IN ULONG TypeMask,
- IN ULONGLONG ConditionMask);
+IoWritePartitionTableEx(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
-NTSYSAPI
-LONG
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlCompareString(
- IN const PSTRING String1,
- IN const PSTRING String2,
- IN BOOLEAN CaseInSensitive);
+IoAttachDeviceToDeviceStackSafe(
+ IN PDEVICE_OBJECT SourceDevice,
+ IN PDEVICE_OBJECT TargetDevice,
+ OUT PDEVICE_OBJECT *AttachedToDeviceObject);
-NTSYSAPI
-VOID
-NTAPI
-RtlCopyString(
- OUT PSTRING DestinationString,
- IN const PSTRING SourceString OPTIONAL);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlEqualString(
- IN const PSTRING String1,
- IN const PSTRING String2,
- IN BOOLEAN CaseInSensitive);
+/** Kernel debugger routines **/
NTSYSAPI
-NTSTATUS
+ULONG
NTAPI
-RtlCharToInteger(
- IN PCSZ String,
- IN ULONG Base OPTIONAL,
- OUT PULONG Value);
+DbgPrompt(
+ IN PCCH Prompt,
+ OUT PCH Response,
+ IN ULONG MaximumResponseLength);
-NTSYSAPI
-CHAR
-NTAPI
-RtlUpperChar(
- IN CHAR Character);
+/* Kernel Functions */
-NTSYSAPI
-ULONG
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
NTAPI
-RtlWalkFrameChain(
- OUT PVOID *Callers,
- IN ULONG Count,
- IN ULONG Flags);
+KeBugCheck(
+ IN ULONG BugCheckCode);
+NTKERNELAPI
+LONG
+NTAPI
+KePulseEvent(
+ IN OUT PRKEVENT Event,
+ IN KPRIORITY Increment,
+ IN BOOLEAN Wait);
+NTKERNELAPI
+LONG
+NTAPI
+KeSetBasePriorityThread(
+ IN OUT PRKTHREAD Thread,
+ IN LONG Increment);
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+#endif
+/* Memory Manager Types */
-#if (NTDDI_VERSION >= NTDDI_WINXP)
+typedef struct _PHYSICAL_MEMORY_RANGE {
+ PHYSICAL_ADDRESS BaseAddress;
+ LARGE_INTEGER NumberOfBytes;
+} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
+/* Memory Manager Functions */
-NTSYSAPI
-VOID
-NTAPI
-RtlInitializeGenericTableAvl(
- OUT PRTL_AVL_TABLE Table,
- IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
- IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
- IN PRTL_AVL_FREE_ROUTINE FreeRoutine,
- IN PVOID TableContext OPTIONAL);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
-NTSYSAPI
-PVOID
+NTKERNELAPI
+PPHYSICAL_MEMORY_RANGE
NTAPI
-RtlInsertElementGenericTableAvl(
- IN PRTL_AVL_TABLE Table,
- IN PVOID Buffer,
- IN CLONG BufferSize,
- OUT PBOOLEAN NewElement OPTIONAL);
+MmGetPhysicalMemoryRanges(
+ VOID);
-NTSYSAPI
-PVOID
+NTKERNELAPI
+PHYSICAL_ADDRESS
NTAPI
-RtlInsertElementGenericTableFullAvl(
- IN PRTL_AVL_TABLE Table,
- IN PVOID Buffer,
- IN CLONG BufferSize,
- OUT PBOOLEAN NewElement OPTIONAL,
- IN PVOID NodeOrParent,
- IN TABLE_SEARCH_RESULT SearchResult);
+MmGetPhysicalAddress(
+ IN PVOID BaseAddress);
-NTSYSAPI
+NTKERNELAPI
BOOLEAN
NTAPI
-RtlDeleteElementGenericTableAvl(
- IN PRTL_AVL_TABLE Table,
- IN PVOID Buffer);
+MmIsNonPagedSystemAddressValid(
+ IN PVOID VirtualAddress);
-NTSYSAPI
+NTKERNELAPI
PVOID
NTAPI
-RtlLookupElementGenericTableAvl(
- IN PRTL_AVL_TABLE Table,
- IN PVOID Buffer);
+MmAllocateNonCachedMemory(
+ IN SIZE_T NumberOfBytes);
-NTSYSAPI
-PVOID
+NTKERNELAPI
+VOID
NTAPI
-RtlLookupElementGenericTableFullAvl(
- IN PRTL_AVL_TABLE Table,
- IN PVOID Buffer,
- OUT PVOID *NodeOrParent,
- OUT TABLE_SEARCH_RESULT *SearchResult);
+MmFreeNonCachedMemory(
+ IN PVOID BaseAddress,
+ IN SIZE_T NumberOfBytes);
-NTSYSAPI
+NTKERNELAPI
PVOID
NTAPI
-RtlEnumerateGenericTableAvl(
- IN PRTL_AVL_TABLE Table,
- IN BOOLEAN Restart);
+MmGetVirtualForPhysical(
+ IN PHYSICAL_ADDRESS PhysicalAddress);
-NTSYSAPI
-PVOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlEnumerateGenericTableWithoutSplayingAvl(
- IN PRTL_AVL_TABLE Table,
- IN OUT PVOID *RestartKey);
+MmMapUserAddressesToPage(
+ IN PVOID BaseAddress,
+ IN SIZE_T NumberOfBytes,
+ IN PVOID PageAddress);
-NTSYSAPI
+NTKERNELAPI
PVOID
NTAPI
-RtlLookupFirstMatchingElementGenericTableAvl(
- IN PRTL_AVL_TABLE Table,
- IN PVOID Buffer,
- OUT PVOID *RestartKey);
+MmMapVideoDisplay(
+ IN PHYSICAL_ADDRESS PhysicalAddress,
+ IN SIZE_T NumberOfBytes,
+ IN MEMORY_CACHING_TYPE CacheType);
-NTSYSAPI
-PVOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlEnumerateGenericTableLikeADirectory(
- IN PRTL_AVL_TABLE Table,
- IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL,
- IN PVOID MatchData OPTIONAL,
- IN ULONG NextFlag,
- IN OUT PVOID *RestartKey,
- IN OUT PULONG DeleteCount,
- IN PVOID Buffer);
+MmMapViewInSessionSpace(
+ IN PVOID Section,
+ OUT PVOID *MappedBase,
+ IN OUT PSIZE_T ViewSize);
-NTSYSAPI
-PVOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlGetElementGenericTableAvl(
- IN PRTL_AVL_TABLE Table,
- IN ULONG I);
+MmMapViewInSystemSpace(
+ IN PVOID Section,
+ OUT PVOID *MappedBase,
+ IN OUT PSIZE_T ViewSize);
-NTSYSAPI
-ULONG
+NTKERNELAPI
+BOOLEAN
NTAPI
-RtlNumberGenericTableElementsAvl(
- IN PRTL_AVL_TABLE Table);
+MmIsAddressValid(
+ IN PVOID VirtualAddress);
-NTSYSAPI
+NTKERNELAPI
BOOLEAN
NTAPI
-RtlIsGenericTableEmptyAvl(
- IN PRTL_AVL_TABLE Table);
-
-
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
+MmIsThisAnNtAsSystem(
+ VOID);
-NTSYSAPI
+NTKERNELAPI
VOID
NTAPI
-RtlRunOnceInitialize(
- OUT PRTL_RUN_ONCE RunOnce);
+MmLockPagableSectionByHandle(
+ IN PVOID ImageSectionHandle);
-NTSYSAPI
+NTKERNELAPI
NTSTATUS
NTAPI
-RtlRunOnceExecuteOnce(
- IN OUT PRTL_RUN_ONCE RunOnce,
- IN PRTL_RUN_ONCE_INIT_FN InitFn,
- IN OUT PVOID Parameter OPTIONAL,
- OUT PVOID *Context OPTIONAL);
+MmUnmapViewInSessionSpace(
+ IN PVOID MappedBase);
-NTSYSAPI
+NTKERNELAPI
NTSTATUS
NTAPI
-RtlRunOnceBeginInitialize(
- IN OUT PRTL_RUN_ONCE RunOnce,
- IN ULONG Flags,
- OUT PVOID *Context OPTIONAL);
+MmUnmapViewInSystemSpace(
+ IN PVOID MappedBase);
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+VOID
NTAPI
-RtlRunOnceComplete(
- IN OUT PRTL_RUN_ONCE RunOnce,
- IN ULONG Flags,
- IN PVOID Context OPTIONAL);
+MmUnsecureVirtualMemory(
+ IN HANDLE SecureHandle);
-NTSYSAPI
-BOOLEAN
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlGetProductInfo(
- IN ULONG OSMajorVersion,
- IN ULONG OSMinorVersion,
- IN ULONG SpMajorVersion,
- IN ULONG SpMinorVersion,
- OUT PULONG ReturnedProductType);
-
+MmRemovePhysicalMemory(
+ IN PPHYSICAL_ADDRESS StartAddress,
+ IN OUT PLARGE_INTEGER NumberOfBytes);
+NTKERNELAPI
+HANDLE
+NTAPI
+MmSecureVirtualMemory(
+ IN PVOID Address,
+ IN SIZE_T Size,
+ IN ULONG ProbeMode);
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+NTKERNELAPI
+VOID
+NTAPI
+MmUnmapVideoDisplay(
+ IN PVOID BaseAddress,
+ IN SIZE_T NumberOfBytes);
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+/* NtXxx Functions */
-NTSYSAPI
-BOOLEAN
+NTSYSCALLAPI
+NTSTATUS
NTAPI
-RtlCreateHashTable(
- IN OUT PRTL_DYNAMIC_HASH_TABLE *HashTable OPTIONAL,
- IN ULONG Shift,
- IN ULONG Flags);
+NtOpenProcess(
+ OUT PHANDLE ProcessHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN PCLIENT_ID ClientId OPTIONAL);
-NTSYSAPI
-VOID
+NTSYSCALLAPI
+NTSTATUS
NTAPI
-RtlDeleteHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable);
+NtQueryInformationProcess(
+ IN HANDLE ProcessHandle,
+ IN PROCESSINFOCLASS ProcessInformationClass,
+ OUT PVOID ProcessInformation OPTIONAL,
+ IN ULONG ProcessInformationLength,
+ OUT PULONG ReturnLength OPTIONAL);
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlInsertEntryHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable,
- IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry,
- IN ULONG_PTR Signature,
- IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
+/** Process manager types **/
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlRemoveEntryHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable,
- IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry,
- IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
+typedef VOID
+(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)(
+ IN HANDLE ParentId,
+ IN HANDLE ProcessId,
+ IN BOOLEAN Create);
-NTSYSAPI
-PRTL_DYNAMIC_HASH_TABLE_ENTRY
-NTAPI
-RtlLookupEntryHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable,
- IN ULONG_PTR Signature,
- OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
+typedef VOID
+(NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)(
+ IN HANDLE ProcessId,
+ IN HANDLE ThreadId,
+ IN BOOLEAN Create);
-NTSYSAPI
-PRTL_DYNAMIC_HASH_TABLE_ENTRY
-NTAPI
-RtlGetNextEntryHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable,
- IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context);
+typedef VOID
+(NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(
+ IN PUNICODE_STRING FullImageName,
+ IN HANDLE ProcessId,
+ IN PIMAGE_INFO ImageInfo);
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlInitEnumerationHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable,
- OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+/** Process manager routines **/
-NTSYSAPI
-PRTL_DYNAMIC_HASH_TABLE_ENTRY
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlEnumerateEntryHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable,
- IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+PsSetLoadImageNotifyRoutine(
+ IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
-NTSYSAPI
-VOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlEndEnumerationHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable,
- IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+PsSetCreateThreadNotifyRoutine(
+ IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
-NTSYSAPI
-BOOLEAN
+NTKERNELAPI
+NTSTATUS
NTAPI
-RtlInitWeakEnumerationHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable,
- OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+PsSetCreateProcessNotifyRoutine(
+ IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
+ IN BOOLEAN Remove);
-NTSYSAPI
-PRTL_DYNAMIC_HASH_TABLE_ENTRY
+NTKERNELAPI
+HANDLE
NTAPI
-RtlWeaklyEnumerateEntryHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable,
- IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+PsGetCurrentProcessId(
+ VOID);
-NTSYSAPI
-VOID
+NTKERNELAPI
+HANDLE
NTAPI
-RtlEndWeakEnumerationHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable,
- IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
+PsGetCurrentThreadId(
+ VOID);
-NTSYSAPI
+NTKERNELAPI
BOOLEAN
NTAPI
-RtlExpandHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable);
+PsGetVersion(
+ OUT PULONG MajorVersion OPTIONAL,
+ OUT PULONG MinorVersion OPTIONAL,
+ OUT PULONG BuildNumber OPTIONAL,
+ OUT PUNICODE_STRING CSDVersion OPTIONAL);
-NTSYSAPI
-BOOLEAN
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTKERNELAPI
+HANDLE
NTAPI
-RtlContractHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable);
+PsGetProcessId(
+ IN PEPROCESS Process);
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsRemoveCreateThreadNotifyRoutine(
+ IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsRemoveLoadImageNotifyRoutine(
+ IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
-#if defined(_AMD64_) || defined(_IA64_)
+/* RTL Types */
+typedef struct _RTL_SPLAY_LINKS {
+ struct _RTL_SPLAY_LINKS *Parent;
+ struct _RTL_SPLAY_LINKS *LeftChild;
+ struct _RTL_SPLAY_LINKS *RightChild;
+} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
+/* RTL Functions */
-//DECLSPEC_DEPRECATED_DDK_WINXP
-FORCEINLINE
-LARGE_INTEGER
-NTAPI_INLINE
-RtlLargeIntegerDivide(
- IN LARGE_INTEGER Dividend,
- IN LARGE_INTEGER Divisor,
- OUT PLARGE_INTEGER Remainder OPTIONAL)
-{
- LARGE_INTEGER ret;
- ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
- if (Remainder)
- Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
- return ret;
-}
+#if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
+#define RtlGetCallersAddress(CallersAddress, CallersCaller) \
+ *CallersAddress = (PVOID)_ReturnAddress(); \
+ *CallersCaller = NULL;
#else
#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTSYSAPI
-LARGE_INTEGER
+VOID
NTAPI
-RtlLargeIntegerDivide(
- IN LARGE_INTEGER Dividend,
- IN LARGE_INTEGER Divisor,
- OUT PLARGE_INTEGER Remainder OPTIONAL);
+RtlGetCallersAddress(
+ OUT PVOID *CallersAddress,
+ OUT PVOID *CallersCaller);
#endif
-
-#endif /* defined(_AMD64_) || defined(_IA64_) */
-
-
-
-#ifdef RTL_USE_AVL_TABLES
-
-#define RtlInitializeGenericTable RtlInitializeGenericTableAvl
-#define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
-#define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
-#define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
-#define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
-#define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
-#define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
-#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
-#define RtlGetElementGenericTable RtlGetElementGenericTableAvl
-#define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
-#define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
-
-#endif /* RTL_USE_AVL_TABLES */
-
-#define RtlInitializeSplayLinks(Links) { \
- PRTL_SPLAY_LINKS _SplayLinks; \
- _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
- _SplayLinks->Parent = _SplayLinks; \
- _SplayLinks->LeftChild = NULL; \
- _SplayLinks->RightChild = NULL; \
-}
-
-#define RtlIsLeftChild(Links) \
- (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
-
-#define RtlIsRightChild(Links) \
- (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
-
-#define RtlRightChild(Links) \
- ((PRTL_SPLAY_LINKS)(Links))->RightChild
-
-#define RtlIsRoot(Links) \
- (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
-
-#define RtlLeftChild(Links) \
- ((PRTL_SPLAY_LINKS)(Links))->LeftChild
-
-#define RtlParent(Links) \
- ((PRTL_SPLAY_LINKS)(Links))->Parent
-
-#define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
- { \
- PRTL_SPLAY_LINKS _SplayParent; \
- PRTL_SPLAY_LINKS _SplayChild; \
- _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
- _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
- _SplayParent->LeftChild = _SplayChild; \
- _SplayChild->Parent = _SplayParent; \
- }
-
-#define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
- { \
- PRTL_SPLAY_LINKS _SplayParent; \
- PRTL_SPLAY_LINKS _SplayChild; \
- _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
- _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
- _SplayParent->RightChild = _SplayChild; \
- _SplayChild->Parent = _SplayParent; \
- }
+#endif
#if !defined(MIDL_PASS)
RtlConvertUlongToLuid(
IN ULONG Val)
{
- LUID Luid;
-
- Luid.LowPart = Val;
- Luid.HighPart = 0;
- return Luid;
+ LUID Luid;
+
+ Luid.LowPart = Val;
+ Luid.HighPart = 0;
+ return Luid;
+}
+
+#endif
+
+#if defined(_AMD64_) || defined(_IA64_)
+//DECLSPEC_DEPRECATED_DDK_WINXP
+__inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerDivide(
+ IN LARGE_INTEGER Dividend,
+ IN LARGE_INTEGER Divisor,
+ OUT PLARGE_INTEGER Remainder OPTIONAL)
+{
+ LARGE_INTEGER ret;
+ ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
+ if (Remainder)
+ Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
+ return ret;
}
-#endif /* !defined(MIDL_PASS) */
-
-#if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
-#define RtlGetCallersAddress(CallersAddress, CallersCaller) \
- *CallersAddress = (PVOID)_ReturnAddress(); \
- *CallersCaller = NULL;
#else
+
#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTSYSAPI
-VOID
+LARGE_INTEGER
NTAPI
-RtlGetCallersAddress(
- OUT PVOID *CallersAddress,
- OUT PVOID *CallersCaller);
-#endif
+RtlLargeIntegerDivide(
+ IN LARGE_INTEGER Dividend,
+ IN LARGE_INTEGER Divisor,
+ OUT PLARGE_INTEGER Remainder OPTIONAL);
#endif
-#if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
+#endif /* defined(_AMD64_) || defined(_IA64_) */
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
-FORCEINLINE
-VOID
+NTSYSAPI
+BOOLEAN
NTAPI
-RtlInitHashTableContext(
- IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context)
-{
- Context->ChainHead = NULL;
- Context->PrevLinkage = NULL;
-}
+RtlPrefixUnicodeString(
+ IN PCUNICODE_STRING String1,
+ IN PCUNICODE_STRING String2,
+ IN BOOLEAN CaseInSensitive);
-FORCEINLINE
+NTSYSAPI
VOID
NTAPI
-RtlInitHashTableContextFromEnumerator(
- IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context,
- IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator)
-{
- Context->ChainHead = Enumerator->ChainHead;
- Context->PrevLinkage = Enumerator->HashEntry.Linkage.Blink;
-}
+RtlUpperString(
+ IN OUT PSTRING DestinationString,
+ IN const PSTRING SourceString);
-FORCEINLINE
-VOID
+NTSYSAPI
+NTSTATUS
NTAPI
-RtlReleaseHashTableContext(
- IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context)
-{
- UNREFERENCED_PARAMETER(Context);
- return;
-}
+RtlUpcaseUnicodeString(
+ IN OUT PUNICODE_STRING DestinationString,
+ IN PCUNICODE_STRING SourceString,
+ IN BOOLEAN AllocateDestinationString);
-FORCEINLINE
-ULONG
+NTSYSAPI
+VOID
NTAPI
-RtlTotalBucketsHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable)
-{
- return HashTable->TableSize;
-}
+RtlMapGenericMask(
+ IN OUT PACCESS_MASK AccessMask,
+ IN PGENERIC_MAPPING GenericMapping);
-FORCEINLINE
-ULONG
+NTSYSAPI
+NTSTATUS
NTAPI
-RtlNonEmptyBucketsHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable)
-{
- return HashTable->NonEmptyBuckets;
-}
+RtlVolumeDeviceToDosName(
+ IN PVOID VolumeDeviceObject,
+ OUT PUNICODE_STRING DosName);
-FORCEINLINE
-ULONG
+NTSYSAPI
+NTSTATUS
NTAPI
-RtlEmptyBucketsHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable)
-{
- return HashTable->TableSize - HashTable->NonEmptyBuckets;
-}
+RtlGetVersion(
+ IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
-FORCEINLINE
-ULONG
+NTSYSAPI
+NTSTATUS
NTAPI
-RtlTotalEntriesHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable)
-{
- return HashTable->NumEntries;
-}
+RtlVerifyVersionInfo(
+ IN PRTL_OSVERSIONINFOEXW VersionInfo,
+ IN ULONG TypeMask,
+ IN ULONGLONG ConditionMask);
-FORCEINLINE
-ULONG
+NTSYSAPI
+LONG
NTAPI
-RtlActiveEnumeratorsHashTable(
- IN PRTL_DYNAMIC_HASH_TABLE HashTable)
-{
- return HashTable->NumEnumerators;
-}
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-#endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
+RtlCompareString(
+ IN const PSTRING String1,
+ IN const PSTRING String2,
+ BOOLEAN CaseInSensitive);
-/******************************************************************************
- * Security Manager Functions *
- ******************************************************************************/
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyString(
+ OUT PSTRING DestinationString,
+ IN const PSTRING SourceString OPTIONAL);
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-NTKERNELAPI
+NTSYSAPI
BOOLEAN
NTAPI
-SeSinglePrivilegeCheck(
- IN LUID PrivilegeValue,
- IN KPROCESSOR_MODE PreviousMode);
-
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-/******************************************************************************
- * ZwXxx Functions *
- ******************************************************************************/
-
-
+RtlEqualString(
+ IN const PSTRING String1,
+ IN const PSTRING String2,
+ IN BOOLEAN CaseInSensitive);
NTSYSAPI
NTSTATUS
NTAPI
-ZwAllocateLocallyUniqueId(
- OUT PLUID Luid);
+RtlCharToInteger(
+ IN PCSZ String,
+ IN ULONG Base OPTIONAL,
+ OUT PULONG Value);
NTSYSAPI
-NTSTATUS
+CHAR
NTAPI
-ZwTerminateProcess(
- IN HANDLE ProcessHandle OPTIONAL,
- IN NTSTATUS ExitStatus);
+RtlUpperChar(
+ IN CHAR Character);
NTSYSAPI
-NTSTATUS
+ULONG
NTAPI
-ZwOpenProcess(
- OUT PHANDLE ProcessHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN PCLIENT_ID ClientId OPTIONAL);
+RtlWalkFrameChain(
+ OUT PVOID *Callers,
+ IN ULONG Count,
+ IN ULONG Flags);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+/* Security reference monitor routines */
#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeSinglePrivilegeCheck(
+ IN LUID PrivilegeValue,
+ IN KPROCESSOR_MODE PreviousMode);
+#endif
+/* ZwXxx Functions */
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTSTATUS
NTAPI
IN LONG Period OPTIONAL,
OUT PBOOLEAN PreviousState OPTIONAL);
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwDisplayString(
- IN PUNICODE_STRING String);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwPowerInformation(
- IN POWER_INFORMATION_LEVEL PowerInformationLevel,
- IN PVOID InputBuffer OPTIONAL,
- IN ULONG InputBufferLength,
- OUT PVOID OutputBuffer OPTIONAL,
- IN ULONG OutputBufferLength);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwQueryVolumeInformationFile(
- IN HANDLE FileHandle,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- OUT PVOID FsInformation,
- IN ULONG Length,
- IN FS_INFORMATION_CLASS FsInformationClass);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwDeviceIoControlFile(
- IN HANDLE FileHandle,
- IN HANDLE Event OPTIONAL,
- IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
- IN PVOID ApcContext OPTIONAL,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN ULONG IoControlCode,
- IN PVOID InputBuffer OPTIONAL,
- IN ULONG InputBufferLength,
- OUT PVOID OutputBuffer OPTIONAL,
- IN ULONG OutputBufferLength);
-
-
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-NTSTATUS
-NTAPI
-ZwSetTimerEx(
- IN HANDLE TimerHandle,
- IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass,
- IN OUT PVOID TimerSetInformation,
- IN ULONG TimerSetInformationLength);
-
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-
-
-/* UNSORTED */
-
-#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
- ((ConditionMask) = VerSetConditionMask((ConditionMask), \
- (TypeBitMask), (ComparisonType)))
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-NTSYSAPI
-ULONGLONG
-NTAPI
-VerSetConditionMask(
- IN ULONGLONG ConditionMask,
- IN ULONG TypeMask,
- IN UCHAR Condition);
-#endif
-
-typedef struct _KERNEL_USER_TIMES {
- LARGE_INTEGER CreateTime;
- LARGE_INTEGER ExitTime;
- LARGE_INTEGER KernelTime;
- LARGE_INTEGER UserTime;
-} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
-
-/* NtXxx Functions */
-
-typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION {
- SystemFirmwareTable_Enumerate,
- SystemFirmwareTable_Get
-} SYSTEM_FIRMWARE_TABLE_ACTION;
-
-typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION {
- ULONG ProviderSignature;
- SYSTEM_FIRMWARE_TABLE_ACTION Action;
- ULONG TableID;
- ULONG TableBufferLength;
- UCHAR TableBuffer[ANYSIZE_ARRAY];
-} SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
-
-typedef NTSTATUS
-(__cdecl *PFNFTH)(
- IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo);
-
-typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER {
- ULONG ProviderSignature;
- BOOLEAN Register;
- PFNFTH FirmwareTableHandler;
- PVOID DriverObject;
-} SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER;
-
-typedef ULONG_PTR
-(NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
- IN PVOID Context);
-
-typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
- PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
- PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
-} DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
-
-#define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
-#define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
-#define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
-#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
-#define DRIVER_VERIFIER_IO_CHECKING 0x0010
-
-#define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
-#define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
-
-#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
-#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
-
-#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
-#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
-
-#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
-#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
- (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
-
-#define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
-#define SHARED_GLOBAL_FLAGS_SPARE \
- (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
-
-#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
-#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
- (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
-
-#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
-#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
- (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
-
-#define EX_INIT_BITS(Flags, Bit) \
- *((Flags)) |= (Bit) // Safe to use before concurrently accessible
-
-#define EX_TEST_SET_BIT(Flags, Bit) \
- InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
-
-#define EX_TEST_CLEAR_BIT(Flags, Bit) \
- InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
-
-#define PCCARD_MAP_ERROR 0x01
-#define PCCARD_DEVICE_PCI 0x10
-
-#define PCCARD_SCAN_DISABLED 0x01
-#define PCCARD_MAP_ZERO 0x02
-#define PCCARD_NO_TIMER 0x03
-#define PCCARD_NO_PIC 0x04
-#define PCCARD_NO_LEGACY_BASE 0x05
-#define PCCARD_DUP_LEGACY_BASE 0x06
-#define PCCARD_NO_CONTROLLERS 0x07
-
-#define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
-
-/* Filesystem runtime library routines */
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlIsTotalDeviceFailure(
- IN NTSTATUS Status);
#endif
-/* FIXME : These definitions below doesn't belong to NTDDK */
#ifdef __cplusplus
}
#endif
+
+
+#endif /* _NTDDK_ */
#define _NTIFS_INCLUDED_
#define _GNU_NTIFS_
+/* Helper macro to enable gcc's extension. */
+#ifndef __GNU_EXTENSION
+#ifdef __GNUC__
+#define __GNU_EXTENSION __extension__
+#else
+#define __GNU_EXTENSION
+#endif
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
+#if !defined(_NTHALDLL_) && !defined(_BLDR_)
+#define NTHALAPI DECLSPEC_IMPORT
+#else
+#define NTHALAPI
+#endif
+
+/* For ReactOS */
+#if !defined(_NTOSKRNL_) && !defined(_BLDR_)
+#define NTKERNELAPI DECLSPEC_IMPORT
+#else
+#define NTKERNELAPI
+#endif
+
/* Dependencies */
#include <ntddk.h>
#include <excpt.h>
#define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
#endif
+#define PsGetCurrentProcess IoGetCurrentProcess
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+extern NTSYSAPI volatile CCHAR KeNumberProcessors;
+#elif (NTDDI_VERSION >= NTDDI_WINXP)
+extern NTSYSAPI CCHAR KeNumberProcessors;
+#else
+extern PCCHAR KeNumberProcessors;
+#endif
+
typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
typedef STRING LSA_STRING, *PLSA_STRING;
typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
MaxObjectInfoClass /* FIXME, not in WDK */
} OBJECT_INFORMATION_CLASS;
+#if (NTDDI_VERSION >= NTDDI_NT4)
+
NTSYSCALLAPI
NTSTATUS
NTAPI
IN ULONG ObjectInformationLength,
OUT PULONG ReturnLength OPTIONAL);
+#endif
+
#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTSYSCALLAPI
#define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information"
+#define DEVICE_TYPE ULONG
+
+#define FILE_DEVICE_BEEP 0x00000001
+#define FILE_DEVICE_CD_ROM 0x00000002
+#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
+#define FILE_DEVICE_CONTROLLER 0x00000004
+#define FILE_DEVICE_DATALINK 0x00000005
+#define FILE_DEVICE_DFS 0x00000006
+#define FILE_DEVICE_DISK 0x00000007
+#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
+#define FILE_DEVICE_FILE_SYSTEM 0x00000009
+#define FILE_DEVICE_INPORT_PORT 0x0000000a
+#define FILE_DEVICE_KEYBOARD 0x0000000b
+#define FILE_DEVICE_MAILSLOT 0x0000000c
+#define FILE_DEVICE_MIDI_IN 0x0000000d
+#define FILE_DEVICE_MIDI_OUT 0x0000000e
+#define FILE_DEVICE_MOUSE 0x0000000f
+#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
+#define FILE_DEVICE_NAMED_PIPE 0x00000011
+#define FILE_DEVICE_NETWORK 0x00000012
+#define FILE_DEVICE_NETWORK_BROWSER 0x00000013
+#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
+#define FILE_DEVICE_NULL 0x00000015
+#define FILE_DEVICE_PARALLEL_PORT 0x00000016
+#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
+#define FILE_DEVICE_PRINTER 0x00000018
+#define FILE_DEVICE_SCANNER 0x00000019
+#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
+#define FILE_DEVICE_SERIAL_PORT 0x0000001b
+#define FILE_DEVICE_SCREEN 0x0000001c
+#define FILE_DEVICE_SOUND 0x0000001d
+#define FILE_DEVICE_STREAMS 0x0000001e
+#define FILE_DEVICE_TAPE 0x0000001f
+#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
+#define FILE_DEVICE_TRANSPORT 0x00000021
+#define FILE_DEVICE_UNKNOWN 0x00000022
+#define FILE_DEVICE_VIDEO 0x00000023
+#define FILE_DEVICE_VIRTUAL_DISK 0x00000024
+#define FILE_DEVICE_WAVE_IN 0x00000025
+#define FILE_DEVICE_WAVE_OUT 0x00000026
+#define FILE_DEVICE_8042_PORT 0x00000027
+#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
+#define FILE_DEVICE_BATTERY 0x00000029
+#define FILE_DEVICE_BUS_EXTENDER 0x0000002a
+#define FILE_DEVICE_MODEM 0x0000002b
+#define FILE_DEVICE_VDM 0x0000002c
+#define FILE_DEVICE_MASS_STORAGE 0x0000002d
+#define FILE_DEVICE_SMB 0x0000002e
+#define FILE_DEVICE_KS 0x0000002f
+#define FILE_DEVICE_CHANGER 0x00000030
+#define FILE_DEVICE_SMARTCARD 0x00000031
+#define FILE_DEVICE_ACPI 0x00000032
+#define FILE_DEVICE_DVD 0x00000033
+#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
+#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
+#define FILE_DEVICE_DFS_VOLUME 0x00000036
+#define FILE_DEVICE_SERENUM 0x00000037
+#define FILE_DEVICE_TERMSRV 0x00000038
+#define FILE_DEVICE_KSEC 0x00000039
+#define FILE_DEVICE_FIPS 0x0000003A
+#define FILE_DEVICE_INFINIBAND 0x0000003B
+#define FILE_DEVICE_VMBUS 0x0000003E
+#define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
+#define FILE_DEVICE_WPD 0x00000040
+#define FILE_DEVICE_BLUETOOTH 0x00000041
+#define FILE_DEVICE_MT_COMPOSITE 0x00000042
+#define FILE_DEVICE_MT_TRANSPORT 0x00000043
+#define FILE_DEVICE_BIOMETRIC 0x00000044
+#define FILE_DEVICE_PMI 0x00000045
+
+#define CTL_CODE(DeviceType, Function, Method, Access) \
+ (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
+
+#define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
+
#define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
+#define METHOD_BUFFERED 0
+#define METHOD_IN_DIRECT 1
+#define METHOD_OUT_DIRECT 2
+#define METHOD_NEITHER 3
#define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
#define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
+#define FILE_ANY_ACCESS 0x00000000
+#define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
+#define FILE_READ_ACCESS 0x00000001
+#define FILE_WRITE_ACCESS 0x00000002
+
typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
typedef enum _SECURITY_LOGON_TYPE {
#define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
-#define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
-
typedef struct _KQUEUE {
DISPATCHER_HEADER Header;
LIST_ENTRY EntryListHead;
KeAcquireQueuedSpinLock(
IN OUT KSPIN_LOCK_QUEUE_NUMBER Number);
-_DECL_HAL_KE_IMPORT
+NTHALAPI
VOID
FASTCALL
KeReleaseQueuedSpinLock(
#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTKERNELAPI
+VOID
+NTAPI
+SeCaptureSubjectContext(
+ OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeLockSubjectContext(
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeUnlockSubjectContext(
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
NTKERNELAPI
VOID
NTAPI
extern NTKERNELAPI PSE_EXPORTS SeExports;
+#if !defined(_PSGETCURRENTTHREAD_)
+#define _PSGETCURRENTTHREAD_
+
+FORCEINLINE
+PETHREAD
+PsGetCurrentThread(
+ VOID)
+{
+ return (PETHREAD)KeGetCurrentThread();
+}
+#endif
+
#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTKERNELAPI
IN POOL_TYPE PoolType,
IN ULONG_PTR Amount);
-NTKERNELAPI
-NTSTATUS
-NTAPI
-PsAssignImpersonationToken(
- IN PETHREAD Thread,
- IN HANDLE Token OPTIONAL);
-
-NTKERNELAPI
-HANDLE
-NTAPI
-PsReferencePrimaryToken(
- IN OUT PEPROCESS Process);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+#endif
#if (NTDDI_VERSION >= NTDDI_WINXP)
IN PKEVENT Event,
OUT PIO_STATUS_BLOCK IoStatusBlock);
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetAttachedDevice(
+ IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetAttachedDeviceReference(
+ IN PDEVICE_OBJECT DeviceObject);
+
NTKERNELAPI
PDEVICE_OBJECT
NTAPI
IoSetTopLevelIrp(
IN PIRP Irp OPTIONAL);
+NTKERNELAPI
+VOID
+NTAPI
+IoStartNextPacket(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN BOOLEAN Cancelable);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoStartNextPacketByKey(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN BOOLEAN Cancelable,
+ IN ULONG Key);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoStartPacket(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp,
+ IN PULONG Key OPTIONAL,
+ IN PDRIVER_CANCEL CancelFunction OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoStartTimer(
+ IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoStopTimer(
+ IN PDEVICE_OBJECT DeviceObject);
+
NTKERNELAPI
NTSTATUS
NTAPI
IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN AllowRawMount);
+NTKERNELAPI
+VOID
+NTAPI
+IoWriteErrorLogEntry(
+ IN PVOID ElEntry);
+
NTKERNELAPI
NTSTATUS
NTAPI
IN PFILE_OBJECT FileObject,
OUT POBJECT_NAME_INFORMATION *ObjectNameInformation);
+VOID
+NTAPI
+IoSetStartIoAttributes(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN BOOLEAN DeferredStartIo,
+ IN BOOLEAN NonCancelable);
+
NTKERNELAPI
NTSTATUS
NTAPI
#define PO_CB_LID_SWITCH_STATE 4
#define PO_CB_PROCESSOR_POWER_POLICY 5
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+PVOID
+NTAPI
+PoRegisterSystemState(
+ IN OUT PVOID StateHandle OPTIONAL,
+ IN EXECUTION_STATE Flags);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoUnregisterSystemState(
+ IN OUT PVOID StateHandle);
+
+NTKERNELAPI
+POWER_STATE
+NTAPI
+PoSetPowerState(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN POWER_STATE_TYPE Type,
+ IN POWER_STATE State);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoCallDriver(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN OUT PIRP Irp);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoStartNextPowerIrp(
+ IN OUT PIRP Irp);
+
+NTKERNELAPI
+PULONG
+NTAPI
+PoRegisterDeviceForIdleDetection(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG ConservationIdleTime,
+ IN ULONG PerformanceIdleTime,
+ IN DEVICE_POWER_STATE State);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
#if (NTDDI_VERSION >= NTDDI_WINXP)
NTKERNELAPI
NTSTATUS
IN OUT PWORK_QUEUE_ITEM WorkItem);
#endif
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoRegisterPowerSettingCallback(
+ IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+ IN LPCGUID SettingGuid,
+ IN PPOWER_SETTING_CALLBACK Callback,
+ IN PVOID Context OPTIONAL,
+ OUT PVOID *Handle);
+
+NTKERNELAPI
+NTSTATUS
+PoUnregisterPowerSettingCallback(
+ IN OUT PVOID Handle);
+
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN6SP1)
+NTKERNELAPI
+VOID
+NTAPI
+PoSetDeviceBusyEx(
+ IN OUT PULONG IdlePointer);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoCreatePowerRequest(
+ OUT PVOID *PowerRequest,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PCOUNTED_REASON_CONTEXT Context);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoSetPowerRequest(
+ IN OUT PVOID PowerRequest,
+ IN POWER_REQUEST_TYPE Type);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PoClearPowerRequest(
+ IN OUT PVOID PowerRequest,
+ IN POWER_REQUEST_TYPE Type);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoDeletePowerRequest(
+ IN OUT PVOID PowerRequest);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoStartDeviceBusy(
+ IN OUT PULONG IdlePointer);
+
+NTKERNELAPI
+VOID
+NTAPI
+PoEndDeviceBusy(
+ IN OUT PULONG IdlePointer);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PoQueryWatchdogTime(
+ IN PDEVICE_OBJECT Pdo,
+ OUT PULONG SecondsRemaining);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
#if defined(_IA64_)
#if (NTDDI_VERSION >= NTDDI_WIN2K)
//DECLSPEC_DEPRECATED_DDK
LONG volatile LockRequestsInProgress;
} FILE_LOCK, *PFILE_LOCK;
-typedef struct _TUNNEL {
- FAST_MUTEX Mutex;
- PRTL_SPLAY_LINKS Cache;
- LIST_ENTRY TimerQueue;
- USHORT NumEntries;
-} TUNNEL, *PTUNNEL;
-
-typedef enum _FSRTL_COMPARISON_RESULT {
- LessThan = -1,
- EqualTo = 0,
- GreaterThan = 1
-} FSRTL_COMPARISON_RESULT;
-
-#define FSRTL_FAT_LEGAL 0x01
-#define FSRTL_HPFS_LEGAL 0x02
-#define FSRTL_NTFS_LEGAL 0x04
-#define FSRTL_WILD_CHARACTER 0x08
-#define FSRTL_OLE_LEGAL 0x10
-#define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
-typedef struct _BASE_MCB {
- ULONG MaximumPairCount;
- ULONG PairCount;
- USHORT PoolType;
- USHORT Flags;
- PVOID Mapping;
-} BASE_MCB, *PBASE_MCB;
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlCopyRead(
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN BOOLEAN Wait,
+ IN ULONG LockKey,
+ OUT PVOID Buffer,
+ OUT PIO_STATUS_BLOCK IoStatus,
+ IN PDEVICE_OBJECT DeviceObject);
-typedef struct _LARGE_MCB {
- PKGUARDED_MUTEX GuardedMutex;
- BASE_MCB BaseMcb;
-} LARGE_MCB, *PLARGE_MCB;
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlCopyWrite(
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN BOOLEAN Wait,
+ IN ULONG LockKey,
+ IN PVOID Buffer,
+ OUT PIO_STATUS_BLOCK IoStatus,
+ IN PDEVICE_OBJECT DeviceObject);
-#define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlMdlReadDev(
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN ULONG LockKey,
+ OUT PMDL *MdlChain,
+ OUT PIO_STATUS_BLOCK IoStatus,
+ IN PDEVICE_OBJECT DeviceObject OPTIONAL);
-typedef struct _MCB {
- LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
-} MCB, *PMCB;
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlMdlReadCompleteDev(
+ IN PFILE_OBJECT FileObject,
+ IN PMDL MdlChain,
+ IN PDEVICE_OBJECT DeviceObject OPTIONAL);
-typedef PVOID OPLOCK, *POPLOCK;
-
-typedef VOID
-(NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
- IN PVOID Context,
- IN PIRP Irp);
-
-typedef VOID
-(NTAPI *POPLOCK_FS_PREPOST_IRP) (
- IN PVOID Context,
- IN PIRP Irp);
-
-#if (NTDDI_VERSION >= NTDDI_VISTASP1)
-#define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-#define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
-#define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
-#define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
-#define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-typedef struct _OPLOCK_KEY_ECP_CONTEXT {
- GUID OplockKey;
- ULONG Reserved;
-} OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
-
-DEFINE_GUID( GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
-
-#endif
-
-#define FSRTL_VOLUME_DISMOUNT 1
-#define FSRTL_VOLUME_DISMOUNT_FAILED 2
-#define FSRTL_VOLUME_LOCK 3
-#define FSRTL_VOLUME_LOCK_FAILED 4
-#define FSRTL_VOLUME_UNLOCK 5
-#define FSRTL_VOLUME_MOUNT 6
-#define FSRTL_VOLUME_NEEDS_CHKDSK 7
-#define FSRTL_VOLUME_WORM_NEAR_FULL 8
-#define FSRTL_VOLUME_WEARING_OUT 9
-#define FSRTL_VOLUME_FORCED_CLOSED 10
-#define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
-#define FSRTL_VOLUME_PREPARING_EJECT 12
-#define FSRTL_VOLUME_CHANGE_SIZE 13
-#define FSRTL_VOLUME_BACKGROUND_FORMAT 14
-
-typedef PVOID PNOTIFY_SYNC;
-
-typedef BOOLEAN
-(NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
- IN PVOID NotifyContext,
- IN PVOID TargetContext OPTIONAL,
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
-
-typedef BOOLEAN
-(NTAPI *PFILTER_REPORT_CHANGE) (
- IN PVOID NotifyContext,
- IN PVOID FilterContext);
-
-typedef VOID
-(NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) (
- IN PVOID Context,
- IN PKEVENT Event);
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-#define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
-#define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
-#define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
-
-#define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
-
-#define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
-#define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
-
-#define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
-
-#define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
-#define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
-
-typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1 {
- ULONG32 ProviderId;
-} FSRTL_MUP_PROVIDER_INFO_LEVEL_1, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1;
-
-typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 {
- ULONG32 ProviderId;
- UNICODE_STRING ProviderName;
-} FSRTL_MUP_PROVIDER_INFO_LEVEL_2, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2;
-
-typedef VOID
-(*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) (
- IN OUT PVOID EcpContext,
- IN LPCGUID EcpType);
-
-typedef struct _ECP_LIST ECP_LIST, *PECP_LIST;
-
-typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS;
-typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS;
-typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS;
-
-typedef enum _FSRTL_CHANGE_BACKING_TYPE {
- ChangeDataControlArea,
- ChangeImageControlArea,
- ChangeSharedCacheMap
-} FSRTL_CHANGE_BACKING_TYPE, *PFSRTL_CHANGE_BACKING_TYPE;
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-typedef struct _FSRTL_PER_FILE_CONTEXT {
- LIST_ENTRY Links;
- PVOID OwnerId;
- PVOID InstanceId;
- PFREE_FUNCTION FreeCallback;
-} FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT;
-
-typedef struct _FSRTL_PER_STREAM_CONTEXT {
- LIST_ENTRY Links;
- PVOID OwnerId;
- PVOID InstanceId;
- PFREE_FUNCTION FreeCallback;
-} FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-typedef VOID
-(*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) (
- IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
-#endif
-
-typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
- LIST_ENTRY Links;
- PVOID OwnerId;
- PVOID InstanceId;
-} FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
-
-#define FsRtlEnterFileSystem KeEnterCriticalRegion
-#define FsRtlExitFileSystem KeLeaveCriticalRegion
-
-#define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
-#define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlCopyRead(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- IN ULONG LockKey,
- OUT PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlCopyWrite(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- IN ULONG LockKey,
- IN PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlMdlReadDev(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN ULONG LockKey,
- OUT PMDL *MdlChain,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject OPTIONAL);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlMdlReadCompleteDev(
- IN PFILE_OBJECT FileObject,
- IN PMDL MdlChain,
- IN PDEVICE_OBJECT DeviceObject OPTIONAL);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlPrepareMdlWriteDev(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN ULONG LockKey,
- OUT PMDL *MdlChain,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlPrepareMdlWriteDev(
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN ULONG LockKey,
+ OUT PMDL *MdlChain,
+ OUT PIO_STATUS_BLOCK IoStatus,
+ IN PDEVICE_OBJECT DeviceObject);
NTKERNELAPI
BOOLEAN
IN PVOID Context,
IN BOOLEAN AlreadySynchronized);
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlInitializeTunnelCache(
- IN PTUNNEL Cache);
-
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlAddToTunnelCache(
- IN PTUNNEL Cache,
- IN ULONGLONG DirectoryKey,
- IN PUNICODE_STRING ShortName,
- IN PUNICODE_STRING LongName,
- IN BOOLEAN KeyByShortName,
- IN ULONG DataLength,
- IN PVOID Data);
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+#if (NTDDI_VERSION >= NTDDI_WIN7)
NTKERNELAPI
BOOLEAN
NTAPI
-FsRtlFindInTunnelCache(
- IN PTUNNEL Cache,
- IN ULONGLONG DirectoryKey,
- IN PUNICODE_STRING Name,
- OUT PUNICODE_STRING ShortName,
- OUT PUNICODE_STRING LongName,
- IN OUT PULONG DataLength,
- OUT PVOID Data);
+FsRtlAreThereCurrentOrInProgressFileLocks(
+ IN PFILE_LOCK FileLock);
+#endif
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlDeleteKeyFromTunnelCache(
- IN PTUNNEL Cache,
- IN ULONGLONG DirectoryKey);
+#pragma pack(push,4)
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlDeleteTunnelCache(
- IN PTUNNEL Cache);
+#ifndef VER_PRODUCTBUILD
+#define VER_PRODUCTBUILD 10000
+#endif
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlDissectDbcs(
- IN ANSI_STRING Name,
- OUT PANSI_STRING FirstPart,
- OUT PANSI_STRING RemainingPart);
+#include "csq.h"
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlDoesDbcsContainWildCards(
- IN PANSI_STRING Name);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlIsDbcsInExpression(
- IN PANSI_STRING Expression,
- IN PANSI_STRING Name);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlIsFatDbcsLegal(
- IN ANSI_STRING DbcsName,
- IN BOOLEAN WildCardsPermissible,
- IN BOOLEAN PathNamePermissible,
- IN BOOLEAN LeadingBackslashPermissible);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlIsHpfsDbcsLegal(
- IN ANSI_STRING DbcsName,
- IN BOOLEAN WildCardsPermissible,
- IN BOOLEAN PathNamePermissible,
- IN BOOLEAN LeadingBackslashPermissible);
+#ifdef _NTOSKRNL_
+extern PUCHAR FsRtlLegalAnsiCharacterArray;
+#else
+extern DECLSPEC_IMPORT PUCHAR FsRtlLegalAnsiCharacterArray;
+#endif
+extern PACL SePublicDefaultDacl;
+extern PACL SeSystemDefaultDacl;
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlNormalizeNtstatus(
- IN NTSTATUS Exception,
- IN NTSTATUS GenericException);
+#define FS_LFN_APIS 0x00004000
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlIsNtstatusExpected(
- IN NTSTATUS Ntstatus);
+#define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
+#define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
+#define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
+#define FILE_STORAGE_TYPE_MASK 0x000f0000
+#define FILE_STORAGE_TYPE_SHIFT 16
-NTKERNELAPI
-PERESOURCE
-NTAPI
-FsRtlAllocateResource(
- VOID);
+#define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlInitializeLargeMcb(
- IN PLARGE_MCB Mcb,
- IN POOL_TYPE PoolType);
+#define FSRTL_VOLUME_DISMOUNT 1
+#define FSRTL_VOLUME_DISMOUNT_FAILED 2
+#define FSRTL_VOLUME_LOCK 3
+#define FSRTL_VOLUME_LOCK_FAILED 4
+#define FSRTL_VOLUME_UNLOCK 5
+#define FSRTL_VOLUME_MOUNT 6
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlUninitializeLargeMcb(
- IN PLARGE_MCB Mcb);
+#define FSRTL_WILD_CHARACTER 0x08
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlResetLargeMcb(
- IN PLARGE_MCB Mcb,
- IN BOOLEAN SelfSynchronized);
+#define FSRTL_FAT_LEGAL 0x01
+#define FSRTL_HPFS_LEGAL 0x02
+#define FSRTL_NTFS_LEGAL 0x04
+#define FSRTL_WILD_CHARACTER 0x08
+#define FSRTL_OLE_LEGAL 0x10
+#define FSRTL_NTFS_STREAM_LEGAL 0x14
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlTruncateLargeMcb(
- IN PLARGE_MCB Mcb,
- IN LONGLONG Vbn);
+#ifdef _X86_
+#define HARDWARE_PTE HARDWARE_PTE_X86
+#define PHARDWARE_PTE PHARDWARE_PTE_X86
+#endif
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlAddLargeMcbEntry(
- IN PLARGE_MCB Mcb,
- IN LONGLONG Vbn,
- IN LONGLONG Lbn,
- IN LONGLONG SectorCount);
+#define IO_CHECK_CREATE_PARAMETERS 0x0200
+#define IO_ATTACH_DEVICE 0x0400
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlRemoveLargeMcbEntry(
- IN PLARGE_MCB Mcb,
- IN LONGLONG Vbn,
- IN LONGLONG SectorCount);
+#define IO_ATTACH_DEVICE_API 0x80000000
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlLookupLargeMcbEntry(
- IN PLARGE_MCB Mcb,
- IN LONGLONG Vbn,
- OUT PLONGLONG Lbn OPTIONAL,
- OUT PLONGLONG SectorCountFromLbn OPTIONAL,
- OUT PLONGLONG StartingLbn OPTIONAL,
- OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
- OUT PULONG Index OPTIONAL);
+#define IO_TYPE_APC 18
+#define IO_TYPE_DPC 19
+#define IO_TYPE_DEVICE_QUEUE 20
+#define IO_TYPE_EVENT_PAIR 21
+#define IO_TYPE_INTERRUPT 22
+#define IO_TYPE_PROFILE 23
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlLookupLastLargeMcbEntry(
- IN PLARGE_MCB Mcb,
- OUT PLONGLONG Vbn,
- OUT PLONGLONG Lbn);
+#define IRP_BEING_VERIFIED 0x10
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlLookupLastLargeMcbEntryAndIndex(
- IN PLARGE_MCB OpaqueMcb,
- OUT PLONGLONG LargeVbn,
- OUT PLONGLONG LargeLbn,
- OUT PULONG Index);
+#define MAILSLOT_CLASS_FIRSTCLASS 1
+#define MAILSLOT_CLASS_SECONDCLASS 2
-NTKERNELAPI
-ULONG
-NTAPI
-FsRtlNumberOfRunsInLargeMcb(
- IN PLARGE_MCB Mcb);
+#define MAILSLOT_SIZE_AUTO 0
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlGetNextLargeMcbEntry(
- IN PLARGE_MCB Mcb,
- IN ULONG RunIndex,
- OUT PLONGLONG Vbn,
- OUT PLONGLONG Lbn,
- OUT PLONGLONG SectorCount);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlSplitLargeMcb(
- IN PLARGE_MCB Mcb,
- IN LONGLONG Vbn,
- IN LONGLONG Amount);
-
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlInitializeMcb(
- IN PMCB Mcb,
- IN POOL_TYPE PoolType);
+#define MEM_DOS_LIM 0x40000000
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlUninitializeMcb(
- IN PMCB Mcb);
+#define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlTruncateMcb(
- IN PMCB Mcb,
- IN VBN Vbn);
+#define OB_TYPE_TYPE 1
+#define OB_TYPE_DIRECTORY 2
+#define OB_TYPE_SYMBOLIC_LINK 3
+#define OB_TYPE_TOKEN 4
+#define OB_TYPE_PROCESS 5
+#define OB_TYPE_THREAD 6
+#define OB_TYPE_EVENT 7
+#define OB_TYPE_EVENT_PAIR 8
+#define OB_TYPE_MUTANT 9
+#define OB_TYPE_SEMAPHORE 10
+#define OB_TYPE_TIMER 11
+#define OB_TYPE_PROFILE 12
+#define OB_TYPE_WINDOW_STATION 13
+#define OB_TYPE_DESKTOP 14
+#define OB_TYPE_SECTION 15
+#define OB_TYPE_KEY 16
+#define OB_TYPE_PORT 17
+#define OB_TYPE_ADAPTER 18
+#define OB_TYPE_CONTROLLER 19
+#define OB_TYPE_DEVICE 20
+#define OB_TYPE_DRIVER 21
+#define OB_TYPE_IO_COMPLETION 22
+#define OB_TYPE_FILE 23
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlAddMcbEntry(
- IN PMCB Mcb,
- IN VBN Vbn,
- IN LBN Lbn,
- IN ULONG SectorCount);
+#define PIN_WAIT (1)
+#define PIN_EXCLUSIVE (2)
+#define PIN_NO_READ (4)
+#define PIN_IF_BCB (8)
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlRemoveMcbEntry(
- IN PMCB Mcb,
- IN VBN Vbn,
- IN ULONG SectorCount);
+#define SEC_BASED 0x00200000
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlLookupMcbEntry(
- IN PMCB Mcb,
- IN VBN Vbn,
- OUT PLBN Lbn,
- OUT PULONG SectorCount OPTIONAL,
- OUT PULONG Index);
+#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
+#define SECURITY_WORLD_RID (0x00000000L)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlLookupLastMcbEntry(
- IN PMCB Mcb,
- OUT PVBN Vbn,
- OUT PLBN Lbn);
+/* end winnt.h */
-NTKERNELAPI
-ULONG
-NTAPI
-FsRtlNumberOfRunsInMcb(
- IN PMCB Mcb);
+#define TOKEN_HAS_ADMIN_GROUP 0x08
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlGetNextMcbEntry(
- IN PMCB Mcb,
- IN ULONG RunIndex,
- OUT PVBN Vbn,
- OUT PLBN Lbn,
- OUT PULONG SectorCount);
+#define VACB_MAPPING_GRANULARITY (0x40000)
+#define VACB_OFFSET_SHIFT (18)
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlBalanceReads(
- IN PDEVICE_OBJECT TargetDevice);
+#if (VER_PRODUCTBUILD >= 1381)
+#define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#endif /* (VER_PRODUCTBUILD >= 1381) */
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlInitializeOplock(
- IN OUT POPLOCK Oplock);
+#if (VER_PRODUCTBUILD >= 2195)
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlUninitializeOplock(
- IN OUT POPLOCK Oplock);
+#define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlOplockFsctrl(
- IN POPLOCK Oplock,
- IN PIRP Irp,
- IN ULONG OpenCount);
+#define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlCheckOplock(
- IN POPLOCK Oplock,
- IN PIRP Irp,
- IN PVOID Context,
- IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
- IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
+#define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
+#endif /* (VER_PRODUCTBUILD >= 2195) */
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlOplockIsFastIoPossible(
- IN POPLOCK Oplock);
+#define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlCurrentBatchOplock(
- IN POPLOCK Oplock);
+#define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlNotifyVolumeEvent(
- IN PFILE_OBJECT FileObject,
- IN ULONG EventCode);
+typedef PVOID OPLOCK, *POPLOCK;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlNotifyInitializeSync(
- IN PNOTIFY_SYNC *NotifySync);
+//
+// Forwarders
+//
+struct _RTL_AVL_TABLE;
+struct _RTL_GENERIC_TABLE;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlNotifyUninitializeSync(
- IN PNOTIFY_SYNC *NotifySync);
+typedef PVOID PNOTIFY_SYNC;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlNotifyFullChangeDirectory(
- IN PNOTIFY_SYNC NotifySync,
- IN PLIST_ENTRY NotifyList,
- IN PVOID FsContext,
- IN PSTRING FullDirectoryName,
- IN BOOLEAN WatchTree,
- IN BOOLEAN IgnoreBuffer,
- IN ULONG CompletionFilter,
- IN PIRP NotifyIrp OPTIONAL,
- IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL);
+typedef enum _FILE_STORAGE_TYPE {
+ StorageTypeDefault = 1,
+ StorageTypeDirectory,
+ StorageTypeFile,
+ StorageTypeJunctionPoint,
+ StorageTypeCatalog,
+ StorageTypeStructuredStorage,
+ StorageTypeEmbedding,
+ StorageTypeStream
+} FILE_STORAGE_TYPE;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlNotifyFilterReportChange(
- IN PNOTIFY_SYNC NotifySync,
- IN PLIST_ENTRY NotifyList,
- IN PSTRING FullTargetName,
- IN USHORT TargetNameOffset,
- IN PSTRING StreamName OPTIONAL,
- IN PSTRING NormalizedParentName OPTIONAL,
- IN ULONG FilterMatch,
- IN ULONG Action,
- IN PVOID TargetContext OPTIONAL,
- IN PVOID FilterContext OPTIONAL);
+typedef struct _OBJECT_BASIC_INFORMATION
+{
+ ULONG Attributes;
+ ACCESS_MASK GrantedAccess;
+ ULONG HandleCount;
+ ULONG PointerCount;
+ ULONG PagedPoolCharge;
+ ULONG NonPagedPoolCharge;
+ ULONG Reserved[ 3 ];
+ ULONG NameInfoSize;
+ ULONG TypeInfoSize;
+ ULONG SecurityDescriptorSize;
+ LARGE_INTEGER CreationTime;
+} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlNotifyFullReportChange(
- IN PNOTIFY_SYNC NotifySync,
- IN PLIST_ENTRY NotifyList,
- IN PSTRING FullTargetName,
- IN USHORT TargetNameOffset,
- IN PSTRING StreamName OPTIONAL,
- IN PSTRING NormalizedParentName OPTIONAL,
- IN ULONG FilterMatch,
- IN ULONG Action,
- IN PVOID TargetContext OPTIONAL);
+typedef struct _BITMAP_RANGE {
+ LIST_ENTRY Links;
+ LONGLONG BasePage;
+ ULONG FirstDirtyPage;
+ ULONG LastDirtyPage;
+ ULONG DirtyPages;
+ PULONG Bitmap;
+} BITMAP_RANGE, *PBITMAP_RANGE;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlNotifyCleanup(
- IN PNOTIFY_SYNC NotifySync,
- IN PLIST_ENTRY NotifyList,
- IN PVOID FsContext);
+typedef struct _CACHE_UNINITIALIZE_EVENT {
+ struct _CACHE_UNINITIALIZE_EVENT *Next;
+ KEVENT Event;
+} CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlDissectName(
- IN UNICODE_STRING Name,
- OUT PUNICODE_STRING FirstPart,
- OUT PUNICODE_STRING RemainingPart);
+typedef struct _CC_FILE_SIZES {
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER FileSize;
+ LARGE_INTEGER ValidDataLength;
+} CC_FILE_SIZES, *PCC_FILE_SIZES;
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlDoesNameContainWildCards(
- IN PUNICODE_STRING Name);
+typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
+ BOOLEAN ReplaceIfExists;
+ HANDLE RootDirectory;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlAreNamesEqual(
- IN PCUNICODE_STRING Name1,
- IN PCUNICODE_STRING Name2,
- IN BOOLEAN IgnoreCase,
- IN PCWCH UpcaseTable OPTIONAL);
+typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ WCHAR FileName[ANYSIZE_ARRAY];
+} FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlIsNameInExpression(
- IN PUNICODE_STRING Expression,
- IN PUNICODE_STRING Name,
- IN BOOLEAN IgnoreCase,
- IN PWCHAR UpcaseTable OPTIONAL);
+typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
+ LARGE_INTEGER TotalAllocationUnits;
+ LARGE_INTEGER CallerAvailableAllocationUnits;
+ LARGE_INTEGER ActualAvailableAllocationUnits;
+ ULONG SectorsPerAllocationUnit;
+ ULONG BytesPerSector;
+} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlPostPagingFileStackOverflow(
- IN PVOID Context,
- IN PKEVENT Event,
- IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
+typedef struct _FILE_FS_LABEL_INFORMATION {
+ ULONG VolumeLabelLength;
+ WCHAR VolumeLabel[1];
+} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlPostStackOverflow (
- IN PVOID Context,
- IN PKEVENT Event,
- IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
+#if (VER_PRODUCTBUILD >= 2195)
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlRegisterUncProvider(
- OUT PHANDLE MupHandle,
- IN PUNICODE_STRING RedirectorDeviceName,
- IN BOOLEAN MailslotsSupported);
+typedef struct _FILE_FS_OBJECT_ID_INFORMATION {
+ UCHAR ObjectId[16];
+ UCHAR ExtendedInfo[48];
+} FILE_FS_OBJECT_ID_INFORMATION, *PFILE_FS_OBJECT_ID_INFORMATION;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlDeregisterUncProvider(
- IN HANDLE Handle);
+#endif /* (VER_PRODUCTBUILD >= 2195) */
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlTeardownPerStreamContexts(
- IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
+typedef struct _FILE_FS_SIZE_INFORMATION {
+ LARGE_INTEGER TotalAllocationUnits;
+ LARGE_INTEGER AvailableAllocationUnits;
+ ULONG SectorsPerAllocationUnit;
+ ULONG BytesPerSector;
+} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
+
+typedef struct _FILE_FS_VOLUME_INFORMATION {
+ LARGE_INTEGER VolumeCreationTime;
+ ULONG VolumeSerialNumber;
+ ULONG VolumeLabelLength;
+ BOOLEAN SupportsObjects;
+ WCHAR VolumeLabel[1];
+} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
+
+typedef struct _FILE_FS_OBJECTID_INFORMATION
+{
+ UCHAR ObjectId[16];
+ UCHAR ExtendedInfo[48];
+} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlCreateSectionForDataScan(
- OUT PHANDLE SectionHandle,
- OUT PVOID *SectionObject,
- OUT PLARGE_INTEGER SectionFileSize OPTIONAL,
- IN PFILE_OBJECT FileObject,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN PLARGE_INTEGER MaximumSize OPTIONAL,
- IN ULONG SectionPageProtection,
- IN ULONG AllocationAttributes,
- IN ULONG Flags);
+/* raw internal file lock struct returned from FsRtlGetNextFileLock */
+typedef struct _FILE_SHARED_LOCK_ENTRY {
+ PVOID Unknown1;
+ PVOID Unknown2;
+ FILE_LOCK_INFO FileLock;
+} FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+/* raw internal file lock struct returned from FsRtlGetNextFileLock */
+typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
+ LIST_ENTRY ListEntry;
+ PVOID Unknown1;
+ PVOID Unknown2;
+ FILE_LOCK_INFO FileLock;
+} FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
-#if (NTDDI_VERSION >= NTDDI_WINXP)
+typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
+ ULONG ReadDataAvailable;
+ ULONG NumberOfMessages;
+ ULONG MessageLength;
+} FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlNotifyFilterChangeDirectory(
- IN PNOTIFY_SYNC NotifySync,
- IN PLIST_ENTRY NotifyList,
- IN PVOID FsContext,
- IN PSTRING FullDirectoryName,
- IN BOOLEAN WatchTree,
- IN BOOLEAN IgnoreBuffer,
- IN ULONG CompletionFilter,
- IN PIRP NotifyIrp OPTIONAL,
- IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL,
- IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL);
+typedef struct _FILE_OLE_CLASSID_INFORMATION {
+ GUID ClassId;
+} FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlInsertPerStreamContext(
- IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
- IN PFSRTL_PER_STREAM_CONTEXT Ptr);
+typedef struct _FILE_OLE_ALL_INFORMATION {
+ FILE_BASIC_INFORMATION BasicInformation;
+ FILE_STANDARD_INFORMATION StandardInformation;
+ FILE_INTERNAL_INFORMATION InternalInformation;
+ FILE_EA_INFORMATION EaInformation;
+ FILE_ACCESS_INFORMATION AccessInformation;
+ FILE_POSITION_INFORMATION PositionInformation;
+ FILE_MODE_INFORMATION ModeInformation;
+ FILE_ALIGNMENT_INFORMATION AlignmentInformation;
+ USN LastChangeUsn;
+ USN ReplicationUsn;
+ LARGE_INTEGER SecurityChangeTime;
+ FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
+ FILE_OBJECTID_INFORMATION ObjectIdInformation;
+ FILE_STORAGE_TYPE StorageType;
+ ULONG OleStateBits;
+ ULONG OleId;
+ ULONG NumberOfStreamReferences;
+ ULONG StreamIndex;
+ ULONG SecurityId;
+ BOOLEAN ContentIndexDisable;
+ BOOLEAN InheritContentIndexDisable;
+ FILE_NAME_INFORMATION NameInformation;
+} FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
-NTKERNELAPI
-PFSRTL_PER_STREAM_CONTEXT
-NTAPI
-FsRtlLookupPerStreamContextInternal(
- IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
- IN PVOID OwnerId OPTIONAL,
- IN PVOID InstanceId OPTIONAL);
+typedef struct _FILE_OLE_DIR_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ FILE_STORAGE_TYPE StorageType;
+ GUID OleClassId;
+ ULONG OleStateBits;
+ BOOLEAN ContentIndexDisable;
+ BOOLEAN InheritContentIndexDisable;
+ WCHAR FileName[1];
+} FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
-NTKERNELAPI
-PFSRTL_PER_STREAM_CONTEXT
-NTAPI
-FsRtlRemovePerStreamContext(
- IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
- IN PVOID OwnerId OPTIONAL,
- IN PVOID InstanceId OPTIONAL);
+typedef struct _FILE_OLE_INFORMATION {
+ LARGE_INTEGER SecurityChangeTime;
+ FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
+ FILE_OBJECTID_INFORMATION ObjectIdInformation;
+ FILE_STORAGE_TYPE StorageType;
+ ULONG OleStateBits;
+ BOOLEAN ContentIndexDisable;
+ BOOLEAN InheritContentIndexDisable;
+} FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlIncrementCcFastReadNotPossible(
- VOID);
+typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
+ ULONG StateBits;
+ ULONG StateBitsMask;
+} FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlIncrementCcFastReadWait(
- VOID);
+typedef enum _FSRTL_COMPARISON_RESULT
+{
+ LessThan = -1,
+ EqualTo = 0,
+ GreaterThan = 1
+} FSRTL_COMPARISON_RESULT;
+
+#if (VER_PRODUCTBUILD >= 2600)
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlIncrementCcFastReadNoWait(
- VOID);
+typedef struct _FSRTL_PER_STREAM_CONTEXT {
+ LIST_ENTRY Links;
+ PVOID OwnerId;
+ PVOID InstanceId;
+ PFREE_FUNCTION FreeCallback;
+} FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlIncrementCcFastReadResourceMiss(
- VOID);
+typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT
+{
+ LIST_ENTRY Links;
+ PVOID OwnerId;
+ PVOID InstanceId;
+} FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
-NTKERNELAPI
-LOGICAL
-NTAPI
-FsRtlIsPagingFile(
- IN PFILE_OBJECT FileObject);
+#endif /* (VER_PRODUCTBUILD >= 2600) */
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+typedef struct _BASE_MCB
+{
+ ULONG MaximumPairCount;
+ ULONG PairCount;
+ USHORT PoolType;
+ USHORT Flags;
+ PVOID Mapping;
+} BASE_MCB, *PBASE_MCB;
-#if (NTDDI_VERSION >= NTDDI_WS03)
+typedef struct _LARGE_MCB
+{
+ PKGUARDED_MUTEX GuardedMutex;
+ BASE_MCB BaseMcb;
+} LARGE_MCB, *PLARGE_MCB;
-NTKERNELAPI
- VOID
-NTAPI
-FsRtlInitializeBaseMcb(
- IN PBASE_MCB Mcb,
- IN POOL_TYPE PoolType);
+typedef struct _MCB
+{
+ LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
+} MCB, *PMCB;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlUninitializeBaseMcb(
- IN PBASE_MCB Mcb);
+typedef struct _MAPPING_PAIR {
+ ULONGLONG Vcn;
+ ULONGLONG Lcn;
+} MAPPING_PAIR, *PMAPPING_PAIR;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlResetBaseMcb(
- IN PBASE_MCB Mcb);
+typedef struct _GET_RETRIEVAL_DESCRIPTOR {
+ ULONG NumberOfPairs;
+ ULONGLONG StartVcn;
+ MAPPING_PAIR Pair[1];
+} GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlTruncateBaseMcb(
- IN PBASE_MCB Mcb,
- IN LONGLONG Vbn);
+#define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlAddBaseMcbEntry(
- IN PBASE_MCB Mcb,
- IN LONGLONG Vbn,
- IN LONGLONG Lbn,
- IN LONGLONG SectorCount);
+typedef struct _MBCB {
+ CSHORT NodeTypeCode;
+ CSHORT NodeIsInZone;
+ ULONG PagesToWrite;
+ ULONG DirtyPages;
+ ULONG Reserved;
+ LIST_ENTRY BitmapRanges;
+ LONGLONG ResumeWritePage;
+ BITMAP_RANGE BitmapRange1;
+ BITMAP_RANGE BitmapRange2;
+ BITMAP_RANGE BitmapRange3;
+} MBCB, *PMBCB;
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlRemoveBaseMcbEntry(
- IN PBASE_MCB Mcb,
- IN LONGLONG Vbn,
- IN LONGLONG SectorCount);
+typedef struct _MOVEFILE_DESCRIPTOR {
+ HANDLE FileHandle;
+ ULONG Reserved;
+ LARGE_INTEGER StartVcn;
+ LARGE_INTEGER TargetLcn;
+ ULONG NumVcns;
+ ULONG Reserved1;
+} MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlLookupBaseMcbEntry(
- IN PBASE_MCB Mcb,
- IN LONGLONG Vbn,
- OUT PLONGLONG Lbn OPTIONAL,
- OUT PLONGLONG SectorCountFromLbn OPTIONAL,
- OUT PLONGLONG StartingLbn OPTIONAL,
- OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
- OUT PULONG Index OPTIONAL);
+typedef struct _OBJECT_BASIC_INFO {
+ ULONG Attributes;
+ ACCESS_MASK GrantedAccess;
+ ULONG HandleCount;
+ ULONG ReferenceCount;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+ ULONG Reserved[3];
+ ULONG NameInformationLength;
+ ULONG TypeInformationLength;
+ ULONG SecurityDescriptorLength;
+ LARGE_INTEGER CreateTime;
+} OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlLookupLastBaseMcbEntry(
- IN PBASE_MCB Mcb,
- OUT PLONGLONG Vbn,
- OUT PLONGLONG Lbn);
+typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
+ BOOLEAN Inherit;
+ BOOLEAN ProtectFromClose;
+} OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlLookupLastBaseMcbEntryAndIndex(
- IN PBASE_MCB OpaqueMcb,
- IN OUT PLONGLONG LargeVbn,
- IN OUT PLONGLONG LargeLbn,
- IN OUT PULONG Index);
+typedef struct _OBJECT_NAME_INFO {
+ UNICODE_STRING ObjectName;
+ WCHAR ObjectNameBuffer[1];
+} OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
-NTKERNELAPI
-ULONG
-NTAPI
-FsRtlNumberOfRunsInBaseMcb(
- IN PBASE_MCB Mcb);
+typedef struct _OBJECT_PROTECTION_INFO {
+ BOOLEAN Inherit;
+ BOOLEAN ProtectHandle;
+} OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlGetNextBaseMcbEntry(
- IN PBASE_MCB Mcb,
- IN ULONG RunIndex,
- OUT PLONGLONG Vbn,
- OUT PLONGLONG Lbn,
- OUT PLONGLONG SectorCount);
+typedef struct _OBJECT_TYPE_INFO {
+ UNICODE_STRING ObjectTypeName;
+ UCHAR Unknown[0x58];
+ WCHAR ObjectTypeNameBuffer[1];
+} OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlSplitBaseMcb(
- IN PBASE_MCB Mcb,
- IN LONGLONG Vbn,
- IN LONGLONG Amount);
+typedef struct _OBJECT_ALL_TYPES_INFO {
+ ULONG NumberOfObjectTypes;
+ OBJECT_TYPE_INFO ObjectsTypeInfo[1];
+} OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
-#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
+typedef enum _RTL_GENERIC_COMPARE_RESULTS
+{
+ GenericLessThan,
+ GenericGreaterThan,
+ GenericEqual
+} RTL_GENERIC_COMPARE_RESULTS;
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+typedef enum _TABLE_SEARCH_RESULT
+{
+ TableEmptyTree,
+ TableFoundNode,
+ TableInsertAsLeft,
+ TableInsertAsRight
+} TABLE_SEARCH_RESULT;
-BOOLEAN
-NTAPI
-FsRtlInitializeBaseMcbEx(
- IN PBASE_MCB Mcb,
- IN POOL_TYPE PoolType,
- IN USHORT Flags);
+typedef NTSTATUS
+(NTAPI *PRTL_AVL_MATCH_FUNCTION)(
+ struct _RTL_AVL_TABLE *Table,
+ PVOID UserData,
+ PVOID MatchData
+);
-NTSTATUS
-NTAPI
-FsRtlAddBaseMcbEntryEx(
- IN PBASE_MCB Mcb,
- IN LONGLONG Vbn,
- IN LONGLONG Lbn,
- IN LONGLONG SectorCount);
+typedef RTL_GENERIC_COMPARE_RESULTS
+(NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
+ struct _RTL_AVL_TABLE *Table,
+ PVOID FirstStruct,
+ PVOID SecondStruct
+);
-NTKERNELAPI
-BOOLEAN
-NTAPI
-FsRtlCurrentOplock(
- IN POPLOCK Oplock);
+typedef RTL_GENERIC_COMPARE_RESULTS
+(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
+ struct _RTL_GENERIC_TABLE *Table,
+ PVOID FirstStruct,
+ PVOID SecondStruct
+);
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlOplockBreakToNone(
- IN OUT POPLOCK Oplock,
- IN PIO_STACK_LOCATION IrpSp OPTIONAL,
- IN PIRP Irp,
- IN PVOID Context OPTIONAL,
- IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
- IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
+typedef PVOID
+(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
+ struct _RTL_GENERIC_TABLE *Table,
+ CLONG ByteSize
+);
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlNotifyVolumeEventEx(
- IN PFILE_OBJECT FileObject,
- IN ULONG EventCode,
- IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event);
+typedef VOID
+(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
+ struct _RTL_GENERIC_TABLE *Table,
+ PVOID Buffer
+);
-NTKERNELAPI
-VOID
-NTAPI
-FsRtlNotifyCleanupAll(
- IN PNOTIFY_SYNC NotifySync,
- IN PLIST_ENTRY NotifyList);
+typedef PVOID
+(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
+ struct _RTL_AVL_TABLE *Table,
+ CLONG ByteSize
+);
-NTSTATUS
-NTAPI
-FsRtlRegisterUncProviderEx(
- OUT PHANDLE MupHandle,
- IN PUNICODE_STRING RedirDevName,
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG Flags);
+typedef VOID
+(NTAPI *PRTL_AVL_FREE_ROUTINE) (
+ struct _RTL_AVL_TABLE *Table,
+ PVOID Buffer
+);
-NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlCancellableWaitForSingleObject(
- IN PVOID Object,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- IN PIRP Irp OPTIONAL);
+typedef struct _PUBLIC_BCB {
+ CSHORT NodeTypeCode;
+ CSHORT NodeByteSize;
+ ULONG MappedLength;
+ LARGE_INTEGER MappedFileOffset;
+} PUBLIC_BCB, *PPUBLIC_BCB;
-NTKERNELAPI
-NTSTATUS
+typedef struct _QUERY_PATH_REQUEST {
+ ULONG PathNameLength;
+ PIO_SECURITY_CONTEXT SecurityContext;
+ WCHAR FilePathName[1];
+} QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
+
+typedef struct _QUERY_PATH_RESPONSE {
+ ULONG LengthAccepted;
+} QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
+
+typedef struct _RTL_BALANCED_LINKS
+{
+ struct _RTL_BALANCED_LINKS *Parent;
+ struct _RTL_BALANCED_LINKS *LeftChild;
+ struct _RTL_BALANCED_LINKS *RightChild;
+ CHAR Balance;
+ UCHAR Reserved[3];
+} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
+
+typedef struct _RTL_GENERIC_TABLE
+{
+ PRTL_SPLAY_LINKS TableRoot;
+ LIST_ENTRY InsertOrderList;
+ PLIST_ENTRY OrderedPointer;
+ ULONG WhichOrderedElement;
+ ULONG NumberGenericTableElements;
+ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
+ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
+ PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
+ PVOID TableContext;
+} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
+
+#undef PRTL_GENERIC_COMPARE_ROUTINE
+#undef PRTL_GENERIC_ALLOCATE_ROUTINE
+#undef PRTL_GENERIC_FREE_ROUTINE
+#undef RTL_GENERIC_TABLE
+#undef PRTL_GENERIC_TABLE
+
+#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
+#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
+#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
+#define RTL_GENERIC_TABLE RTL_AVL_TABLE
+#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
+
+#define RtlInitializeGenericTable RtlInitializeGenericTableAvl
+#define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
+#define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
+#define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
+#define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
+#define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
+#define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
+#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
+#define RtlGetElementGenericTable RtlGetElementGenericTableAvl
+#define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
+#define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
+
+typedef struct _RTL_AVL_TABLE
+{
+ RTL_BALANCED_LINKS BalancedRoot;
+ PVOID OrderedPointer;
+ ULONG WhichOrderedElement;
+ ULONG NumberGenericTableElements;
+ ULONG DepthOfTree;
+ PRTL_BALANCED_LINKS RestartKey;
+ ULONG DeleteCount;
+ PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
+ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
+ PRTL_AVL_FREE_ROUTINE FreeRoutine;
+ PVOID TableContext;
+} RTL_AVL_TABLE, *PRTL_AVL_TABLE;
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeGenericTableAvl(
+ PRTL_AVL_TABLE Table,
+ PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
+ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
+ PRTL_AVL_FREE_ROUTINE FreeRoutine,
+ PVOID TableContext
+);
+
+NTSYSAPI
+PVOID
NTAPI
-FsRtlCancellableWaitForMultipleObjects(
- IN ULONG Count,
- IN PVOID ObjectArray[],
- IN WAIT_TYPE WaitType,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- IN PKWAIT_BLOCK WaitBlockArray OPTIONAL,
- IN PIRP Irp OPTIONAL);
+RtlInsertElementGenericTableAvl (
+ PRTL_AVL_TABLE Table,
+ PVOID Buffer,
+ CLONG BufferSize,
+ PBOOLEAN NewElement OPTIONAL
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDeleteElementGenericTableAvl (
+ PRTL_AVL_TABLE Table,
+ PVOID Buffer
+ );
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableAvl (
+ PRTL_AVL_TABLE Table,
+ PVOID Buffer
+ );
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableWithoutSplayingAvl (
+ PRTL_AVL_TABLE Table,
+ PVOID *RestartKey
+ );
+
+#if defined(USE_LPC6432)
+#define LPC_CLIENT_ID CLIENT_ID64
+#define LPC_SIZE_T ULONGLONG
+#define LPC_PVOID ULONGLONG
+#define LPC_HANDLE ULONGLONG
+#else
+#define LPC_CLIENT_ID CLIENT_ID
+#define LPC_SIZE_T SIZE_T
+#define LPC_PVOID PVOID
+#define LPC_HANDLE HANDLE
+#endif
+
+typedef struct _PORT_MESSAGE
+{
+ union
+ {
+ struct
+ {
+ CSHORT DataLength;
+ CSHORT TotalLength;
+ } s1;
+ ULONG Length;
+ } u1;
+ union
+ {
+ struct
+ {
+ CSHORT Type;
+ CSHORT DataInfoOffset;
+ } s2;
+ ULONG ZeroInit;
+ } u2;
+ __GNU_EXTENSION union
+ {
+ LPC_CLIENT_ID ClientId;
+ double DoNotUseThisField;
+ };
+ ULONG MessageId;
+ __GNU_EXTENSION union
+ {
+ LPC_SIZE_T ClientViewSize;
+ ULONG CallbackId;
+ };
+} PORT_MESSAGE, *PPORT_MESSAGE;
+
+#define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
+
+typedef struct _PORT_VIEW
+{
+ ULONG Length;
+ LPC_HANDLE SectionHandle;
+ ULONG SectionOffset;
+ LPC_SIZE_T ViewSize;
+ LPC_PVOID ViewBase;
+ LPC_PVOID ViewRemoteBase;
+} PORT_VIEW, *PPORT_VIEW;
+
+typedef struct _REMOTE_PORT_VIEW
+{
+ ULONG Length;
+ LPC_SIZE_T ViewSize;
+ LPC_PVOID ViewBase;
+} REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
+
+typedef struct _TUNNEL {
+ FAST_MUTEX Mutex;
+ PRTL_SPLAY_LINKS Cache;
+ LIST_ENTRY TimerQueue;
+ USHORT NumEntries;
+} TUNNEL, *PTUNNEL;
+
+typedef struct _VAD_HEADER {
+ PVOID StartVPN;
+ PVOID EndVPN;
+ struct _VAD_HEADER* ParentLink;
+ struct _VAD_HEADER* LeftLink;
+ struct _VAD_HEADER* RightLink;
+ ULONG Flags; /* LSB = CommitCharge */
+ PVOID ControlArea;
+ PVOID FirstProtoPte;
+ PVOID LastPTE;
+ ULONG Unknown;
+ LIST_ENTRY Secured;
+} VAD_HEADER, *PVAD_HEADER;
+
+#if (VER_PRODUCTBUILD >= 2600)
+
+typedef BOOLEAN
+(NTAPI *PFILTER_REPORT_CHANGE) (
+ IN PVOID NotifyContext,
+ IN PVOID FilterContext
+);
+
+#endif
NTKERNELAPI
-NTSTATUS
+BOOLEAN
NTAPI
-FsRtlMupGetProviderInfoFromFileObject(
- IN PFILE_OBJECT pFileObject,
- IN ULONG Level,
- OUT PVOID pBuffer,
- IN OUT PULONG pBufferSize);
+CcCanIWrite (
+ IN PFILE_OBJECT FileObject,
+ IN ULONG BytesToWrite,
+ IN BOOLEAN Wait,
+ IN BOOLEAN Retrying
+);
NTKERNELAPI
-NTSTATUS
+BOOLEAN
NTAPI
-FsRtlMupGetProviderIdFromName(
- IN PUNICODE_STRING pProviderName,
- OUT PULONG32 pProviderId);
+CcCopyRead (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN BOOLEAN Wait,
+ OUT PVOID Buffer,
+ OUT PIO_STATUS_BLOCK IoStatus
+);
NTKERNELAPI
-VOID
+BOOLEAN
NTAPI
-FsRtlIncrementCcFastMdlReadWait(
- VOID);
+CcCopyWrite (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN BOOLEAN Wait,
+ IN PVOID Buffer
+);
+
+#define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
+
+typedef VOID (NTAPI *PCC_POST_DEFERRED_WRITE) (
+ IN PVOID Context1,
+ IN PVOID Context2
+);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlValidateReparsePointBuffer(
- IN ULONG BufferLength,
- IN PREPARSE_DATA_BUFFER ReparseBuffer);
+CcDeferWrite (
+ IN PFILE_OBJECT FileObject,
+ IN PCC_POST_DEFERRED_WRITE PostRoutine,
+ IN PVOID Context1,
+ IN PVOID Context2,
+ IN ULONG BytesToWrite,
+ IN BOOLEAN Retrying
+);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlRemoveDotsFromPath(
- IN OUT PWSTR OriginalString,
- IN USHORT PathLength,
- OUT USHORT *NewLength);
+CcFastCopyRead (
+ IN PFILE_OBJECT FileObject,
+ IN ULONG FileOffset,
+ IN ULONG Length,
+ IN ULONG PageCount,
+ OUT PVOID Buffer,
+ OUT PIO_STATUS_BLOCK IoStatus
+);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlAllocateExtraCreateParameterList(
- IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
- OUT PECP_LIST *EcpList);
+CcFastCopyWrite (
+ IN PFILE_OBJECT FileObject,
+ IN ULONG FileOffset,
+ IN ULONG Length,
+ IN PVOID Buffer
+);
NTKERNELAPI
VOID
NTAPI
-FsRtlFreeExtraCreateParameterList(
- IN PECP_LIST EcpList);
+CcFlushCache (
+ IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ IN PLARGE_INTEGER FileOffset OPTIONAL,
+ IN ULONG Length,
+ OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
+);
+
+typedef VOID (NTAPI *PDIRTY_PAGE_ROUTINE) (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN PLARGE_INTEGER OldestLsn,
+ IN PLARGE_INTEGER NewestLsn,
+ IN PVOID Context1,
+ IN PVOID Context2
+);
NTKERNELAPI
-NTSTATUS
+LARGE_INTEGER
NTAPI
-FsRtlAllocateExtraCreateParameter(
- IN LPCGUID EcpType,
- IN ULONG SizeOfContext,
- IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
- IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
- IN ULONG PoolTag,
- OUT PVOID *EcpContext);
+CcGetDirtyPages (
+ IN PVOID LogHandle,
+ IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
+ IN PVOID Context1,
+ IN PVOID Context2
+);
NTKERNELAPI
-VOID
+PFILE_OBJECT
NTAPI
-FsRtlFreeExtraCreateParameter(
- IN PVOID EcpContext);
+CcGetFileObjectFromBcb (
+ IN PVOID Bcb
+);
NTKERNELAPI
-VOID
+PFILE_OBJECT
NTAPI
-FsRtlInitExtraCreateParameterLookasideList(
- IN OUT PVOID Lookaside,
- IN FSRTL_ECP_LOOKASIDE_FLAGS Flags,
- IN SIZE_T Size,
- IN ULONG Tag);
+CcGetFileObjectFromSectionPtrs (
+ IN PSECTION_OBJECT_POINTERS SectionObjectPointer
+);
-VOID
-NTAPI
-FsRtlDeleteExtraCreateParameterLookasideList(
- IN OUT PVOID Lookaside,
- IN FSRTL_ECP_LOOKASIDE_FLAGS Flags);
+#define CcGetFileSizePointer(FO) ( \
+ ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
+)
+
+#if (VER_PRODUCTBUILD >= 2195)
NTKERNELAPI
-NTSTATUS
+LARGE_INTEGER
NTAPI
-FsRtlAllocateExtraCreateParameterFromLookasideList(
- IN LPCGUID EcpType,
- IN ULONG SizeOfContext,
- IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
- IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
- IN OUT PVOID LookasideList,
- OUT PVOID *EcpContext);
+CcGetFlushedValidData (
+ IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ IN BOOLEAN BcbListHeld
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
NTKERNELAPI
-NTSTATUS
+LARGE_INTEGER
NTAPI
-FsRtlInsertExtraCreateParameter(
- IN OUT PECP_LIST EcpList,
- IN OUT PVOID EcpContext);
+CcGetLsnForFileObject (
+ IN PFILE_OBJECT FileObject,
+ OUT PLARGE_INTEGER OldestLsn OPTIONAL
+);
+
+typedef BOOLEAN (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
+ IN PVOID Context,
+ IN BOOLEAN Wait
+);
+
+typedef VOID (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
+ IN PVOID Context
+);
+
+typedef BOOLEAN (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
+ IN PVOID Context,
+ IN BOOLEAN Wait
+);
+
+typedef VOID (NTAPI *PRELEASE_FROM_READ_AHEAD) (
+ IN PVOID Context
+);
+
+typedef struct _CACHE_MANAGER_CALLBACKS {
+ PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
+ PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
+ PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
+ PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
+} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlFindExtraCreateParameter(
- IN PECP_LIST EcpList,
- IN LPCGUID EcpType,
- OUT PVOID *EcpContext OPTIONAL,
- OUT ULONG *EcpContextSize OPTIONAL);
+CcInitializeCacheMap (
+ IN PFILE_OBJECT FileObject,
+ IN PCC_FILE_SIZES FileSizes,
+ IN BOOLEAN PinAccess,
+ IN PCACHE_MANAGER_CALLBACKS Callbacks,
+ IN PVOID LazyWriteContext
+);
+
+#define CcIsFileCached(FO) ( \
+ ((FO)->SectionObjectPointer != NULL) && \
+ (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
+)
+
+extern ULONG CcFastMdlReadWait;
NTKERNELAPI
-NTSTATUS
+BOOLEAN
NTAPI
-FsRtlRemoveExtraCreateParameter(
- IN OUT PECP_LIST EcpList,
- IN LPCGUID EcpType,
- OUT PVOID *EcpContext,
- OUT ULONG *EcpContextSize OPTIONAL);
+CcIsThereDirtyData (
+ IN PVPB Vpb
+);
NTKERNELAPI
-NTSTATUS
+BOOLEAN
NTAPI
-FsRtlGetEcpListFromIrp(
- IN PIRP Irp,
- OUT PECP_LIST *EcpList OPTIONAL);
+CcMapData (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN ULONG Flags,
+ OUT PVOID *Bcb,
+ OUT PVOID *Buffer
+);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlSetEcpListIntoIrp(
- IN OUT PIRP Irp,
- IN PECP_LIST EcpList);
+CcMdlRead (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ OUT PMDL *MdlChain,
+ OUT PIO_STATUS_BLOCK IoStatus
+);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlGetNextExtraCreateParameter(
- IN PECP_LIST EcpList,
- IN PVOID CurrentEcpContext OPTIONAL,
- OUT LPGUID NextEcpType OPTIONAL,
- OUT PVOID *NextEcpContext OPTIONAL,
- OUT ULONG *NextEcpContextSize OPTIONAL);
+CcMdlReadComplete (
+ IN PFILE_OBJECT FileObject,
+ IN PMDL MdlChain
+);
NTKERNELAPI
VOID
NTAPI
-FsRtlAcknowledgeEcp(
- IN PVOID EcpContext);
+CcMdlWriteComplete (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN PMDL MdlChain
+);
+
+#define MAP_WAIT 1
NTKERNELAPI
BOOLEAN
NTAPI
-FsRtlIsEcpAcknowledged(
- IN PVOID EcpContext);
+CcPinMappedData (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN ULONG Flags,
+ IN OUT PVOID *Bcb
+);
NTKERNELAPI
BOOLEAN
NTAPI
-FsRtlIsEcpFromUserMode(
- IN PVOID EcpContext);
+CcPinRead (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN ULONG Flags,
+ OUT PVOID *Bcb,
+ OUT PVOID *Buffer
+);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlChangeBackingFileObject(
- IN PFILE_OBJECT CurrentFileObject OPTIONAL,
- IN PFILE_OBJECT NewFileObject,
- IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
- IN ULONG Flags);
+CcPrepareMdlWrite (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ OUT PMDL *MdlChain,
+ OUT PIO_STATUS_BLOCK IoStatus
+);
NTKERNELAPI
-NTSTATUS
+BOOLEAN
NTAPI
-FsRtlLogCcFlushError(
- IN PUNICODE_STRING FileName,
- IN PDEVICE_OBJECT DeviceObject,
- IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
- IN NTSTATUS FlushError,
- IN ULONG Flags);
+CcPreparePinWrite (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN BOOLEAN Zero,
+ IN ULONG Flags,
+ OUT PVOID *Bcb,
+ OUT PVOID *Buffer
+);
NTKERNELAPI
BOOLEAN
NTAPI
-FsRtlAreVolumeStartupApplicationsComplete(
- VOID);
+CcPurgeCacheSection (
+ IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ IN PLARGE_INTEGER FileOffset OPTIONAL,
+ IN ULONG Length,
+ IN BOOLEAN UninitializeCacheMaps
+);
+
+#define CcReadAhead(FO, FOFF, LEN) ( \
+ if ((LEN) >= 256) { \
+ CcScheduleReadAhead((FO), (FOFF), (LEN)); \
+ } \
+)
+
+#if (VER_PRODUCTBUILD >= 2195)
NTKERNELAPI
-ULONG
+PVOID
NTAPI
-FsRtlQueryMaximumVirtualDiskNestingLevel(
- VOID);
+CcRemapBcb (
+ IN PVOID Bcb
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlGetVirtualDiskNestingLevel(
- IN PDEVICE_OBJECT DeviceObject,
- OUT PULONG NestingLevel,
- OUT PULONG NestingFlags OPTIONAL);
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+CcRepinBcb (
+ IN PVOID Bcb
+);
-#if (NTDDI_VERSION >= NTDDI_VISTASP1)
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlCheckOplockEx(
- IN POPLOCK Oplock,
- IN PIRP Irp,
- IN ULONG Flags,
- IN PVOID Context OPTIONAL,
- IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
- IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
-
-#endif
+CcScheduleReadAhead (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length
+);
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+NTKERNELAPI
+VOID
+NTAPI
+CcSetAdditionalCacheAttributes (
+ IN PFILE_OBJECT FileObject,
+ IN BOOLEAN DisableReadAhead,
+ IN BOOLEAN DisableWriteBehind
+);
NTKERNELAPI
-BOOLEAN
+VOID
NTAPI
-FsRtlAreThereCurrentOrInProgressFileLocks(
- IN PFILE_LOCK FileLock);
+CcSetBcbOwnerPointer (
+ IN PVOID Bcb,
+ IN PVOID OwnerPointer
+);
NTKERNELAPI
-BOOLEAN
+VOID
NTAPI
-FsRtlOplockIsSharedRequest(
- IN PIRP Irp);
+CcSetDirtyPageThreshold (
+ IN PFILE_OBJECT FileObject,
+ IN ULONG DirtyPageThreshold
+);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlOplockBreakH(
- IN POPLOCK Oplock,
- IN PIRP Irp,
- IN ULONG Flags,
- IN PVOID Context OPTIONAL,
- IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
- IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
+CcSetDirtyPinnedData (
+ IN PVOID BcbVoid,
+ IN PLARGE_INTEGER Lsn OPTIONAL
+);
NTKERNELAPI
-BOOLEAN
+VOID
NTAPI
-FsRtlCurrentOplockH(
- IN POPLOCK Oplock);
+CcSetFileSizes (
+ IN PFILE_OBJECT FileObject,
+ IN PCC_FILE_SIZES FileSizes
+);
+
+typedef VOID (NTAPI *PFLUSH_TO_LSN) (
+ IN PVOID LogHandle,
+ IN LARGE_INTEGER Lsn
+);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlOplockBreakToNoneEx(
- IN OUT POPLOCK Oplock,
- IN PIRP Irp,
- IN ULONG Flags,
- IN PVOID Context OPTIONAL,
- IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
- IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
+CcSetLogHandleForFile (
+ IN PFILE_OBJECT FileObject,
+ IN PVOID LogHandle,
+ IN PFLUSH_TO_LSN FlushToLsnRoutine
+);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlOplockFsctrlEx(
- IN POPLOCK Oplock,
- IN PIRP Irp,
- IN ULONG OpenCount,
- IN ULONG Flags);
+CcSetReadAheadGranularity (
+ IN PFILE_OBJECT FileObject,
+ IN ULONG Granularity /* default: PAGE_SIZE */
+ /* allowed: 2^n * PAGE_SIZE */
+);
NTKERNELAPI
BOOLEAN
NTAPI
-FsRtlOplockKeysEqual(
- IN PFILE_OBJECT Fo1 OPTIONAL,
- IN PFILE_OBJECT Fo2 OPTIONAL);
+CcUninitializeCacheMap (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER TruncateSize OPTIONAL,
+ IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
+);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-FsRtlInitializeExtraCreateParameterList(
- IN OUT PECP_LIST EcpList);
+CcUnpinData (
+ IN PVOID Bcb
+);
NTKERNELAPI
VOID
NTAPI
-FsRtlInitializeExtraCreateParameter(
- IN PECP_HEADER Ecp,
- IN ULONG EcpFlags,
- IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
- IN ULONG TotalSize,
- IN LPCGUID EcpType,
- IN PVOID ListAllocatedFrom OPTIONAL);
+CcUnpinDataForThread (
+ IN PVOID Bcb,
+ IN ERESOURCE_THREAD ResourceThreadId
+);
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+NTKERNELAPI
+VOID
+NTAPI
+CcUnpinRepinnedBcb (
+ IN PVOID Bcb,
+ IN BOOLEAN WriteThrough,
+ OUT PIO_STATUS_BLOCK IoStatus
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
NTKERNELAPI
NTSTATUS
NTAPI
-FsRtlInsertPerFileContext(
- IN PVOID* PerFileContextPointer,
- IN PFSRTL_PER_FILE_CONTEXT Ptr);
+CcWaitForCurrentLazyWriterActivity (
+ VOID
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
NTKERNELAPI
-PFSRTL_PER_FILE_CONTEXT
+BOOLEAN
NTAPI
-FsRtlLookupPerFileContext(
- IN PVOID* PerFileContextPointer,
- IN PVOID OwnerId OPTIONAL,
- IN PVOID InstanceId OPTIONAL);
+CcZeroData (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER StartOffset,
+ IN PLARGE_INTEGER EndOffset,
+ IN BOOLEAN Wait
+);
+#if (VER_PRODUCTBUILD >= 2600)
+
+#ifndef __NTOSKRNL__
NTKERNELAPI
-PFSRTL_PER_FILE_CONTEXT
-NTAPI
-FsRtlRemovePerFileContext(
- IN PVOID* PerFileContextPointer,
- IN PVOID OwnerId OPTIONAL,
- IN PVOID InstanceId OPTIONAL);
+VOID
+FASTCALL
+ExInitializeRundownProtection (
+ IN PEX_RUNDOWN_REF RunRef
+);
NTKERNELAPI
VOID
-NTAPI
-FsRtlTeardownPerFileContexts(
- IN PVOID* PerFileContextPointer);
+FASTCALL
+ExReInitializeRundownProtection (
+ IN PEX_RUNDOWN_REF RunRef
+);
NTKERNELAPI
-NTSTATUS
-NTAPI
-FsRtlInsertPerFileObjectContext(
- IN PFILE_OBJECT FileObject,
- IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr);
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtection (
+ IN PEX_RUNDOWN_REF RunRef
+);
NTKERNELAPI
-PFSRTL_PER_FILEOBJECT_CONTEXT
-NTAPI
-FsRtlLookupPerFileObjectContext(
- IN PFILE_OBJECT FileObject,
- IN PVOID OwnerId OPTIONAL,
- IN PVOID InstanceId OPTIONAL);
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionEx (
+ IN PEX_RUNDOWN_REF RunRef,
+ IN ULONG Count
+);
NTKERNELAPI
-PFSRTL_PER_FILEOBJECT_CONTEXT
-NTAPI
-FsRtlRemovePerFileObjectContext(
- IN PFILE_OBJECT FileObject,
- IN PVOID OwnerId OPTIONAL,
- IN PVOID InstanceId OPTIONAL);
+VOID
+FASTCALL
+ExReleaseRundownProtection (
+ IN PEX_RUNDOWN_REF RunRef
+);
-#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
- FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
-)
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseRundownProtectionEx (
+ IN PEX_RUNDOWN_REF RunRef,
+ IN ULONG Count
+);
-#define FsRtlAreThereCurrentFileLocks(FL) ( \
- ((FL)->FastIoIsQuestionable) \
-)
+NTKERNELAPI
+VOID
+FASTCALL
+ExRundownCompleted (
+ IN PEX_RUNDOWN_REF RunRef
+);
-#define FsRtlIncrementLockRequestsInProgress(FL) { \
- ASSERT( (FL)->LockRequestsInProgress >= 0 ); \
- (void) \
- (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
-}
+NTKERNELAPI
+VOID
+FASTCALL
+ExWaitForRundownProtectionRelease (
+ IN PEX_RUNDOWN_REF RunRef
+);
-#define FsRtlDecrementLockRequestsInProgress(FL) { \
- ASSERT( (FL)->LockRequestsInProgress > 0 ); \
- (void) \
- (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
+#endif
+#endif /* (VER_PRODUCTBUILD >= 2600) */
+
+
+#define FsRtlSetupAdvancedHeader( _advhdr, _fmutx ) \
+{ \
+ SetFlag( (_advhdr)->Flags, FSRTL_FLAG_ADVANCED_HEADER ); \
+ SetFlag( (_advhdr)->Flags2, FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS ); \
+ (_advhdr)->Version = FSRTL_FCB_HEADER_V1; \
+ InitializeListHead( &(_advhdr)->FilterContexts ); \
+ if ((_fmutx) != NULL) { \
+ (_advhdr)->FastMutex = (_fmutx); \
+ } \
+ *((PULONG_PTR)(&(_advhdr)->PushLock)) = 0; \
+ /*ExInitializePushLock( &(_advhdr)->PushLock ); API Not avaliable downlevel*/\
+ (_advhdr)->FileContextSupportPointer = NULL; \
}
-extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo;
-#define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlAddBaseMcbEntry (
+ IN PBASE_MCB Mcb,
+ IN LONGLONG Vbn,
+ IN LONGLONG Lbn,
+ IN LONGLONG SectorCount
+);
-#ifdef NLS_MB_CODE_PAGE_TAG
-#undef NLS_MB_CODE_PAGE_TAG
-#endif
-#define NLS_MB_CODE_PAGE_TAG NlsMbOemCodePageTag
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlAddLargeMcbEntry (
+ IN PLARGE_MCB Mcb,
+ IN LONGLONG Vbn,
+ IN LONGLONG Lbn,
+ IN LONGLONG SectorCount
+);
-/* GCC compatible definition, MS one is retarded */
-extern NTKERNELAPI const UCHAR * const FsRtlLegalAnsiCharacterArray;
-#define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlAddMcbEntry (
+ IN PMCB Mcb,
+ IN VBN Vbn,
+ IN LBN Lbn,
+ IN ULONG SectorCount
+);
-#define FsRtlIsAnsiCharacterWild(C) ( \
- FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
-)
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlAddToTunnelCache (
+ IN PTUNNEL Cache,
+ IN ULONGLONG DirectoryKey,
+ IN PUNICODE_STRING ShortName,
+ IN PUNICODE_STRING LongName,
+ IN BOOLEAN KeyByShortName,
+ IN ULONG DataLength,
+ IN PVOID Data
+);
-#define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
- FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
- ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
-)
+NTKERNELAPI
+PVOID
+NTAPI
+FsRtlAllocatePool (
+ IN POOL_TYPE PoolType,
+ IN ULONG NumberOfBytes
+);
-#define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
- FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
- ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
-)
+NTKERNELAPI
+PVOID
+NTAPI
+FsRtlAllocatePoolWithQuota (
+ IN POOL_TYPE PoolType,
+ IN ULONG NumberOfBytes
+);
-#define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
- FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
- ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
-)
+NTKERNELAPI
+PVOID
+NTAPI
+FsRtlAllocatePoolWithQuotaTag (
+ IN POOL_TYPE PoolType,
+ IN ULONG NumberOfBytes,
+ IN ULONG Tag
+);
-#define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \
- FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \
-)
+NTKERNELAPI
+PVOID
+NTAPI
+FsRtlAllocatePoolWithTag (
+ IN POOL_TYPE PoolType,
+ IN ULONG NumberOfBytes,
+ IN ULONG Tag
+);
-#define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \
- FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
-)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlAreNamesEqual (
+ IN PCUNICODE_STRING Name1,
+ IN PCUNICODE_STRING Name2,
+ IN BOOLEAN IgnoreCase,
+ IN PCWCH UpcaseTable OPTIONAL
+);
-#define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \
- ((SCHAR)(C) < 0) ? DEFAULT_RET : \
- FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
- (FLAGS) | \
- ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
+#define FsRtlAreThereCurrentFileLocks(FL) ( \
+ ((FL)->FastIoIsQuestionable) \
)
-#define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
- (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
- (NLS_MB_CODE_PAGE_TAG && \
- (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
-)
+typedef
+VOID
+(NTAPI*POPLOCK_WAIT_COMPLETE_ROUTINE) (
+ IN PVOID Context,
+ IN PIRP Irp
+);
-#define FsRtlIsUnicodeCharacterWild(C) ( \
- (((C) >= 0x40) ? \
- FALSE : \
- FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
-)
+typedef
+VOID
+(NTAPI*POPLOCK_FS_PREPOST_IRP) (
+ IN PVOID Context,
+ IN PIRP Irp
+);
-#define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb) \
- ((_fc)->OwnerId = (_owner), \
- (_fc)->InstanceId = (_inst), \
- (_fc)->FreeCallback = (_cb))
-
-#define FsRtlGetPerFileContextPointer(_fo) \
- (FsRtlSupportsPerFileContexts(_fo) ? \
- FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
- NULL)
-
-#define FsRtlSupportsPerFileContexts(_fo) \
- ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
- (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
- (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
-
-#define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr ) \
-{ \
- FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
- if ((_fctxptr) != NULL) { \
- (_advhdr)->FileContextSupportPointer = (_fctxptr); \
- } \
-}
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlCheckOplock (
+ IN POPLOCK Oplock,
+ IN PIRP Irp,
+ IN PVOID Context,
+ IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
+ IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
+);
-#define FsRtlGetPerStreamContextPointer(FO) ( \
- (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
-)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlCurrentBatchOplock (
+ IN POPLOCK Oplock
+);
-#define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
- (PSC)->OwnerId = (O), \
- (PSC)->InstanceId = (I), \
- (PSC)->FreeCallback = (FC) \
-)
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlDeleteKeyFromTunnelCache (
+ IN PTUNNEL Cache,
+ IN ULONGLONG DirectoryKey
+);
-#define FsRtlSupportsPerStreamContexts(FO) ( \
- (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
- FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
- FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
-)
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlDeleteTunnelCache (
+ IN PTUNNEL Cache
+);
-#define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
- (((NULL != (_sc)) && \
- FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
- !IsListEmpty(&(_sc)->FilterContexts)) ? \
- FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \
- NULL)
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlDeregisterUncProvider (
+ IN HANDLE Handle
+);
+NTKERNELAPI
VOID
-FORCEINLINE
NTAPI
-FsRtlSetupAdvancedHeader(
- IN PVOID AdvHdr,
- IN PFAST_MUTEX FMutex )
-{
- PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr;
-
- localAdvHdr->Flags |= FSRTL_FLAG_ADVANCED_HEADER;
- localAdvHdr->Flags2 |= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS;
-#if (NTDDI_VERSION >= NTDDI_VISTA)
- localAdvHdr->Version = FSRTL_FCB_HEADER_V1;
-#else
- localAdvHdr->Version = FSRTL_FCB_HEADER_V0;
-#endif
- InitializeListHead( &localAdvHdr->FilterContexts );
- if (FMutex != NULL) {
- localAdvHdr->FastMutex = FMutex;
- }
-#if (NTDDI_VERSION >= NTDDI_VISTA)
- *((PULONG_PTR)(&localAdvHdr->PushLock)) = 0;
- localAdvHdr->FileContextSupportPointer = NULL;
-#endif
-}
-
-#define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
- ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
-
-#define FsRtlCompleteRequest(IRP,STATUS) { \
- (IRP)->IoStatus.Status = (STATUS); \
- IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
-}
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER;
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER {
- NetworkOpenLocationAny,
- NetworkOpenLocationRemote,
- NetworkOpenLocationLoopback
-} NETWORK_OPEN_LOCATION_QUALIFIER;
-
-typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER {
- NetworkOpenIntegrityAny,
- NetworkOpenIntegrityNone,
- NetworkOpenIntegritySigned,
- NetworkOpenIntegrityEncrypted,
- NetworkOpenIntegrityMaximum
-} NETWORK_OPEN_INTEGRITY_QUALIFIER;
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-#define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
-#define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
-#define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
-
-typedef struct _NETWORK_OPEN_ECP_CONTEXT {
- USHORT Size;
- USHORT Reserved;
- struct {
- struct {
- NETWORK_OPEN_LOCATION_QUALIFIER Location;
- NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
- ULONG Flags;
- } in;
- struct {
- NETWORK_OPEN_LOCATION_QUALIFIER Location;
- NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
- ULONG Flags;
- } out;
- } DUMMYSTRUCTNAME;
-} NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
-
-typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 {
- USHORT Size;
- USHORT Reserved;
- struct {
- struct {
- NETWORK_OPEN_LOCATION_QUALIFIER Location;
- NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
- } in;
- struct {
- NETWORK_OPEN_LOCATION_QUALIFIER Location;
- NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
- } out;
- } DUMMYSTRUCTNAME;
-} NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0;
-
-#elif (NTDDI_VERSION >= NTDDI_VISTA)
-typedef struct _NETWORK_OPEN_ECP_CONTEXT {
- USHORT Size;
- USHORT Reserved;
- struct {
- struct {
- NETWORK_OPEN_LOCATION_QUALIFIER Location;
- NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
- } in;
- struct {
- NETWORK_OPEN_LOCATION_QUALIFIER Location;
- NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
- } out;
- } DUMMYSTRUCTNAME;
-} NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
-#endif
-
-DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8 );
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
- PVOID Context;
-} PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
-
-DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55 );
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
-DEFINE_GUID(GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53 );
-
-typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS;
-
-typedef struct _NFS_OPEN_ECP_CONTEXT {
- PUNICODE_STRING ExportAlias;
- PSOCKADDR_STORAGE_NFS ClientSocketAddress;
-} NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT;
-
-typedef struct _SRV_OPEN_ECP_CONTEXT {
- PUNICODE_STRING ShareName;
- PSOCKADDR_STORAGE_NFS SocketAddress;
- BOOLEAN OplockBlockState;
- BOOLEAN OplockAppState;
- BOOLEAN OplockFinalState;
-} SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT;
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-#define VACB_MAPPING_GRANULARITY (0x40000)
-#define VACB_OFFSET_SHIFT (18)
-
-typedef struct _PUBLIC_BCB {
- CSHORT NodeTypeCode;
- CSHORT NodeByteSize;
- ULONG MappedLength;
- LARGE_INTEGER MappedFileOffset;
-} PUBLIC_BCB, *PPUBLIC_BCB;
-
-typedef struct _CC_FILE_SIZES {
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER FileSize;
- LARGE_INTEGER ValidDataLength;
-} CC_FILE_SIZES, *PCC_FILE_SIZES;
-
-typedef BOOLEAN
-(NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
- IN PVOID Context,
- IN BOOLEAN Wait);
-
-typedef VOID
-(NTAPI *PRELEASE_FROM_LAZY_WRITE) (
- IN PVOID Context);
-
-typedef BOOLEAN
-(NTAPI *PACQUIRE_FOR_READ_AHEAD) (
- IN PVOID Context,
- IN BOOLEAN Wait);
-
-typedef VOID
-(NTAPI *PRELEASE_FROM_READ_AHEAD) (
- IN PVOID Context);
-
-typedef struct _CACHE_MANAGER_CALLBACKS {
- PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
- PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
- PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
- PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
-} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
-
-typedef struct _CACHE_UNINITIALIZE_EVENT {
- struct _CACHE_UNINITIALIZE_EVENT *Next;
- KEVENT Event;
-} CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
-
-typedef VOID
-(NTAPI *PDIRTY_PAGE_ROUTINE) (
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN PLARGE_INTEGER OldestLsn,
- IN PLARGE_INTEGER NewestLsn,
- IN PVOID Context1,
- IN PVOID Context2);
-
-typedef VOID
-(NTAPI *PFLUSH_TO_LSN) (
- IN PVOID LogHandle,
- IN LARGE_INTEGER Lsn);
-
-typedef VOID
-(NTAPI *PCC_POST_DEFERRED_WRITE) (
- IN PVOID Context1,
- IN PVOID Context2);
-
-#define CcIsFileCached(FO) ( \
- ((FO)->SectionObjectPointer != NULL) && \
- (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
-)
-
-extern ULONG CcFastMdlReadWait;
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+FsRtlDissectDbcs (
+ IN ANSI_STRING Name,
+ OUT PANSI_STRING FirstPart,
+ OUT PANSI_STRING RemainingPart
+);
NTKERNELAPI
VOID
NTAPI
-CcInitializeCacheMap(
- IN PFILE_OBJECT FileObject,
- IN PCC_FILE_SIZES FileSizes,
- IN BOOLEAN PinAccess,
- IN PCACHE_MANAGER_CALLBACKS Callbacks,
- IN PVOID LazyWriteContext);
+FsRtlDissectName (
+ IN UNICODE_STRING Name,
+ OUT PUNICODE_STRING FirstPart,
+ OUT PUNICODE_STRING RemainingPart
+);
NTKERNELAPI
BOOLEAN
NTAPI
-CcUninitializeCacheMap(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER TruncateSize OPTIONAL,
- IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcSetFileSizes(
- IN PFILE_OBJECT FileObject,
- IN PCC_FILE_SIZES FileSizes);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcSetDirtyPageThreshold(
- IN PFILE_OBJECT FileObject,
- IN ULONG DirtyPageThreshold);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcFlushCache(
- IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
- IN PLARGE_INTEGER FileOffset OPTIONAL,
- IN ULONG Length,
- OUT PIO_STATUS_BLOCK IoStatus OPTIONAL);
+FsRtlDoesDbcsContainWildCards (
+ IN PANSI_STRING Name
+);
NTKERNELAPI
-LARGE_INTEGER
+BOOLEAN
NTAPI
-CcGetFlushedValidData(
- IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
- IN BOOLEAN BcbListHeld);
+FsRtlDoesNameContainWildCards (
+ IN PUNICODE_STRING Name
+);
NTKERNELAPI
BOOLEAN
NTAPI
-CcZeroData(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER StartOffset,
- IN PLARGE_INTEGER EndOffset,
- IN BOOLEAN Wait);
+FsRtlIsFatDbcsLegal (
+ IN ANSI_STRING DbcsName,
+ IN BOOLEAN WildCardsPermissible,
+ IN BOOLEAN PathNamePermissible,
+ IN BOOLEAN LeadingBackslashPermissible
+ );
-NTKERNELAPI
-PVOID
-NTAPI
-CcRemapBcb(
- IN PVOID Bcb);
-NTKERNELAPI
-VOID
-NTAPI
-CcRepinBcb(
- IN PVOID Bcb);
+#define FsRtlCompleteRequest(IRP,STATUS) { \
+ (IRP)->IoStatus.Status = (STATUS); \
+ IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
+}
-NTKERNELAPI
-VOID
-NTAPI
-CcUnpinRepinnedBcb(
- IN PVOID Bcb,
- IN BOOLEAN WriteThrough,
- OUT PIO_STATUS_BLOCK IoStatus);
+#define FsRtlEnterFileSystem KeEnterCriticalRegion
-NTKERNELAPI
-PFILE_OBJECT
-NTAPI
-CcGetFileObjectFromSectionPtrs(
- IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
+#define FsRtlExitFileSystem KeLeaveCriticalRegion
-NTKERNELAPI
-PFILE_OBJECT
-NTAPI
-CcGetFileObjectFromBcb(
- IN PVOID Bcb);
+#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
+ FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
+)
NTKERNELAPI
BOOLEAN
NTAPI
-CcCanIWrite(
- IN PFILE_OBJECT FileObject,
- IN ULONG BytesToWrite,
- IN BOOLEAN Wait,
- IN BOOLEAN Retrying);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcDeferWrite(
- IN PFILE_OBJECT FileObject,
- IN PCC_POST_DEFERRED_WRITE PostRoutine,
- IN PVOID Context1,
- IN PVOID Context2,
- IN ULONG BytesToWrite,
- IN BOOLEAN Retrying);
+FsRtlFindInTunnelCache (
+ IN PTUNNEL Cache,
+ IN ULONGLONG DirectoryKey,
+ IN PUNICODE_STRING Name,
+ OUT PUNICODE_STRING ShortName,
+ OUT PUNICODE_STRING LongName,
+ IN OUT PULONG DataLength,
+ OUT PVOID Data
+);
NTKERNELAPI
BOOLEAN
NTAPI
-CcCopyRead(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- OUT PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatus);
+FsRtlGetNextBaseMcbEntry (
+ IN PBASE_MCB Mcb,
+ IN ULONG RunIndex,
+ OUT PLONGLONG Vbn,
+ OUT PLONGLONG Lbn,
+ OUT PLONGLONG SectorCount
+);
NTKERNELAPI
-VOID
+BOOLEAN
NTAPI
-CcFastCopyRead(
- IN PFILE_OBJECT FileObject,
- IN ULONG FileOffset,
- IN ULONG Length,
- IN ULONG PageCount,
- OUT PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatus);
+FsRtlGetNextLargeMcbEntry (
+ IN PLARGE_MCB Mcb,
+ IN ULONG RunIndex,
+ OUT PLONGLONG Vbn,
+ OUT PLONGLONG Lbn,
+ OUT PLONGLONG SectorCount
+);
NTKERNELAPI
BOOLEAN
NTAPI
-CcCopyWrite(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- IN PVOID Buffer);
+FsRtlGetNextMcbEntry (
+ IN PMCB Mcb,
+ IN ULONG RunIndex,
+ OUT PVBN Vbn,
+ OUT PLBN Lbn,
+ OUT PULONG SectorCount
+);
-NTKERNELAPI
-VOID
-NTAPI
-CcFastCopyWrite(
- IN PFILE_OBJECT FileObject,
- IN ULONG FileOffset,
- IN ULONG Length,
- IN PVOID Buffer);
+#define FsRtlGetPerStreamContextPointer(FO) ( \
+ (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
+)
NTKERNELAPI
VOID
NTAPI
-CcMdlRead(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- OUT PMDL *MdlChain,
- OUT PIO_STATUS_BLOCK IoStatus);
+FsRtlInitializeBaseMcb (
+ IN PBASE_MCB Mcb,
+ IN POOL_TYPE PoolType
+);
NTKERNELAPI
VOID
NTAPI
-CcMdlReadComplete(
- IN PFILE_OBJECT FileObject,
- IN PMDL MdlChain);
+FsRtlInitializeLargeMcb (
+ IN PLARGE_MCB Mcb,
+ IN POOL_TYPE PoolType
+);
NTKERNELAPI
VOID
NTAPI
-CcPrepareMdlWrite(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- OUT PMDL *MdlChain,
- OUT PIO_STATUS_BLOCK IoStatus);
+FsRtlInitializeMcb (
+ IN PMCB Mcb,
+ IN POOL_TYPE PoolType
+);
NTKERNELAPI
VOID
NTAPI
-CcMdlWriteComplete(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN PMDL MdlChain);
+FsRtlInitializeOplock (
+ IN OUT POPLOCK Oplock
+);
NTKERNELAPI
VOID
NTAPI
-CcScheduleReadAhead(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length);
+FsRtlInitializeTunnelCache (
+ IN PTUNNEL Cache
+);
+
+#define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
+ (PSC)->OwnerId = (O), \
+ (PSC)->InstanceId = (I), \
+ (PSC)->FreeCallback = (FC) \
+)
NTKERNELAPI
NTSTATUS
NTAPI
-CcWaitForCurrentLazyWriterActivity(
- VOID);
+FsRtlInsertPerStreamContext (
+ IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
+ IN PFSRTL_PER_STREAM_CONTEXT Ptr
+);
+
+#define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
+ FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
+ ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
+)
+
+#define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
+ FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
+ ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
+)
+
+#define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
+ FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
+ ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
+)
+
+#define FsRtlIsAnsiCharacterWild(C) ( \
+ FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
+)
NTKERNELAPI
-VOID
+BOOLEAN
NTAPI
-CcSetReadAheadGranularity(
- IN PFILE_OBJECT FileObject,
- IN ULONG Granularity);
+FsRtlIsFatDbcsLegal (
+ IN ANSI_STRING DbcsName,
+ IN BOOLEAN WildCardsPermissible,
+ IN BOOLEAN PathNamePermissible,
+ IN BOOLEAN LeadingBackslashPermissible
+);
NTKERNELAPI
BOOLEAN
NTAPI
-CcPinRead(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN ULONG Flags,
- OUT PVOID *Bcb,
- OUT PVOID *Buffer);
+FsRtlIsHpfsDbcsLegal (
+ IN ANSI_STRING DbcsName,
+ IN BOOLEAN WildCardsPermissible,
+ IN BOOLEAN PathNamePermissible,
+ IN BOOLEAN LeadingBackslashPermissible
+);
NTKERNELAPI
BOOLEAN
NTAPI
-CcPinMappedData(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN ULONG Flags,
- IN OUT PVOID *Bcb);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-CcPreparePinWrite(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Zero,
- IN ULONG Flags,
- OUT PVOID *Bcb,
- OUT PVOID *Buffer);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcSetDirtyPinnedData(
- IN PVOID BcbVoid,
- IN PLARGE_INTEGER Lsn OPTIONAL);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcUnpinData(
- IN PVOID Bcb);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcSetBcbOwnerPointer(
- IN PVOID Bcb,
- IN PVOID OwnerPointer);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcUnpinDataForThread(
- IN PVOID Bcb,
- IN ERESOURCE_THREAD ResourceThreadId);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcSetAdditionalCacheAttributes(
- IN PFILE_OBJECT FileObject,
- IN BOOLEAN DisableReadAhead,
- IN BOOLEAN DisableWriteBehind);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-CcIsThereDirtyData(
- IN PVPB Vpb);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-
-NTKERNELAPI
-VOID
-NTAPI
-CcMdlWriteAbort(
- IN PFILE_OBJECT FileObject,
- IN PMDL MdlChain);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcSetLogHandleForFile(
- IN PFILE_OBJECT FileObject,
- IN PVOID LogHandle,
- IN PFLUSH_TO_LSN FlushToLsnRoutine);
-
-NTKERNELAPI
-LARGE_INTEGER
-NTAPI
-CcGetDirtyPages(
- IN PVOID LogHandle,
- IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
- IN PVOID Context1,
- IN PVOID Context2);
-
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-CcMapData(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN ULONG Flags,
- OUT PVOID *Bcb,
- OUT PVOID *Buffer);
-#elif (NTDDI_VERSION >= NTDDI_WIN2K)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-CcMapData(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- OUT PVOID *Bcb,
- OUT PVOID *Buffer);
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-CcSetFileSizesEx(
- IN PFILE_OBJECT FileObject,
- IN PCC_FILE_SIZES FileSizes);
-
-NTKERNELAPI
-PFILE_OBJECT
-NTAPI
-CcGetFileObjectFromSectionPtrsRef(
- IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
-
-NTKERNELAPI
-VOID
-NTAPI
-CcSetParallelFlushFile(
- IN PFILE_OBJECT FileObject,
- IN BOOLEAN EnableParallelFlush);
+FsRtlIsNameInExpression (
+ IN PUNICODE_STRING Expression,
+ IN PUNICODE_STRING Name,
+ IN BOOLEAN IgnoreCase,
+ IN PWCHAR UpcaseTable OPTIONAL
+);
NTKERNELAPI
BOOLEAN
-CcIsThereDirtyDataEx(
- IN PVPB Vpb,
- IN PULONG NumberOfDirtyPages OPTIONAL);
-
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-NTKERNELAPI
-VOID
NTAPI
-CcCoherencyFlushAndPurgeCache(
- IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
- IN PLARGE_INTEGER FileOffset OPTIONAL,
- IN ULONG Length,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN ULONG Flags OPTIONAL);
-#endif
-
-#define CcGetFileSizePointer(FO) ( \
- ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
-)
-
-#define UNINITIALIZE_CACHE_MAPS (1)
-#define DO_NOT_RETRY_PURGE (2)
-#define DO_NOT_PURGE_DIRTY_PAGES (0x4)
-
-#define CC_FLUSH_AND_PURGE_NO_PURGE (0x1)
+FsRtlIsNtstatusExpected (
+ IN NTSTATUS Ntstatus
+);
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-CcPurgeCacheSection(
- IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
- IN PLARGE_INTEGER FileOffset OPTIONAL,
- IN ULONG Length,
- IN ULONG Flags);
-#elif (NTDDI_VERSION >= NTDDI_WIN2K)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-CcPurgeCacheSection(
- IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
- IN PLARGE_INTEGER FileOffset OPTIONAL,
- IN ULONG Length,
- IN BOOLEAN UninitializeCacheMaps);
-#endif
+#define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-CcCopyWriteWontFlush(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length);
-#else
-#define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
-#endif
+extern PUSHORT NlsOemLeadByteInfo;
-#define CcReadAhead(FO, FOFF, LEN) ( \
- if ((LEN) >= 256) { \
- CcScheduleReadAhead((FO), (FOFF), (LEN)); \
- } \
+#define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
+ (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
+ (NLS_MB_CODE_PAGE_TAG && \
+ (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
)
-#define PIN_WAIT (1)
-#define PIN_EXCLUSIVE (2)
-#define PIN_NO_READ (4)
-#define PIN_IF_BCB (8)
-#define PIN_CALLER_TRACKS_DIRTY_DATA (32)
-#define PIN_HIGH_PRIORITY (64)
-
-#define MAP_WAIT 1
-#define MAP_NO_READ (16)
-#define MAP_HIGH_PRIORITY (64)
-
-#define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
-#define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
-
-typedef struct _QUERY_PATH_REQUEST {
- ULONG PathNameLength;
- PIO_SECURITY_CONTEXT SecurityContext;
- WCHAR FilePathName[1];
-} QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
-
-typedef struct _QUERY_PATH_REQUEST_EX {
- PIO_SECURITY_CONTEXT pSecurityContext;
- ULONG EaLength;
- PVOID pEaBuffer;
- UNICODE_STRING PathName;
- UNICODE_STRING DomainServiceName;
- ULONG_PTR Reserved[ 3 ];
-} QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX;
-
-typedef struct _QUERY_PATH_RESPONSE {
- ULONG LengthAccepted;
-} QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
-
-#define VOLSNAPCONTROLTYPE 0x00000053
-#define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwQueryObject(
- IN HANDLE Handle OPTIONAL,
- IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
- OUT PVOID ObjectInformation OPTIONAL,
- IN ULONG ObjectInformationLength,
- OUT PULONG ReturnLength OPTIONAL);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwNotifyChangeKey(
- IN HANDLE KeyHandle,
- IN HANDLE EventHandle OPTIONAL,
- IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
- IN PVOID ApcContext OPTIONAL,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN ULONG NotifyFilter,
- IN BOOLEAN WatchSubtree,
- OUT PVOID Buffer,
- IN ULONG BufferLength,
- IN BOOLEAN Asynchronous);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwCreateEvent(
- OUT PHANDLE EventHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN EVENT_TYPE EventType,
- IN BOOLEAN InitialState);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwDeleteFile(
- IN POBJECT_ATTRIBUTES ObjectAttributes);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwQueryDirectoryFile(
- IN HANDLE FileHandle,
- IN HANDLE Event OPTIONAL,
- IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
- IN PVOID ApcContext OPTIONAL,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- OUT PVOID FileInformation,
- IN ULONG Length,
- IN FILE_INFORMATION_CLASS FileInformationClass,
- IN BOOLEAN ReturnSingleEntry,
- IN PUNICODE_STRING FileName OPTIONAL,
- IN BOOLEAN RestartScan);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwSetVolumeInformationFile(
- IN HANDLE FileHandle,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PVOID FsInformation,
- IN ULONG Length,
- IN FS_INFORMATION_CLASS FsInformationClass);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwFsControlFile(
- IN HANDLE FileHandle,
- IN HANDLE Event OPTIONAL,
- IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
- IN PVOID ApcContext OPTIONAL,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN ULONG FsControlCode,
- IN PVOID InputBuffer OPTIONAL,
- IN ULONG InputBufferLength,
- OUT PVOID OutputBuffer OPTIONAL,
- IN ULONG OutputBufferLength);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwDuplicateObject(
- IN HANDLE SourceProcessHandle,
- IN HANDLE SourceHandle,
- IN HANDLE TargetProcessHandle OPTIONAL,
- OUT PHANDLE TargetHandle OPTIONAL,
- IN ACCESS_MASK DesiredAccess,
- IN ULONG HandleAttributes,
- IN ULONG Options);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwOpenDirectoryObject(
- OUT PHANDLE DirectoryHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwAllocateVirtualMemory(
- IN HANDLE ProcessHandle,
- IN OUT PVOID *BaseAddress,
- IN ULONG_PTR ZeroBits,
- IN OUT PSIZE_T RegionSize,
- IN ULONG AllocationType,
- IN ULONG Protect);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwFreeVirtualMemory(
- IN HANDLE ProcessHandle,
- IN OUT PVOID *BaseAddress,
- IN OUT PSIZE_T RegionSize,
- IN ULONG FreeType);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwWaitForSingleObject(
- IN HANDLE Handle,
- IN BOOLEAN Alertable,
- IN PLARGE_INTEGER Timeout OPTIONAL);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwSetEvent(
- IN HANDLE EventHandle,
- OUT PLONG PreviousState OPTIONAL);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwFlushVirtualMemory(
- IN HANDLE ProcessHandle,
- IN OUT PVOID *BaseAddress,
- IN OUT PSIZE_T RegionSize,
- OUT PIO_STATUS_BLOCK IoStatusBlock);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwQueryInformationToken(
- IN HANDLE TokenHandle,
- IN TOKEN_INFORMATION_CLASS TokenInformationClass,
- OUT PVOID TokenInformation,
- IN ULONG Length,
- OUT PULONG ResultLength);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwSetSecurityObject(
- IN HANDLE Handle,
- IN SECURITY_INFORMATION SecurityInformation,
- IN PSECURITY_DESCRIPTOR SecurityDescriptor);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwQuerySecurityObject(
- IN HANDLE FileHandle,
- IN SECURITY_INFORMATION SecurityInformation,
- OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN ULONG Length,
- OUT PULONG ResultLength);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwOpenProcessTokenEx(
- IN HANDLE ProcessHandle,
- IN ACCESS_MASK DesiredAccess,
- IN ULONG HandleAttributes,
- OUT PHANDLE TokenHandle);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwOpenThreadTokenEx(
- IN HANDLE ThreadHandle,
- IN ACCESS_MASK DesiredAccess,
- IN BOOLEAN OpenAsSelf,
- IN ULONG HandleAttributes,
- OUT PHANDLE TokenHandle);
-
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwLockFile(
- IN HANDLE FileHandle,
- IN HANDLE Event OPTIONAL,
- IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
- IN PVOID ApcContext OPTIONAL,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PLARGE_INTEGER ByteOffset,
- IN PLARGE_INTEGER Length,
- IN ULONG Key,
- IN BOOLEAN FailImmediately,
- IN BOOLEAN ExclusiveLock);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwUnlockFile(
- IN HANDLE FileHandle,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PLARGE_INTEGER ByteOffset,
- IN PLARGE_INTEGER Length,
- IN ULONG Key);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwQueryQuotaInformationFile(
- IN HANDLE FileHandle,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- OUT PVOID Buffer,
- IN ULONG Length,
- IN BOOLEAN ReturnSingleEntry,
- IN PVOID SidList,
- IN ULONG SidListLength,
- IN PSID StartSid OPTIONAL,
- IN BOOLEAN RestartScan);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwSetQuotaInformationFile(
- IN HANDLE FileHandle,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PVOID Buffer,
- IN ULONG Length);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwFlushBuffersFile(
- IN HANDLE FileHandle,
- OUT PIO_STATUS_BLOCK IoStatusBlock);
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwSetInformationToken(
- IN HANDLE TokenHandle,
- IN TOKEN_INFORMATION_CLASS TokenInformationClass,
- IN PVOID TokenInformation,
- IN ULONG TokenInformationLength);
-#endif
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwQueryEaFile(
- IN HANDLE FileHandle,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- OUT PVOID Buffer,
- IN ULONG Length,
- IN BOOLEAN ReturnSingleEntry,
- IN PVOID EaList OPTIONAL,
- IN ULONG EaListLength,
- IN PULONG EaIndex OPTIONAL,
- IN BOOLEAN RestartScan);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwSetEaFile(
- IN HANDLE FileHandle,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- OUT PVOID Buffer,
- IN ULONG Length);
-
-NTSYSAPI
-NTSTATUS
-NTAPI
-ZwDuplicateToken(
- IN HANDLE ExistingTokenHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN BOOLEAN EffectiveOnly,
- IN TOKEN_TYPE TokenType,
- OUT PHANDLE NewTokenHandle);
-
-#pragma pack(push,4)
-
-#ifndef VER_PRODUCTBUILD
-#define VER_PRODUCTBUILD 10000
-#endif
-
-#include "csq.h"
-
-extern PACL SePublicDefaultDacl;
-extern PACL SeSystemDefaultDacl;
-
-#define FS_LFN_APIS 0x00004000
-
-#define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
-#define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
-#define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
-#define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
-#define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
-#define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
-#define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
-#define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
-#define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
-#define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
-#define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
-#define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
-#define FILE_STORAGE_TYPE_MASK 0x000f0000
-#define FILE_STORAGE_TYPE_SHIFT 16
-
-#define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
-
-#ifdef _X86_
-#define HARDWARE_PTE HARDWARE_PTE_X86
-#define PHARDWARE_PTE PHARDWARE_PTE_X86
-#endif
-
-#define IO_ATTACH_DEVICE_API 0x80000000
-
-#define IO_TYPE_APC 18
-#define IO_TYPE_DPC 19
-#define IO_TYPE_DEVICE_QUEUE 20
-#define IO_TYPE_EVENT_PAIR 21
-#define IO_TYPE_INTERRUPT 22
-#define IO_TYPE_PROFILE 23
-
-#define IRP_BEING_VERIFIED 0x10
-
-#define MAILSLOT_CLASS_FIRSTCLASS 1
-#define MAILSLOT_CLASS_SECONDCLASS 2
-
-#define MAILSLOT_SIZE_AUTO 0
-
-#define MEM_DOS_LIM 0x40000000
-
-#define OB_TYPE_TYPE 1
-#define OB_TYPE_DIRECTORY 2
-#define OB_TYPE_SYMBOLIC_LINK 3
-#define OB_TYPE_TOKEN 4
-#define OB_TYPE_PROCESS 5
-#define OB_TYPE_THREAD 6
-#define OB_TYPE_EVENT 7
-#define OB_TYPE_EVENT_PAIR 8
-#define OB_TYPE_MUTANT 9
-#define OB_TYPE_SEMAPHORE 10
-#define OB_TYPE_TIMER 11
-#define OB_TYPE_PROFILE 12
-#define OB_TYPE_WINDOW_STATION 13
-#define OB_TYPE_DESKTOP 14
-#define OB_TYPE_SECTION 15
-#define OB_TYPE_KEY 16
-#define OB_TYPE_PORT 17
-#define OB_TYPE_ADAPTER 18
-#define OB_TYPE_CONTROLLER 19
-#define OB_TYPE_DEVICE 20
-#define OB_TYPE_DRIVER 21
-#define OB_TYPE_IO_COMPLETION 22
-#define OB_TYPE_FILE 23
-
-#define SEC_BASED 0x00200000
-
-/* end winnt.h */
-
-#define TOKEN_HAS_ADMIN_GROUP 0x08
-
-#if (VER_PRODUCTBUILD >= 1381)
-#define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
-#endif /* (VER_PRODUCTBUILD >= 1381) */
-
-#if (VER_PRODUCTBUILD >= 2195)
-
-#define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
-#define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
-
-#define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
-
-#define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
-#define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
-#define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
-#define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
-#endif /* (VER_PRODUCTBUILD >= 2195) */
-
-#define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
-#define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
-#define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
-#define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
-#define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
-#define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
-#define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
-#define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-typedef enum _FILE_STORAGE_TYPE {
- StorageTypeDefault = 1,
- StorageTypeDirectory,
- StorageTypeFile,
- StorageTypeJunctionPoint,
- StorageTypeCatalog,
- StorageTypeStructuredStorage,
- StorageTypeEmbedding,
- StorageTypeStream
-} FILE_STORAGE_TYPE;
-
-typedef struct _OBJECT_BASIC_INFORMATION
-{
- ULONG Attributes;
- ACCESS_MASK GrantedAccess;
- ULONG HandleCount;
- ULONG PointerCount;
- ULONG PagedPoolCharge;
- ULONG NonPagedPoolCharge;
- ULONG Reserved[ 3 ];
- ULONG NameInfoSize;
- ULONG TypeInfoSize;
- ULONG SecurityDescriptorSize;
- LARGE_INTEGER CreationTime;
-} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
-
-typedef struct _BITMAP_RANGE {
- LIST_ENTRY Links;
- LONGLONG BasePage;
- ULONG FirstDirtyPage;
- ULONG LastDirtyPage;
- ULONG DirtyPages;
- PULONG Bitmap;
-} BITMAP_RANGE, *PBITMAP_RANGE;
-
-typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
- BOOLEAN ReplaceIfExists;
- HANDLE RootDirectory;
- ULONG FileNameLength;
- WCHAR FileName[1];
-} FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
-
-typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
- ULONG NextEntryOffset;
- ULONG FileIndex;
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER EndOfFile;
- LARGE_INTEGER AllocationSize;
- ULONG FileAttributes;
- ULONG FileNameLength;
- ULONG EaSize;
- WCHAR FileName[ANYSIZE_ARRAY];
-} FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
-
-/* raw internal file lock struct returned from FsRtlGetNextFileLock */
-typedef struct _FILE_SHARED_LOCK_ENTRY {
- PVOID Unknown1;
- PVOID Unknown2;
- FILE_LOCK_INFO FileLock;
-} FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
-
-/* raw internal file lock struct returned from FsRtlGetNextFileLock */
-typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
- LIST_ENTRY ListEntry;
- PVOID Unknown1;
- PVOID Unknown2;
- FILE_LOCK_INFO FileLock;
-} FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
-
-typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
- ULONG ReadDataAvailable;
- ULONG NumberOfMessages;
- ULONG MessageLength;
-} FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
-
-typedef struct _FILE_OLE_CLASSID_INFORMATION {
- GUID ClassId;
-} FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
-
-typedef struct _FILE_OLE_ALL_INFORMATION {
- FILE_BASIC_INFORMATION BasicInformation;
- FILE_STANDARD_INFORMATION StandardInformation;
- FILE_INTERNAL_INFORMATION InternalInformation;
- FILE_EA_INFORMATION EaInformation;
- FILE_ACCESS_INFORMATION AccessInformation;
- FILE_POSITION_INFORMATION PositionInformation;
- FILE_MODE_INFORMATION ModeInformation;
- FILE_ALIGNMENT_INFORMATION AlignmentInformation;
- USN LastChangeUsn;
- USN ReplicationUsn;
- LARGE_INTEGER SecurityChangeTime;
- FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
- FILE_OBJECTID_INFORMATION ObjectIdInformation;
- FILE_STORAGE_TYPE StorageType;
- ULONG OleStateBits;
- ULONG OleId;
- ULONG NumberOfStreamReferences;
- ULONG StreamIndex;
- ULONG SecurityId;
- BOOLEAN ContentIndexDisable;
- BOOLEAN InheritContentIndexDisable;
- FILE_NAME_INFORMATION NameInformation;
-} FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
-
-typedef struct _FILE_OLE_DIR_INFORMATION {
- ULONG NextEntryOffset;
- ULONG FileIndex;
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER EndOfFile;
- LARGE_INTEGER AllocationSize;
- ULONG FileAttributes;
- ULONG FileNameLength;
- FILE_STORAGE_TYPE StorageType;
- GUID OleClassId;
- ULONG OleStateBits;
- BOOLEAN ContentIndexDisable;
- BOOLEAN InheritContentIndexDisable;
- WCHAR FileName[1];
-} FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
-
-typedef struct _FILE_OLE_INFORMATION {
- LARGE_INTEGER SecurityChangeTime;
- FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
- FILE_OBJECTID_INFORMATION ObjectIdInformation;
- FILE_STORAGE_TYPE StorageType;
- ULONG OleStateBits;
- BOOLEAN ContentIndexDisable;
- BOOLEAN InheritContentIndexDisable;
-} FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
-
-typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
- ULONG StateBits;
- ULONG StateBitsMask;
-} FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
-
-typedef struct _MAPPING_PAIR {
- ULONGLONG Vcn;
- ULONGLONG Lcn;
-} MAPPING_PAIR, *PMAPPING_PAIR;
-
-typedef struct _GET_RETRIEVAL_DESCRIPTOR {
- ULONG NumberOfPairs;
- ULONGLONG StartVcn;
- MAPPING_PAIR Pair[1];
-} GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
-
-typedef struct _MBCB {
- CSHORT NodeTypeCode;
- CSHORT NodeIsInZone;
- ULONG PagesToWrite;
- ULONG DirtyPages;
- ULONG Reserved;
- LIST_ENTRY BitmapRanges;
- LONGLONG ResumeWritePage;
- BITMAP_RANGE BitmapRange1;
- BITMAP_RANGE BitmapRange2;
- BITMAP_RANGE BitmapRange3;
-} MBCB, *PMBCB;
-
-typedef struct _MOVEFILE_DESCRIPTOR {
- HANDLE FileHandle;
- ULONG Reserved;
- LARGE_INTEGER StartVcn;
- LARGE_INTEGER TargetLcn;
- ULONG NumVcns;
- ULONG Reserved1;
-} MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
-
-typedef struct _OBJECT_BASIC_INFO {
- ULONG Attributes;
- ACCESS_MASK GrantedAccess;
- ULONG HandleCount;
- ULONG ReferenceCount;
- ULONG PagedPoolUsage;
- ULONG NonPagedPoolUsage;
- ULONG Reserved[3];
- ULONG NameInformationLength;
- ULONG TypeInformationLength;
- ULONG SecurityDescriptorLength;
- LARGE_INTEGER CreateTime;
-} OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
-
-typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
- BOOLEAN Inherit;
- BOOLEAN ProtectFromClose;
-} OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
-
-typedef struct _OBJECT_NAME_INFO {
- UNICODE_STRING ObjectName;
- WCHAR ObjectNameBuffer[1];
-} OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
-
-typedef struct _OBJECT_PROTECTION_INFO {
- BOOLEAN Inherit;
- BOOLEAN ProtectHandle;
-} OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
-
-typedef struct _OBJECT_TYPE_INFO {
- UNICODE_STRING ObjectTypeName;
- UCHAR Unknown[0x58];
- WCHAR ObjectTypeNameBuffer[1];
-} OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
-
-typedef struct _OBJECT_ALL_TYPES_INFO {
- ULONG NumberOfObjectTypes;
- OBJECT_TYPE_INFO ObjectsTypeInfo[1];
-} OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
-
-#if defined(USE_LPC6432)
-#define LPC_CLIENT_ID CLIENT_ID64
-#define LPC_SIZE_T ULONGLONG
-#define LPC_PVOID ULONGLONG
-#define LPC_HANDLE ULONGLONG
-#else
-#define LPC_CLIENT_ID CLIENT_ID
-#define LPC_SIZE_T SIZE_T
-#define LPC_PVOID PVOID
-#define LPC_HANDLE HANDLE
-#endif
-
-typedef struct _PORT_MESSAGE
-{
- union
- {
- struct
- {
- CSHORT DataLength;
- CSHORT TotalLength;
- } s1;
- ULONG Length;
- } u1;
- union
- {
- struct
- {
- CSHORT Type;
- CSHORT DataInfoOffset;
- } s2;
- ULONG ZeroInit;
- } u2;
- __GNU_EXTENSION union
- {
- LPC_CLIENT_ID ClientId;
- double DoNotUseThisField;
- };
- ULONG MessageId;
- __GNU_EXTENSION union
- {
- LPC_SIZE_T ClientViewSize;
- ULONG CallbackId;
- };
-} PORT_MESSAGE, *PPORT_MESSAGE;
-
-#define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
-
-typedef struct _PORT_VIEW
-{
- ULONG Length;
- LPC_HANDLE SectionHandle;
- ULONG SectionOffset;
- LPC_SIZE_T ViewSize;
- LPC_PVOID ViewBase;
- LPC_PVOID ViewRemoteBase;
-} PORT_VIEW, *PPORT_VIEW;
+#define FsRtlIsUnicodeCharacterWild(C) ( \
+ (((C) >= 0x40) ? \
+ FALSE : \
+ FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
+)
-typedef struct _REMOTE_PORT_VIEW
-{
- ULONG Length;
- LPC_SIZE_T ViewSize;
- LPC_PVOID ViewBase;
-} REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlLookupBaseMcbEntry (
+ IN PBASE_MCB Mcb,
+ IN LONGLONG Vbn,
+ OUT PLONGLONG Lbn OPTIONAL,
+ OUT PLONGLONG SectorCountFromLbn OPTIONAL,
+ OUT PLONGLONG StartingLbn OPTIONAL,
+ OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
+ OUT PULONG Index OPTIONAL
+);
-typedef struct _VAD_HEADER {
- PVOID StartVPN;
- PVOID EndVPN;
- struct _VAD_HEADER* ParentLink;
- struct _VAD_HEADER* LeftLink;
- struct _VAD_HEADER* RightLink;
- ULONG Flags; /* LSB = CommitCharge */
- PVOID ControlArea;
- PVOID FirstProtoPte;
- PVOID LastPTE;
- ULONG Unknown;
- LIST_ENTRY Secured;
-} VAD_HEADER, *PVAD_HEADER;
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlLookupLargeMcbEntry (
+ IN PLARGE_MCB Mcb,
+ IN LONGLONG Vbn,
+ OUT PLONGLONG Lbn OPTIONAL,
+ OUT PLONGLONG SectorCountFromLbn OPTIONAL,
+ OUT PLONGLONG StartingLbn OPTIONAL,
+ OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
+ OUT PULONG Index OPTIONAL
+);
NTKERNELAPI
-LARGE_INTEGER
+BOOLEAN
NTAPI
-CcGetLsnForFileObject (
- IN PFILE_OBJECT FileObject,
- OUT PLARGE_INTEGER OldestLsn OPTIONAL
+FsRtlLookupLastBaseMcbEntry (
+ IN PBASE_MCB Mcb,
+ OUT PLONGLONG Vbn,
+ OUT PLONGLONG Lbn
);
NTKERNELAPI
-PVOID
+BOOLEAN
NTAPI
-FsRtlAllocatePool (
- IN POOL_TYPE PoolType,
- IN ULONG NumberOfBytes
+FsRtlLookupLastLargeMcbEntry (
+ IN PLARGE_MCB Mcb,
+ OUT PLONGLONG Vbn,
+ OUT PLONGLONG Lbn
);
NTKERNELAPI
-PVOID
+BOOLEAN
NTAPI
-FsRtlAllocatePoolWithQuota (
- IN POOL_TYPE PoolType,
- IN ULONG NumberOfBytes
+FsRtlLookupLastMcbEntry (
+ IN PMCB Mcb,
+ OUT PVBN Vbn,
+ OUT PLBN Lbn
);
NTKERNELAPI
-PVOID
+BOOLEAN
NTAPI
-FsRtlAllocatePoolWithQuotaTag (
- IN POOL_TYPE PoolType,
- IN ULONG NumberOfBytes,
- IN ULONG Tag
+FsRtlLookupLastBaseMcbEntryAndIndex (
+ IN PBASE_MCB OpaqueMcb,
+ IN OUT PLONGLONG LargeVbn,
+ IN OUT PLONGLONG LargeLbn,
+ IN OUT PULONG Index
);
NTKERNELAPI
-PVOID
+BOOLEAN
NTAPI
-FsRtlAllocatePoolWithTag (
- IN POOL_TYPE PoolType,
- IN ULONG NumberOfBytes,
- IN ULONG Tag
+FsRtlLookupLastLargeMcbEntryAndIndex (
+ IN PLARGE_MCB OpaqueMcb,
+ OUT PLONGLONG LargeVbn,
+ OUT PLONGLONG LargeLbn,
+ OUT PULONG Index
);
NTKERNELAPI
BOOLEAN
NTAPI
-FsRtlIsFatDbcsLegal (
- IN ANSI_STRING DbcsName,
- IN BOOLEAN WildCardsPermissible,
- IN BOOLEAN PathNamePermissible,
- IN BOOLEAN LeadingBackslashPermissible
+FsRtlLookupMcbEntry (
+ IN PMCB Mcb,
+ IN VBN Vbn,
+ OUT PLBN Lbn,
+ OUT PULONG SectorCount OPTIONAL,
+ OUT PULONG Index
+);
+
+NTKERNELAPI
+PFSRTL_PER_STREAM_CONTEXT
+NTAPI
+FsRtlLookupPerStreamContextInternal (
+ IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
+ IN PVOID OwnerId OPTIONAL,
+ IN PVOID InstanceId OPTIONAL
);
NTKERNELAPI
IN PMDL MdlChain
);
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlNormalizeNtstatus (
+ IN NTSTATUS Exception,
+ IN NTSTATUS GenericException
+);
+
NTKERNELAPI
VOID
NTAPI
IN PIRP NotifyIrp
);
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyCleanup (
+ IN PNOTIFY_SYNC NotifySync,
+ IN PLIST_ENTRY NotifyList,
+ IN PVOID FsContext
+);
+
+typedef BOOLEAN (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
+ IN PVOID NotifyContext,
+ IN PVOID TargetContext,
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyFilterChangeDirectory (
+ IN PNOTIFY_SYNC NotifySync,
+ IN PLIST_ENTRY NotifyList,
+ IN PVOID FsContext,
+ IN PSTRING FullDirectoryName,
+ IN BOOLEAN WatchTree,
+ IN BOOLEAN IgnoreBuffer,
+ IN ULONG CompletionFilter,
+ IN PIRP NotifyIrp,
+ IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL,
+ IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyFilterReportChange (
+ IN PNOTIFY_SYNC NotifySync,
+ IN PLIST_ENTRY NotifyList,
+ IN PSTRING FullTargetName,
+ IN USHORT TargetNameOffset,
+ IN PSTRING StreamName OPTIONAL,
+ IN PSTRING NormalizedParentName OPTIONAL,
+ IN ULONG FilterMatch,
+ IN ULONG Action,
+ IN PVOID TargetContext,
+ IN PVOID FilterContext);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyFullChangeDirectory (
+ IN PNOTIFY_SYNC NotifySync,
+ IN PLIST_ENTRY NotifyList,
+ IN PVOID FsContext,
+ IN PSTRING FullDirectoryName,
+ IN BOOLEAN WatchTree,
+ IN BOOLEAN IgnoreBuffer,
+ IN ULONG CompletionFilter,
+ IN PIRP NotifyIrp,
+ IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyFullReportChange (
+ IN PNOTIFY_SYNC NotifySync,
+ IN PLIST_ENTRY NotifyList,
+ IN PSTRING FullTargetName,
+ IN USHORT TargetNameOffset,
+ IN PSTRING StreamName OPTIONAL,
+ IN PSTRING NormalizedParentName OPTIONAL,
+ IN ULONG FilterMatch,
+ IN ULONG Action,
+ IN PVOID TargetContext
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyInitializeSync (
+ IN PNOTIFY_SYNC *NotifySync
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyUninitializeSync (
+ IN PNOTIFY_SYNC *NotifySync
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlNotifyVolumeEvent (
+ IN PFILE_OBJECT FileObject,
+ IN ULONG EventCode
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+ULONG
+NTAPI
+FsRtlNumberOfRunsInBaseMcb (
+ IN PBASE_MCB Mcb
+);
+
+NTKERNELAPI
+ULONG
+NTAPI
+FsRtlNumberOfRunsInLargeMcb (
+ IN PLARGE_MCB Mcb
+);
+
+NTKERNELAPI
+ULONG
+NTAPI
+FsRtlNumberOfRunsInMcb (
+ IN PMCB Mcb
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlOplockFsctrl (
+ IN POPLOCK Oplock,
+ IN PIRP Irp,
+ IN ULONG OpenCount
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlOplockIsFastIoPossible (
+ IN POPLOCK Oplock
+);
+
+typedef VOID
+(NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) (
+ IN PVOID Context,
+ IN PKEVENT Event
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlPostPagingFileStackOverflow (
+ IN PVOID Context,
+ IN PKEVENT Event,
+ IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlPostStackOverflow (
+ IN PVOID Context,
+ IN PKEVENT Event,
+ IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlRegisterUncProvider (
+ IN OUT PHANDLE MupHandle,
+ IN PUNICODE_STRING RedirectorDeviceName,
+ IN BOOLEAN MailslotsSupported
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlRemoveBaseMcbEntry (
+ IN PBASE_MCB Mcb,
+ IN LONGLONG Vbn,
+ IN LONGLONG SectorCount
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlRemoveLargeMcbEntry (
+ IN PLARGE_MCB Mcb,
+ IN LONGLONG Vbn,
+ IN LONGLONG SectorCount
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlRemoveMcbEntry (
+ IN PMCB Mcb,
+ IN VBN Vbn,
+ IN ULONG SectorCount
+);
+
+NTKERNELAPI
+PFSRTL_PER_STREAM_CONTEXT
+NTAPI
+FsRtlRemovePerStreamContext (
+ IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
+ IN PVOID OwnerId OPTIONAL,
+ IN PVOID InstanceId OPTIONAL
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlResetBaseMcb (
+ IN PBASE_MCB Mcb
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlResetLargeMcb (
+ IN PLARGE_MCB Mcb,
+ IN BOOLEAN SelfSynchronized
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlSplitBaseMcb (
+ IN PBASE_MCB Mcb,
+ IN LONGLONG Vbn,
+ IN LONGLONG Amount
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlSplitLargeMcb (
+ IN PLARGE_MCB Mcb,
+ IN LONGLONG Vbn,
+ IN LONGLONG Amount
+);
+
+#define FsRtlSupportsPerStreamContexts(FO) ( \
+ (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
+ FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
+ FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
+)
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlTruncateBaseMcb (
+ IN PBASE_MCB Mcb,
+ IN LONGLONG Vbn
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlTruncateLargeMcb (
+ IN PLARGE_MCB Mcb,
+ IN LONGLONG Vbn
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlTruncateMcb (
+ IN PMCB Mcb,
+ IN VBN Vbn
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlUninitializeBaseMcb (
+ IN PBASE_MCB Mcb
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlUninitializeLargeMcb (
+ IN PLARGE_MCB Mcb
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlUninitializeMcb (
+ IN PMCB Mcb
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlUninitializeOplock (
+ IN OUT POPLOCK Oplock
+);
+
NTKERNELAPI
NTSTATUS
NTAPI
OUT PVOID *Object
);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsAssignImpersonationToken(
+ IN PETHREAD Thread,
+ IN HANDLE Token OPTIONAL);
+
+NTKERNELAPI
+HANDLE
+NTAPI
+PsReferencePrimaryToken(
+ IN OUT PEPROCESS Process);
+
+#endif
+
#define PsDereferenceImpersonationToken(T) \
{if (ARGUMENT_PRESENT(T)) { \
(ObDereferenceObject((T))); \
OUT PETHREAD *Thread
);
+NTSYSAPI
+VOID
+NTAPI
+RtlSecondsSince1970ToTime (
+ IN ULONG SecondsSince1970,
+ OUT PLARGE_INTEGER Time
+);
+
NTSYSAPI
NTSTATUS
NTAPI
IN BOOLEAN SaclDefaulted
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToCountedOemString (
+ IN OUT POEM_STRING DestinationString,
+ IN PCUNICODE_STRING SourceString,
+ IN BOOLEAN AllocateDestinationString
+);
+
+/* RTL Splay Tree Functions */
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSplay(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlDelete(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteNoSplay(
+ PRTL_SPLAY_LINKS Links,
+ PRTL_SPLAY_LINKS *Root
+);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
+
+#define RtlIsLeftChild(Links) \
+ (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlIsRightChild(Links) \
+ (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlRightChild(Links) \
+ ((PRTL_SPLAY_LINKS)(Links))->RightChild
+
+#define RtlIsRoot(Links) \
+ (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlLeftChild(Links) \
+ ((PRTL_SPLAY_LINKS)(Links))->LeftChild
+
+#define RtlParent(Links) \
+ ((PRTL_SPLAY_LINKS)(Links))->Parent
+
+#define RtlInitializeSplayLinks(Links) \
+ { \
+ PRTL_SPLAY_LINKS _SplayLinks; \
+ _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
+ _SplayLinks->Parent = _SplayLinks; \
+ _SplayLinks->LeftChild = NULL; \
+ _SplayLinks->RightChild = NULL; \
+ }
+
+#define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
+ { \
+ PRTL_SPLAY_LINKS _SplayParent; \
+ PRTL_SPLAY_LINKS _SplayChild; \
+ _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
+ _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
+ _SplayParent->LeftChild = _SplayChild; \
+ _SplayChild->Parent = _SplayParent; \
+ }
+
+#define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
+ { \
+ PRTL_SPLAY_LINKS _SplayParent; \
+ PRTL_SPLAY_LINKS _SplayChild; \
+ _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
+ _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
+ _SplayParent->RightChild = _SplayChild; \
+ _SplayChild->Parent = _SplayParent; \
+ }
+
+//
+// RTL time functions
+//
+
#define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
#if (VER_PRODUCTBUILD >= 2195)
IN HANDLE ThreadHandle
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwAllocateVirtualMemory (
+ IN HANDLE ProcessHandle,
+ IN OUT PVOID *BaseAddress,
+ IN ULONG_PTR ZeroBits,
+ IN OUT PSIZE_T RegionSize,
+ IN ULONG AllocationType,
+ IN ULONG Protect
+);
+
NTSYSAPI
NTSTATUS
NTAPI
IN BOOLEAN GenerateOnClose
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCreateSection (
+ OUT PHANDLE SectionHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+ IN PLARGE_INTEGER MaximumSize OPTIONAL,
+ IN ULONG SectionPageProtection,
+ IN ULONG AllocationAttributes,
+ IN HANDLE FileHandle OPTIONAL
+);
+
NTSYSAPI
NTSTATUS
NTAPI
IN PUNICODE_STRING TargetName
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeleteFile (
+ IN POBJECT_ATTRIBUTES ObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeleteValueKey (
+ IN HANDLE Handle,
+ IN PUNICODE_STRING Name
+);
+
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeviceIoControlFile (
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG IoControlCode,
+ IN PVOID InputBuffer OPTIONAL,
+ IN ULONG InputBufferLength,
+ OUT PVOID OutputBuffer OPTIONAL,
+ IN ULONG OutputBufferLength);
+#endif
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDisplayString (
+ IN PUNICODE_STRING String
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDuplicateObject (
+ IN HANDLE SourceProcessHandle,
+ IN HANDLE SourceHandle,
+ IN HANDLE TargetProcessHandle OPTIONAL,
+ OUT PHANDLE TargetHandle OPTIONAL,
+ IN ACCESS_MASK DesiredAccess,
+ IN ULONG HandleAttributes,
+ IN ULONG Options
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDuplicateToken (
+ IN HANDLE ExistingTokenHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN BOOLEAN EffectiveOnly,
+ IN TOKEN_TYPE TokenType,
+ OUT PHANDLE NewTokenHandle
+);
+
NTSYSAPI
NTSTATUS
NTAPI
#if (VER_PRODUCTBUILD >= 2195)
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwFlushVirtualMemory (
+ IN HANDLE ProcessHandle,
+ IN OUT PVOID *BaseAddress,
+ IN OUT PULONG FlushSize,
+ OUT PIO_STATUS_BLOCK IoStatusBlock
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwFreeVirtualMemory (
+ IN HANDLE ProcessHandle,
+ IN OUT PVOID *BaseAddress,
+ IN OUT PSIZE_T RegionSize,
+ IN ULONG FreeType
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwFsControlFile (
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG FsControlCode,
+ IN PVOID InputBuffer OPTIONAL,
+ IN ULONG InputBufferLength,
+ OUT PVOID OutputBuffer OPTIONAL,
+ IN ULONG OutputBufferLength
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
NTSYSAPI
NTSTATUS
NTAPI
#endif /* (VER_PRODUCTBUILD >= 2195) */
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwLoadDriver (
+ /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
+ IN PUNICODE_STRING RegistryPath
+);
+
NTSYSAPI
NTSTATUS
NTAPI
IN POBJECT_ATTRIBUTES FileObjectAttributes
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwNotifyChangeKey (
+ IN HANDLE KeyHandle,
+ IN HANDLE EventHandle OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG NotifyFilter,
+ IN BOOLEAN WatchSubtree,
+ IN PVOID Buffer,
+ IN ULONG BufferLength,
+ IN BOOLEAN Asynchronous
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenDirectoryObject (
+ OUT PHANDLE DirectoryHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenProcess (
+ OUT PHANDLE ProcessHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN PCLIENT_ID ClientId OPTIONAL
+);
+
NTSYSAPI
NTSTATUS
NTAPI
OUT PHANDLE TokenHandle
);
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwPowerInformation (
+ IN POWER_INFORMATION_LEVEL PowerInformationLevel,
+ IN PVOID InputBuffer OPTIONAL,
+ IN ULONG InputBufferLength,
+ OUT PVOID OutputBuffer OPTIONAL,
+ IN ULONG OutputBufferLength
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
NTSYSAPI
NTSTATUS
NTAPI
OUT PLCID Locale
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryDirectoryFile (
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID FileInformation,
+ IN ULONG Length,
+ IN FILE_INFORMATION_CLASS FileInformationClass,
+ IN BOOLEAN ReturnSingleEntry,
+ IN PUNICODE_STRING FileName OPTIONAL,
+ IN BOOLEAN RestartScan
+);
+
#if (VER_PRODUCTBUILD >= 2195)
NTSYSAPI
OUT PULONG ReturnLength OPTIONAL
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryEaFile (
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID Buffer,
+ IN ULONG Length,
+ IN BOOLEAN ReturnSingleEntry,
+ IN PVOID EaList OPTIONAL,
+ IN ULONG EaListLength,
+ IN PULONG EaIndex OPTIONAL,
+ IN BOOLEAN RestartScan
+);
+
#endif /* (VER_PRODUCTBUILD >= 2195) */
NTSYSAPI
OUT PULONG ReturnLength OPTIONAL
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationToken (
+ IN HANDLE TokenHandle,
+ IN TOKEN_INFORMATION_CLASS TokenInformationClass,
+ OUT PVOID TokenInformation,
+ IN ULONG Length,
+ OUT PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQuerySecurityObject (
+ IN HANDLE FileHandle,
+ IN SECURITY_INFORMATION SecurityInformation,
+ OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN ULONG Length,
+ OUT PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryVolumeInformationFile (
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID FsInformation,
+ IN ULONG Length,
+ IN FS_INFORMATION_CLASS FsInformationClass
+);
+
NTSYSAPI
NTSTATUS
NTAPI
IN LANGID LanguageId
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetEaFile (
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID Buffer,
+ IN ULONG Length
+);
+
#endif /* (VER_PRODUCTBUILD >= 2195) */
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetEvent (
+ IN HANDLE EventHandle,
+ OUT PLONG PreviousState OPTIONAL
+);
+
NTSYSAPI
NTSTATUS
NTAPI
IN ULONG ProcessInformationLength
);
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetSecurityObject (
+ IN HANDLE Handle,
+ IN SECURITY_INFORMATION SecurityInformation,
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
NTSYSAPI
NTSTATUS
NTAPI
OUT PLARGE_INTEGER OldTime OPTIONAL
);
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetVolumeInformationFile (
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PVOID FsInformation,
+ IN ULONG Length,
+ IN FS_INFORMATION_CLASS FsInformationClass
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwTerminateProcess (
+ IN HANDLE ProcessHandle OPTIONAL,
+ IN NTSTATUS ExitStatus
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwUnloadDriver (
+ /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
+ IN PUNICODE_STRING RegistryPath
+);
+
NTSYSAPI
NTSTATUS
NTAPI
IN POBJECT_ATTRIBUTES KeyObjectAttributes
);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwWaitForSingleObject (
+ IN HANDLE Handle,
+ IN BOOLEAN Alertable,
+ IN PLARGE_INTEGER Timeout OPTIONAL);
+#endif
+
NTSYSAPI
NTSTATUS
NTAPI
#include <excpt.h>
#include <ntdef.h>
#include <ntstatus.h>
-#include <ntiologc.h>
#ifndef GUID_DEFINED
#include <guiddef.h>
#endif
-#ifdef _MAC
-#ifndef _INC_STRING
-#include <string.h>
-#endif /* _INC_STRING */
-#else
-#include <string.h>
-#endif /* _MAC */
-
#ifndef _KTMTYPES_
typedef GUID UOW, *PUOW;
#endif
-typedef GUID *PGUID;
-
#if (NTDDI_VERSION >= NTDDI_WINXP)
#include <dpfilter.h>
#endif
typedef struct _OBJECT_TYPE *POBJECT_TYPE;
typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE;
typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE;
+typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
+typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
typedef struct _EPROCESS *PEPROCESS;
typedef struct _ETHREAD *PETHREAD;
typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
typedef struct _CONTEXT *PCONTEXT;
-#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && ( defined(_NTDDK_) || defined(_NTDRIVER_) || defined(_NTOSP_))
-typedef struct _DMA_ADAPTER *PADAPTER_OBJECT;
-#elif defined(_WDM_INCLUDED_)
-typedef struct _DMA_ADAPTER *PADAPTER_OBJECT;
-#else
-typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
-#endif
-
-#ifndef DEFINE_GUIDEX
-#ifdef _MSC_VER
-#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
-#else
-#define DEFINE_GUIDEX(name) EXTERN_C const GUID name
-#endif
-#endif /* DEFINE_GUIDEX */
-
-#ifndef STATICGUIDOF
-#define STATICGUIDOF(guid) STATIC_##guid
-#endif
-
-/* GUID Comparison */
-#ifndef __IID_ALIGNED__
-#define __IID_ALIGNED__
-#ifdef __cplusplus
-inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
-{
- return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) &&
- (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)) );
-}
-#else
-#define IsEqualGUIDAligned(guid1, guid2) \
- ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
- (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
-#endif /* __cplusplus */
-#endif /* !__IID_ALIGNED__ */
-
/******************************************************************************
* INTERLOCKED Functions *
#endif /* _SLIST_HEADER_ */
-/* MS definition is broken! */
-extern BOOLEAN NTSYSAPI NlsMbCodePageTag;
-extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag;
+
+/* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
+#if defined(_NTSYSTEM_) || defined(__GNUC__)
#define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
#define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
-
-#define SHORT_LEAST_SIGNIFICANT_BIT 0
-#define SHORT_MOST_SIGNIFICANT_BIT 1
-
-#define LONG_LEAST_SIGNIFICANT_BIT 0
-#define LONG_3RD_MOST_SIGNIFICANT_BIT 1
-#define LONG_2ND_MOST_SIGNIFICANT_BIT 2
-#define LONG_MOST_SIGNIFICANT_BIT 3
-
-#define RTLVERLIB_DDI(x) Wdmlib##x
-
-typedef BOOLEAN
-(*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE)(
- IN ULONG Version);
-
-typedef BOOLEAN
-(*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED)(
- IN ULONG Version);
+#else
+#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
+#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
+#endif /* _NT_SYSTEM */
+extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
+extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
/******************************************************************************
typedef CCHAR KPROCESSOR_MODE;
typedef LONG KPRIORITY;
+typedef ULONG EXECUTION_STATE;
+
typedef enum _MODE {
KernelMode,
UserMode,
MaximumMode
} MODE;
-#define CACHE_FULLY_ASSOCIATIVE 0xFF
-#define MAXIMUM_SUSPEND_COUNT MAXCHAR
-
-#define EVENT_QUERY_STATE (0x0001)
-#define EVENT_MODIFY_STATE (0x0002)
-#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
-
-#define LTP_PC_SMT 0x1
-
#if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
#define SINGLE_GROUP_LEGACY_API 1
#endif
-#define SEMAPHORE_QUERY_STATE (0x0001)
-#define SEMAPHORE_MODIFY_STATE (0x0002)
-#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
-
-typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
- RelationProcessorCore,
- RelationNumaNode,
- RelationCache,
- RelationProcessorPackage,
- RelationGroup,
- RelationAll = 0xffff
-} LOGICAL_PROCESSOR_RELATIONSHIP;
-
-typedef enum _PROCESSOR_CACHE_TYPE {
- CacheUnified,
- CacheInstruction,
- CacheData,
- CacheTrace
-} PROCESSOR_CACHE_TYPE;
-
-typedef struct _CACHE_DESCRIPTOR {
- UCHAR Level;
- UCHAR Associativity;
- USHORT LineSize;
- ULONG Size;
- PROCESSOR_CACHE_TYPE Type;
-} CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;
-
-typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
- ULONG_PTR ProcessorMask;
- LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
- union {
- struct {
- UCHAR Flags;
- } ProcessorCore;
- struct {
- ULONG NodeNumber;
- } NumaNode;
- CACHE_DESCRIPTOR Cache;
- ULONGLONG Reserved[2];
- } DUMMYUNIONNAME;
-} SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
-
-typedef struct _PROCESSOR_RELATIONSHIP {
- UCHAR Flags;
- UCHAR Reserved[21];
- USHORT GroupCount;
- GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
-} PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP;
-
-typedef struct _NUMA_NODE_RELATIONSHIP {
- ULONG NodeNumber;
- UCHAR Reserved[20];
- GROUP_AFFINITY GroupMask;
-} NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP;
-
-typedef struct _CACHE_RELATIONSHIP {
- UCHAR Level;
- UCHAR Associativity;
- USHORT LineSize;
- ULONG CacheSize;
- PROCESSOR_CACHE_TYPE Type;
- UCHAR Reserved[20];
- GROUP_AFFINITY GroupMask;
-} CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP;
-
-typedef struct _PROCESSOR_GROUP_INFO {
- UCHAR MaximumProcessorCount;
- UCHAR ActiveProcessorCount;
- UCHAR Reserved[38];
- KAFFINITY ActiveProcessorMask;
-} PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO;
-
-typedef struct _GROUP_RELATIONSHIP {
- USHORT MaximumGroupCount;
- USHORT ActiveGroupCount;
- UCHAR Reserved[20];
- PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];
-} GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP;
-
-typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
- LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
- ULONG Size;
- union {
- PROCESSOR_RELATIONSHIP Processor;
- NUMA_NODE_RELATIONSHIP NumaNode;
- CACHE_RELATIONSHIP Cache;
- GROUP_RELATIONSHIP Group;
- } DUMMYUNIONNAME;
-} SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;;
-
/* Processor features */
#define PF_FLOATING_POINT_PRECISION_ERRATA 0
#define PF_FLOATING_POINT_EMULATED 1
#define PF_CHANNELS_ENABLED 16
#define PF_XSAVE_ENABLED 17
+#define MAXIMUM_SUPPORTED_EXTENSION 512
#define MAXIMUM_WAIT_OBJECTS 64
#define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
#define EXCEPTION_NONCONTINUABLE 1
#define EXCEPTION_MAXIMUM_PARAMETERS 15
-#define EXCEPTION_DIVIDED_BY_ZERO 0
-#define EXCEPTION_DEBUG 1
-#define EXCEPTION_NMI 2
-#define EXCEPTION_INT3 3
-#define EXCEPTION_BOUND_CHECK 5
-#define EXCEPTION_INVALID_OPCODE 6
-#define EXCEPTION_NPX_NOT_AVAILABLE 7
-#define EXCEPTION_DOUBLE_FAULT 8
-#define EXCEPTION_NPX_OVERRUN 9
-#define EXCEPTION_INVALID_TSS 0x0A
-#define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B
-#define EXCEPTION_STACK_FAULT 0x0C
-#define EXCEPTION_GP_FAULT 0x0D
-#define EXCEPTION_RESERVED_TRAP 0x0F
-#define EXCEPTION_NPX_ERROR 0x010
-#define EXCEPTION_ALIGNMENT_CHECK 0x011
-
typedef struct _EXCEPTION_RECORD {
NTSTATUS ExceptionCode;
ULONG ExceptionFlags;
IN ULONG ReasonSpecificDataLength);
typedef KBUGCHECK_REASON_CALLBACK_ROUTINE *PKBUGCHECK_REASON_CALLBACK_ROUTINE;
-typedef struct _KBUGCHECK_ADD_PAGES {
- IN OUT PVOID Context;
- IN OUT ULONG Flags;
- IN ULONG BugCheckCode;
- OUT ULONG_PTR Address;
- OUT ULONG_PTR Count;
-} KBUGCHECK_ADD_PAGES, *PKBUGCHECK_ADD_PAGES;
-
-typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA {
- IN PVOID InBuffer;
- IN ULONG InBufferLength;
- IN ULONG MaximumAllowed;
- OUT GUID Guid;
- OUT PVOID OutBuffer;
- OUT ULONG OutBufferLength;
-} KBUGCHECK_SECONDARY_DUMP_DATA, *PKBUGCHECK_SECONDARY_DUMP_DATA;
-
-typedef enum _KBUGCHECK_DUMP_IO_TYPE {
- KbDumpIoInvalid,
- KbDumpIoHeader,
- KbDumpIoBody,
- KbDumpIoSecondaryData,
- KbDumpIoComplete
-} KBUGCHECK_DUMP_IO_TYPE;
-
-typedef struct _KBUGCHECK_DUMP_IO {
- IN ULONG64 Offset;
- IN PVOID Buffer;
- IN ULONG BufferLength;
- IN KBUGCHECK_DUMP_IO_TYPE Type;
-} KBUGCHECK_DUMP_IO, *PKBUGCHECK_DUMP_IO;
-
-#define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL
-#define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL
-#define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL
-
typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD {
LIST_ENTRY Entry;
PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine;
IN BOOLEAN Handled);
typedef NMI_CALLBACK *PNMI_CALLBACK;
-typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE {
- KeProcessorAddStartNotify = 0,
- KeProcessorAddCompleteNotify,
- KeProcessorAddFailureNotify
-} KE_PROCESSOR_CHANGE_NOTIFY_STATE;
-
-typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT {
- KE_PROCESSOR_CHANGE_NOTIFY_STATE State;
- ULONG NtNumber;
- NTSTATUS Status;
-#if (NTDDI_VERSION >= NTDDI_WIN7)
- PROCESSOR_NUMBER ProcNumber;
-#endif
-} KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT;
-
-typedef VOID
-(NTAPI PROCESSOR_CALLBACK_FUNCTION)(
- IN PVOID CallbackContext,
- IN PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext,
- IN OUT PNTSTATUS OperationStatus);
-typedef PROCESSOR_CALLBACK_FUNCTION *PPROCESSOR_CALLBACK_FUNCTION;
-
-#define KE_PROCESSOR_CHANGE_ADD_EXISTING 1
-
-#define INVALID_PROCESSOR_INDEX 0xffffffff
+typedef enum _TRACE_INFORMATION_CLASS {
+ TraceIdClass,
+ TraceHandleClass,
+ TraceEnableFlagsClass,
+ TraceEnableLevelClass,
+ GlobalLoggerHandleClass,
+ EventLoggerHandleClass,
+ AllLoggerHandlesClass,
+ TraceHandleByNameClass,
+ LoggerEventsLostClass,
+ TraceSessionSettingsClass,
+ LoggerEventsLoggedClass,
+ MaxTraceInformationClass
+} TRACE_INFORMATION_CLASS;
typedef enum _KINTERRUPT_POLARITY {
InterruptPolarityUnknown,
#define THREAD_WAIT_OBJECTS 3
-typedef VOID
-(NTAPI KSTART_ROUTINE)(
- IN PVOID StartContext);
-typedef KSTART_ROUTINE *PKSTART_ROUTINE;
-
typedef VOID
(NTAPI *PKINTERRUPT_ROUTINE)(
VOID);
-typedef BOOLEAN
-(NTAPI KSERVICE_ROUTINE)(
- IN struct _KINTERRUPT *Interrupt,
- IN PVOID ServiceContext);
-typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE;
-
-typedef BOOLEAN
-(NTAPI KMESSAGE_SERVICE_ROUTINE)(
- IN struct _KINTERRUPT *Interrupt,
- IN PVOID ServiceContext,
- IN ULONG MessageID);
-typedef KMESSAGE_SERVICE_ROUTINE *PKMESSAGE_SERVICE_ROUTINE;
-
typedef enum _KD_OPTION {
KD_OPTION_SET_BLOCK_ENABLE,
} KD_OPTION;
+typedef enum _INTERFACE_TYPE {
+ InterfaceTypeUndefined = -1,
+ Internal,
+ Isa,
+ Eisa,
+ MicroChannel,
+ TurboChannel,
+ PCIBus,
+ VMEBus,
+ NuBus,
+ PCMCIABus,
+ CBus,
+ MPIBus,
+ MPSABus,
+ ProcessorInternal,
+ InternalPowerBus,
+ PNPISABus,
+ PNPBus,
+ Vmcs,
+ MaximumInterfaceType
+} INTERFACE_TYPE, *PINTERFACE_TYPE;
+
typedef VOID
(NTAPI *PKNORMAL_ROUTINE)(
IN PVOID NormalContext OPTIONAL,
BOOLEAN Inserted;
} KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
-#define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0)
-#define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1)
-#define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0)
-#define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1)
-#define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2)
-#define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex)
-#define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN))
-
typedef struct _KDEVICE_QUEUE_ENTRY {
LIST_ENTRY DeviceListEntry;
ULONG SortKey;
IN PVOID Parameter2 OPTIONAL,
IN PVOID Parameter3 OPTIONAL);
-typedef struct _KIPI_COUNTS {
- ULONG Freeze;
- ULONG Packet;
- ULONG DPC;
- ULONG APC;
- ULONG FlushSingleTb;
- ULONG FlushMultipleTb;
- ULONG FlushEntireTb;
- ULONG GenericCall;
- ULONG ChangeColor;
- ULONG SweepDcache;
- ULONG SweepIcache;
- ULONG SweepIcacheRange;
- ULONG FlushIoBuffers;
- ULONG GratuitousDPC;
-} KIPI_COUNTS, *PKIPI_COUNTS;
-
-typedef ULONG_PTR
-(NTAPI KIPI_BROADCAST_WORKER)(
+typedef
+ULONG_PTR
+(NTAPI *PKIPI_BROADCAST_WORKER)(
IN ULONG_PTR Argument);
-typedef KIPI_BROADCAST_WORKER *PKIPI_BROADCAST_WORKER;
typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
LONG Limit;
} KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
-#define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG))
-
typedef struct _KGATE {
DISPATCHER_HEADER Header;
} KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE;
ULONG Period;
} KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
-typedef enum _LOCK_OPERATION {
- IoReadAccess,
- IoWriteAccess,
- IoModifyAccess
-} LOCK_OPERATION;
-
-#define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
-
typedef BOOLEAN
(NTAPI *PKSYNCHRONIZE_ROUTINE)(
IN PVOID SynchronizeContext);
EndAlternatives
} ALTERNATIVE_ARCHITECTURE_TYPE;
-#ifndef _X86_
-
-#ifndef IsNEC_98
-#define IsNEC_98 (FALSE)
-#endif
-
-#ifndef IsNotNEC_98
-#define IsNotNEC_98 (TRUE)
-#endif
-
-#ifndef SetNEC_98
-#define SetNEC_98
-#endif
-
-#ifndef SetNotNEC_98
-#define SetNotNEC_98
-#endif
-
-#endif
-
-typedef struct _KSYSTEM_TIME {
+typedef struct _KSYSTEM_TIME
+{
ULONG LowPart;
LONG High1Time;
LONG High2Time;
} KSYSTEM_TIME, *PKSYSTEM_TIME;
+typedef struct _PNP_BUS_INFORMATION {
+ GUID BusTypeGuid;
+ INTERFACE_TYPE LegacyBusType;
+ ULONG BusNumber;
+} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
+
typedef struct DECLSPEC_ALIGN(16) _M128A {
ULONGLONG Low;
LONGLONG High;
#endif
} XSAVE_FORMAT, *PXSAVE_FORMAT;
-typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER {
- ULONG64 Mask;
- ULONG64 Reserved[7];
-} XSAVE_AREA_HEADER, *PXSAVE_AREA_HEADER;
-
-typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA {
- XSAVE_FORMAT LegacyState;
- XSAVE_AREA_HEADER Header;
-} XSAVE_AREA, *PXSAVE_AREA;
-
-typedef struct _XSTATE_CONTEXT {
- ULONG64 Mask;
- ULONG Length;
- ULONG Reserved1;
- PXSAVE_AREA Area;
-#if defined(_X86_)
- ULONG Reserved2;
-#endif
- PVOID Buffer;
-#if defined(_X86_)
- ULONG Reserved3;
-#endif
-} XSTATE_CONTEXT, *PXSTATE_CONTEXT;
-
-typedef struct _XSTATE_SAVE {
-#if defined(_AMD64_)
- struct _XSTATE_SAVE* Prev;
- struct _KTHREAD* Thread;
- UCHAR Level;
- XSTATE_CONTEXT XStateContext;
-#elif defined(_IA64_)
- ULONG Dummy;
-#elif defined(_X86_)
- union {
- struct {
- LONG64 Reserved1;
- ULONG Reserved2;
- struct _XSTATE_SAVE* Prev;
- PXSAVE_AREA Reserved3;
- struct _KTHREAD* Thread;
- PVOID Reserved4;
- UCHAR Level;
- };
- XSTATE_CONTEXT XStateContext;
- };
-#endif
-} XSTATE_SAVE, *PXSTATE_SAVE;
-
-#ifdef _X86_
-
-#define MAXIMUM_SUPPORTED_EXTENSION 512
-
-#if !defined(__midl) && !defined(MIDL_PASS)
-C_ASSERT(sizeof(XSAVE_FORMAT) == MAXIMUM_SUPPORTED_EXTENSION);
-#endif
-
-#endif /* _X86_ */
-
-#define XSAVE_ALIGN 64
-#define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA)
-
-#if !defined(__midl) && !defined(MIDL_PASS)
-C_ASSERT((sizeof(XSAVE_FORMAT) & (XSAVE_ALIGN - 1)) == 0);
-C_ASSERT((FIELD_OFFSET(XSAVE_AREA, Header) & (XSAVE_ALIGN - 1)) == 0);
-C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH == 512 + 64);
-#endif
-
-typedef struct _CONTEXT_CHUNK {
- LONG Offset;
- ULONG Length;
-} CONTEXT_CHUNK, *PCONTEXT_CHUNK;
-
-typedef struct _CONTEXT_EX {
- CONTEXT_CHUNK All;
- CONTEXT_CHUNK Legacy;
- CONTEXT_CHUNK XState;
-} CONTEXT_EX, *PCONTEXT_EX;
-
-#define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN)
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-extern NTSYSAPI volatile CCHAR KeNumberProcessors;
-#elif (NTDDI_VERSION >= NTDDI_WINXP)
-extern NTSYSAPI CCHAR KeNumberProcessors;
-#else
-extern PCCHAR KeNumberProcessors;
-#endif
/******************************************************************************
* Memory manager Types *
******************************************************************************/
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-typedef ULONG NODE_REQUIREMENT;
-#define MM_ANY_NODE_OK 0x80000000
-#endif
-
#define MM_DONT_ZERO_ALLOCATION 0x00000001
#define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
#define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
HighPagePriority = 32
} MM_PAGE_PRIORITY;
+typedef enum _LOCK_OPERATION {
+ IoReadAccess,
+ IoWriteAccess,
+ IoModifyAccess
+} LOCK_OPERATION;
+
typedef enum _MM_SYSTEM_SIZE {
MmSmallSystem,
MmMediumSystem,
#define EX_RUNDOWN_COUNT_SHIFT 0x1
#define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
+#ifdef _WIN64
+#define PORT_MAXIMUM_MESSAGE_LENGTH 512
+#else
+#define PORT_MAXIMUM_MESSAGE_LENGTH 256
+#endif
+
typedef struct _FAST_MUTEX {
volatile LONG Count;
PKTHREAD Owner;
typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
-typedef enum _WORK_QUEUE_TYPE {
- CriticalWorkQueue,
- DelayedWorkQueue,
- HyperCriticalWorkQueue,
- MaximumWorkQueue
-} WORK_QUEUE_TYPE;
-
typedef VOID
(NTAPI WORKER_THREAD_ROUTINE)(
IN PVOID Parameter);
volatile PVOID Parameter;
} WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
-typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
-
-typedef struct _OWNER_ENTRY {
- ERESOURCE_THREAD OwnerThread;
- union {
- struct {
- ULONG IoPriorityBoosted:1;
- ULONG OwnerReferenced:1;
- ULONG OwnerCount:30;
- };
- ULONG TableSize;
- };
-} OWNER_ENTRY, *POWNER_ENTRY;
-
-typedef struct _ERESOURCE {
- LIST_ENTRY SystemResourcesList;
- POWNER_ENTRY OwnerTable;
- SHORT ActiveCount;
- USHORT Flag;
- volatile PKSEMAPHORE SharedWaiters;
- volatile PKEVENT ExclusiveWaiters;
- OWNER_ENTRY OwnerEntry;
- ULONG ActiveEntries;
- ULONG ContentionCount;
- ULONG NumberOfSharedWaiters;
- ULONG NumberOfExclusiveWaiters;
-#if defined(_WIN64)
- PVOID Reserved2;
-#endif
- __GNU_EXTENSION union {
- PVOID Address;
- ULONG_PTR CreatorBackTraceIndex;
- };
- KSPIN_LOCK SpinLock;
-} ERESOURCE, *PERESOURCE;
-
-/* ERESOURCE.Flag */
-#define ResourceNeverExclusive 0x0010
-#define ResourceReleaseByOtherThread 0x0020
-#define ResourceOwnedExclusive 0x0080
-
-#define RESOURCE_HASH_TABLE_SIZE 64
-
-typedef struct _RESOURCE_HASH_ENTRY {
- LIST_ENTRY ListEntry;
- PVOID Address;
- ULONG ContentionCount;
- ULONG Number;
-} RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY;
-
-typedef struct _RESOURCE_PERFORMANCE_DATA {
- ULONG ActiveResourceCount;
- ULONG TotalResourceCount;
- ULONG ExclusiveAcquire;
- ULONG SharedFirstLevel;
- ULONG SharedSecondLevel;
- ULONG StarveFirstLevel;
- ULONG StarveSecondLevel;
- ULONG WaitForExclusive;
- ULONG OwnerTableExpands;
- ULONG MaximumTableExpand;
- LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE];
-} RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA;
-
-/* Global debug flag */
-#if DEVL
-extern ULONG NtGlobalFlag;
-#define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
-#else
-#define IF_NTOS_DEBUG(FlagName) if(FALSE)
-#endif
-
/******************************************************************************
* Security Manager Types *
DevicePowerState
} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-typedef struct _SYSTEM_POWER_STATE_CONTEXT {
- union {
- struct {
- ULONG Reserved1:8;
- ULONG TargetSystemState:4;
- ULONG EffectiveSystemState:4;
- ULONG CurrentSystemState:4;
- ULONG IgnoreHibernationPath:1;
- ULONG PseudoTransition:1;
- ULONG Reserved2:10;
- } DUMMYSTRUCTNAME;
- ULONG ContextAsUlong;
- } DUMMYUNIONNAME;
-} SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT;
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-typedef struct _COUNTED_REASON_CONTEXT {
- ULONG Version;
- ULONG Flags;
- union {
- struct {
- UNICODE_STRING ResourceFileName;
- USHORT ResourceReasonId;
- ULONG StringCount;
- PUNICODE_STRING ReasonStrings;
- } DUMMYSTRUCTNAME;
- UNICODE_STRING SimpleString;
- } DUMMYUNIONNAME;
-} COUNTED_REASON_CONTEXT, *PCOUNTED_REASON_CONTEXT;
-#endif
-
-#define IOCTL_QUERY_DEVICE_POWER_STATE \
- CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_SET_DEVICE_WAKE \
- CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_CANCEL_DEVICE_WAKE \
- CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define ES_SYSTEM_REQUIRED 0x00000001
-#define ES_DISPLAY_REQUIRED 0x00000002
-#define ES_USER_PRESENT 0x00000004
-#define ES_CONTINUOUS 0x80000000
-
-typedef ULONG EXECUTION_STATE, *PEXECUTION_STATE;
-
-typedef enum {
- LT_DONT_CARE,
- LT_LOWEST_LATENCY
-} LATENCY_TIME;
+#if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
+typedef struct {
+ ULONG Granularity;
+ ULONG Capacity;
+} BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
-#if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
-#define DIAGNOSTIC_REASON_VERSION 0
-#define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
-#define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
-#define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
-#define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
-#endif
+#endif /* !_PO_DDK_ */
-#define POWER_REQUEST_CONTEXT_VERSION 0
-#define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
-#define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
-
-#define PowerRequestMaximum 3
-
-typedef enum _POWER_REQUEST_TYPE {
- PowerRequestDisplayRequired,
- PowerRequestSystemRequired,
- PowerRequestAwayModeRequired
-} POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE;
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-
-#define PDCAP_D0_SUPPORTED 0x00000001
-#define PDCAP_D1_SUPPORTED 0x00000002
-#define PDCAP_D2_SUPPORTED 0x00000004
-#define PDCAP_D3_SUPPORTED 0x00000008
-#define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
-#define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
-#define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
-#define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
-#define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
-
-typedef struct CM_Power_Data_s {
- ULONG PD_Size;
- DEVICE_POWER_STATE PD_MostRecentPowerState;
- ULONG PD_Capabilities;
- ULONG PD_D1Latency;
- ULONG PD_D2Latency;
- ULONG PD_D3Latency;
- DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum];
- SYSTEM_POWER_STATE PD_DeepestSystemWake;
-} CM_POWER_DATA, *PCM_POWER_DATA;
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-typedef enum _SYSTEM_POWER_CONDITION {
- PoAc,
- PoDc,
- PoHot,
- PoConditionMaximum
-} SYSTEM_POWER_CONDITION;
-
-typedef struct _SET_POWER_SETTING_VALUE {
- ULONG Version;
- GUID Guid;
- SYSTEM_POWER_CONDITION PowerCondition;
- ULONG DataLength;
- UCHAR Data[ANYSIZE_ARRAY];
-} SET_POWER_SETTING_VALUE, *PSET_POWER_SETTING_VALUE;
-
-#define POWER_SETTING_VALUE_VERSION (0x1)
-
-typedef struct _NOTIFY_USER_POWER_SETTING {
- GUID Guid;
-} NOTIFY_USER_POWER_SETTING, *PNOTIFY_USER_POWER_SETTING;
-
-typedef struct _APPLICATIONLAUNCH_SETTING_VALUE {
- LARGE_INTEGER ActivationTime;
- ULONG Flags;
- ULONG ButtonInstanceID;
-} APPLICATIONLAUNCH_SETTING_VALUE, *PAPPLICATIONLAUNCH_SETTING_VALUE;
-
-typedef enum _POWER_PLATFORM_ROLE {
- PlatformRoleUnspecified = 0,
- PlatformRoleDesktop,
- PlatformRoleMobile,
- PlatformRoleWorkstation,
- PlatformRoleEnterpriseServer,
- PlatformRoleSOHOServer,
- PlatformRoleAppliancePC,
- PlatformRolePerformanceServer,
- PlatformRoleMaximum
-} POWER_PLATFORM_ROLE;
-
-#if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
-typedef struct {
- ULONG Granularity;
- ULONG Capacity;
-} BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
-
-#endif /* !_PO_DDK_ */
-
-#define CORE_PARKING_POLICY_CHANGE_IDEAL 0
-#define CORE_PARKING_POLICY_CHANGE_SINGLE 1
-#define CORE_PARKING_POLICY_CHANGE_ROCKET 2
-#define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
+#define CORE_PARKING_POLICY_CHANGE_IDEAL 0
+#define CORE_PARKING_POLICY_CHANGE_SINGLE 1
+#define CORE_PARKING_POLICY_CHANGE_ROCKET 2
+#define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A );
DEFINE_GUID(GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C );
IN OUT PVOID Context OPTIONAL);
typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK;
+#define PO_CB_SYSTEM_POWER_POLICY 0
+#define PO_CB_AC_STATUS 1
+#define PO_CB_BUTTON_COLLISION 2
+#define PO_CB_SYSTEM_STATE_LOCK 3
+#define PO_CB_LID_SWITCH_STATE 4
+#define PO_CB_PROCESSOR_POWER_POLICY 5
/******************************************************************************
* Configuration Manager Types *
REG_OPTION_BACKUP_RESTORE |\
REG_OPTION_OPEN_LINK)
-#define REG_OPEN_LEGAL_OPTION \
- (REG_OPTION_RESERVED |\
- REG_OPTION_BACKUP_RESTORE |\
- REG_OPTION_OPEN_LINK)
-
-#define REG_STANDARD_FORMAT 1
-#define REG_LATEST_FORMAT 2
-#define REG_NO_COMPRESSION 4
-
/* Key creation/open disposition */
#define REG_CREATED_NEW_KEY (0x00000001L)
#define REG_OPENED_EXISTING_KEY (0x00000002L)
REG_NOTIFY_CHANGE_LAST_SET |\
REG_NOTIFY_CHANGE_SECURITY)
+typedef struct _CM_FLOPPY_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ CHAR Size[8];
+ ULONG MaxDensity;
+ ULONG MountDensity;
+ UCHAR StepRateHeadUnloadTime;
+ UCHAR HeadLoadTime;
+ UCHAR MotorOffTime;
+ UCHAR SectorLengthCode;
+ UCHAR SectorPerTrack;
+ UCHAR ReadWriteGapLength;
+ UCHAR DataTransferLength;
+ UCHAR FormatGapLength;
+ UCHAR FormatFillCharacter;
+ UCHAR HeadSettleTime;
+ UCHAR MotorSettleTime;
+ UCHAR MaximumTrackValue;
+ UCHAR DataTransferRate;
+} CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
+
#include <pshpack4.h>
typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
UCHAR Type;
#define CM_RESOURCE_DMA_TYPE_B 0x0020
#define CM_RESOURCE_DMA_TYPE_F 0x0040
-typedef struct _DEVICE_FLAGS {
- ULONG Failed:1;
- ULONG ReadOnly:1;
- ULONG Removable:1;
- ULONG ConsoleIn:1;
- ULONG ConsoleOut:1;
- ULONG Input:1;
- ULONG Output:1;
-} DEVICE_FLAGS, *PDEVICE_FLAGS;
-
-typedef enum _INTERFACE_TYPE {
- InterfaceTypeUndefined = -1,
- Internal,
- Isa,
- Eisa,
- MicroChannel,
- TurboChannel,
- PCIBus,
- VMEBus,
- NuBus,
- PCMCIABus,
- CBus,
- MPIBus,
- MPSABus,
- ProcessorInternal,
- InternalPowerBus,
- PNPISABus,
- PNPBus,
- Vmcs,
- MaximumInterfaceType
-} INTERFACE_TYPE, *PINTERFACE_TYPE;
-
-typedef struct _CM_COMPONENT_INFORMATION {
- DEVICE_FLAGS Flags;
- ULONG Version;
- ULONG Key;
- KAFFINITY AffinityMask;
-} CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION;
-
-typedef struct _CM_ROM_BLOCK {
- ULONG Address;
- ULONG Size;
-} CM_ROM_BLOCK, *PCM_ROM_BLOCK;
-
typedef struct _CM_PARTIAL_RESOURCE_LIST {
USHORT Version;
USHORT Revision;
CM_FULL_RESOURCE_DESCRIPTOR List[1];
} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
-typedef struct _PNP_BUS_INFORMATION {
- GUID BusTypeGuid;
- INTERFACE_TYPE LegacyBusType;
- ULONG BusNumber;
-} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
-
#include <pshpack1.h>
typedef struct _CM_INT13_DRIVE_PARAMETER {
USHORT NumberDrives;
} CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
-typedef struct _CM_MCA_POS_DATA {
- USHORT AdapterId;
- UCHAR PosData1;
- UCHAR PosData2;
- UCHAR PosData3;
- UCHAR PosData4;
-} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
-
typedef struct _CM_PNP_BIOS_DEVICE_NODE {
USHORT Size;
UCHAR Node;
USHORT KeyboardFlags;
} CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA;
+typedef struct _CM_MCA_POS_DATA {
+ USHORT AdapterId;
+ UCHAR PosData1;
+ UCHAR PosData2;
+ UCHAR PosData3;
+ UCHAR PosData4;
+} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+typedef struct CM_Power_Data_s {
+ ULONG PD_Size;
+ DEVICE_POWER_STATE PD_MostRecentPowerState;
+ ULONG PD_Capabilities;
+ ULONG PD_D1Latency;
+ ULONG PD_D2Latency;
+ ULONG PD_D3Latency;
+ DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum];
+ SYSTEM_POWER_STATE PD_DeepestSystemWake;
+} CM_POWER_DATA, *PCM_POWER_DATA;
+
+#define PDCAP_D0_SUPPORTED 0x00000001
+#define PDCAP_D1_SUPPORTED 0x00000002
+#define PDCAP_D2_SUPPORTED 0x00000004
+#define PDCAP_D3_SUPPORTED 0x00000008
+#define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
+#define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
+#define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
+#define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
+#define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
+
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
typedef struct _CM_SCSI_DEVICE_DATA {
USHORT Version;
USHORT Revision;
UCHAR HostIdentifier;
} CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA;
-typedef struct _CM_VIDEO_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- ULONG VideoClock;
-} CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA;
-
-typedef struct _CM_SONIC_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- USHORT DataConfigurationRegister;
- UCHAR EthernetAddress[8];
-} CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA;
-
typedef struct _CM_SERIAL_DEVICE_DATA {
USHORT Version;
USHORT Revision;
ULONG BaudClock;
} CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
-typedef struct _CM_MONITOR_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- USHORT HorizontalScreenSize;
- USHORT VerticalScreenSize;
- USHORT HorizontalResolution;
- USHORT VerticalResolution;
- USHORT HorizontalDisplayTimeLow;
- USHORT HorizontalDisplayTime;
- USHORT HorizontalDisplayTimeHigh;
- USHORT HorizontalBackPorchLow;
- USHORT HorizontalBackPorch;
- USHORT HorizontalBackPorchHigh;
- USHORT HorizontalFrontPorchLow;
- USHORT HorizontalFrontPorch;
- USHORT HorizontalFrontPorchHigh;
- USHORT HorizontalSyncLow;
- USHORT HorizontalSync;
- USHORT HorizontalSyncHigh;
- USHORT VerticalBackPorchLow;
- USHORT VerticalBackPorch;
- USHORT VerticalBackPorchHigh;
- USHORT VerticalFrontPorchLow;
- USHORT VerticalFrontPorch;
- USHORT VerticalFrontPorchHigh;
- USHORT VerticalSyncLow;
- USHORT VerticalSync;
- USHORT VerticalSyncHigh;
-} CM_MONITOR_DEVICE_DATA, *PCM_MONITOR_DEVICE_DATA;
-
-typedef struct _CM_FLOPPY_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- CHAR Size[8];
- ULONG MaxDensity;
- ULONG MountDensity;
- UCHAR StepRateHeadUnloadTime;
- UCHAR HeadLoadTime;
- UCHAR MotorOffTime;
- UCHAR SectorLengthCode;
- UCHAR SectorPerTrack;
- UCHAR ReadWriteGapLength;
- UCHAR DataTransferLength;
- UCHAR FormatGapLength;
- UCHAR FormatFillCharacter;
- UCHAR HeadSettleTime;
- UCHAR MotorSettleTime;
- UCHAR MaximumTrackValue;
- UCHAR DataTransferRate;
-} CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
-
typedef enum _KEY_INFORMATION_CLASS {
KeyBasicInformation,
KeyNodeInformation,
WCHAR Name[1];
} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
-typedef struct _KEY_CONTROL_FLAGS_INFORMATION {
- ULONG ControlFlags;
-} KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION;
-
typedef struct _KEY_FULL_INFORMATION {
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
WCHAR Class[1];
} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
-typedef struct _KEY_HANDLE_TAGS_INFORMATION {
- ULONG HandleTags;
-} KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION;
-
typedef struct _KEY_NODE_INFORMATION {
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
WCHAR Name[1];
} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
-typedef enum _KEY_SET_INFORMATION_CLASS {
- KeyWriteTimeInformation,
- KeyWow64FlagsInformation,
- KeyControlFlagsInformation,
- KeySetVirtualizationInformation,
- KeySetDebugInformation,
- KeySetHandleTagsInformation,
- MaxKeySetInfoClass
-} KEY_SET_INFORMATION_CLASS;
-
-typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION {
- ULONG VirtualTarget:1;
- ULONG VirtualStore:1;
- ULONG VirtualSource:1;
- ULONG Reserved:29;
-} KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION;
-
typedef struct _KEY_VALUE_BASIC_INFORMATION {
ULONG TitleIndex;
ULONG Type;
KeyValuePartialInformationAlign64
} KEY_VALUE_INFORMATION_CLASS;
-typedef struct _KEY_WOW64_FLAGS_INFORMATION {
- ULONG UserFlags;
-} KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION;
-
typedef struct _KEY_WRITE_TIME_INFORMATION {
LARGE_INTEGER LastWriteTime;
} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
+typedef enum _KEY_SET_INFORMATION_CLASS {
+ KeyWriteTimeInformation,
+ KeyWow64FlagsInformation,
+ KeyControlFlagsInformation,
+ KeySetVirtualizationInformation,
+ KeySetDebugInformation,
+ KeySetHandleTagsInformation,
+ MaxKeySetInfoClass
+} KEY_SET_INFORMATION_CLASS;
+
typedef enum _REG_NOTIFY_CLASS {
RegNtDeleteKey,
RegNtPreDeleteKey = RegNtDeleteKey,
PVOID Reserved;
} REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
-typedef struct _REG_RENAME_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING NewName;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
-} REG_RENAME_KEY_INFORMATION, *PREG_RENAME_KEY_INFORMATION;
-
-typedef struct _REG_CREATE_KEY_INFORMATION {
- PUNICODE_STRING CompleteName;
- PVOID RootObject;
- PVOID ObjectType;
- ULONG CreateOptions;
- PUNICODE_STRING Class;
- PVOID SecurityDescriptor;
- PVOID SecurityQualityOfService;
- ACCESS_MASK DesiredAccess;
- ACCESS_MASK GrantedAccess;
- PULONG Disposition;
- PVOID *ResultObject;
- PVOID CallContext;
- PVOID RootObjectContext;
- PVOID Transaction;
- PVOID Reserved;
-} REG_CREATE_KEY_INFORMATION, REG_OPEN_KEY_INFORMATION,*PREG_CREATE_KEY_INFORMATION, *PREG_OPEN_KEY_INFORMATION;
-
-typedef struct _REG_CREATE_KEY_INFORMATION_V1 {
- PUNICODE_STRING CompleteName;
- PVOID RootObject;
- PVOID ObjectType;
- ULONG Options;
- PUNICODE_STRING Class;
- PVOID SecurityDescriptor;
- PVOID SecurityQualityOfService;
- ACCESS_MASK DesiredAccess;
- ACCESS_MASK GrantedAccess;
- PULONG Disposition;
- PVOID *ResultObject;
- PVOID CallContext;
- PVOID RootObjectContext;
- PVOID Transaction;
- ULONG_PTR Version;
- PUNICODE_STRING RemainingName;
- ULONG Wow64Flags;
- ULONG Attributes;
- KPROCESSOR_MODE CheckAccessMode;
-} REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION_V1,*PREG_CREATE_KEY_INFORMATION_V1, *PREG_OPEN_KEY_INFORMATION_V1;
-
typedef struct _REG_PRE_CREATE_KEY_INFORMATION {
PUNICODE_STRING CompleteName;
} REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;;
PVOID Reserved;
} REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION;
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-typedef struct _REG_LOAD_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING KeyName;
- PUNICODE_STRING SourceFile;
- ULONG Flags;
- PVOID TrustClassObject;
- PVOID UserEvent;
- ACCESS_MASK DesiredAccess;
- PHANDLE RootHandle;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
-} REG_LOAD_KEY_INFORMATION, *PREG_LOAD_KEY_INFORMATION;
+/******************************************************************************
+ * I/O Manager Types *
+ ******************************************************************************/
-typedef struct _REG_UNLOAD_KEY_INFORMATION {
- PVOID Object;
- PVOID UserEvent;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
-} REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION;
+ /* PCI_COMMON_CONFIG.Command */
+#define PCI_ENABLE_IO_SPACE 0x0001
+#define PCI_ENABLE_MEMORY_SPACE 0x0002
+#define PCI_ENABLE_BUS_MASTER 0x0004
+#define PCI_ENABLE_SPECIAL_CYCLES 0x0008
+#define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
+#define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
+#define PCI_ENABLE_PARITY 0x0040
+#define PCI_ENABLE_WAIT_CYCLE 0x0080
+#define PCI_ENABLE_SERR 0x0100
+#define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
+#define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
-typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION {
- PVOID Object;
- PVOID ObjectContext;
- PVOID Reserved;
-} REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION;
+/* PCI_COMMON_CONFIG.Status */
+#define PCI_STATUS_INTERRUPT_PENDING 0x0008
+#define PCI_STATUS_CAPABILITIES_LIST 0x0010
+#define PCI_STATUS_66MHZ_CAPABLE 0x0020
+#define PCI_STATUS_UDF_SUPPORTED 0x0040
+#define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
+#define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
+#define PCI_STATUS_DEVSEL 0x0600
+#define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
+#define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
+#define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
+#define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
+#define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
-typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION {
- PVOID Object;
- PSECURITY_INFORMATION SecurityInformation;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- PULONG Length;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
-} REG_QUERY_KEY_SECURITY_INFORMATION, *PREG_QUERY_KEY_SECURITY_INFORMATION;
+/* PCI_COMMON_CONFIG.HeaderType */
+#define PCI_MULTIFUNCTION 0x80
+#define PCI_DEVICE_TYPE 0x00
+#define PCI_BRIDGE_TYPE 0x01
+#define PCI_CARDBUS_BRIDGE_TYPE 0x02
-typedef struct _REG_SET_KEY_SECURITY_INFORMATION {
- PVOID Object;
- PSECURITY_INFORMATION SecurityInformation;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
-} REG_SET_KEY_SECURITY_INFORMATION, *PREG_SET_KEY_SECURITY_INFORMATION;
+#define PCI_CONFIGURATION_TYPE(PciData) \
+ (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
-typedef struct _REG_RESTORE_KEY_INFORMATION {
- PVOID Object;
- HANDLE FileHandle;
- ULONG Flags;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
-} REG_RESTORE_KEY_INFORMATION, *PREG_RESTORE_KEY_INFORMATION;
+#define PCI_MULTIFUNCTION_DEVICE(PciData) \
+ ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
-typedef struct _REG_SAVE_KEY_INFORMATION {
- PVOID Object;
- HANDLE FileHandle;
- ULONG Format;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
-} REG_SAVE_KEY_INFORMATION, *PREG_SAVE_KEY_INFORMATION;
+/* PCI device classes */
+#define PCI_CLASS_PRE_20 0x00
+#define PCI_CLASS_MASS_STORAGE_CTLR 0x01
+#define PCI_CLASS_NETWORK_CTLR 0x02
+#define PCI_CLASS_DISPLAY_CTLR 0x03
+#define PCI_CLASS_MULTIMEDIA_DEV 0x04
+#define PCI_CLASS_MEMORY_CTLR 0x05
+#define PCI_CLASS_BRIDGE_DEV 0x06
+#define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
+#define PCI_CLASS_BASE_SYSTEM_DEV 0x08
+#define PCI_CLASS_INPUT_DEV 0x09
+#define PCI_CLASS_DOCKING_STATION 0x0a
+#define PCI_CLASS_PROCESSOR 0x0b
+#define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
+#define PCI_CLASS_WIRELESS_CTLR 0x0d
+#define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
+#define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
+#define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
+#define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
-typedef struct _REG_REPLACE_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING OldFileName;
- PUNICODE_STRING NewFileName;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
-} REG_REPLACE_KEY_INFORMATION, *PREG_REPLACE_KEY_INFORMATION;
+/* PCI device subclasses for class 0 */
+#define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
+#define PCI_SUBCLASS_PRE_20_VGA 0x01
-#endif /* NTDDI_VERSION >= NTDDI_VISTA */
+/* PCI device subclasses for class 1 (mass storage controllers)*/
+#define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
+#define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
+#define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
+#define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
+#define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
+#define PCI_SUBCLASS_MSC_OTHER 0x80
-#define SERVICE_KERNEL_DRIVER 0x00000001
-#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
-#define SERVICE_ADAPTER 0x00000004
-#define SERVICE_RECOGNIZER_DRIVER 0x00000008
+/* PCI device subclasses for class 2 (network controllers)*/
+#define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
+#define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
+#define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
+#define PCI_SUBCLASS_NET_ATM_CTLR 0x03
+#define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
+#define PCI_SUBCLASS_NET_OTHER 0x80
-#define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
- SERVICE_FILE_SYSTEM_DRIVER | \
- SERVICE_RECOGNIZER_DRIVER)
+/* PCI device subclasses for class 3 (display controllers)*/
+#define PCI_SUBCLASS_VID_VGA_CTLR 0x00
+#define PCI_SUBCLASS_VID_XGA_CTLR 0x01
+#define PCI_SUBCLASS_VID_3D_CTLR 0x02
+#define PCI_SUBCLASS_VID_OTHER 0x80
-#define SERVICE_WIN32_OWN_PROCESS 0x00000010
-#define SERVICE_WIN32_SHARE_PROCESS 0x00000020
-#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
- SERVICE_WIN32_SHARE_PROCESS)
+/* PCI device subclasses for class 4 (multimedia device)*/
+#define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
+#define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
+#define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
+#define PCI_SUBCLASS_MM_OTHER 0x80
-#define SERVICE_INTERACTIVE_PROCESS 0x00000100
+/* PCI device subclasses for class 5 (memory controller)*/
+#define PCI_SUBCLASS_MEM_RAM 0x00
+#define PCI_SUBCLASS_MEM_FLASH 0x01
+#define PCI_SUBCLASS_MEM_OTHER 0x80
+
+/* PCI device subclasses for class 6 (bridge device)*/
+#define PCI_SUBCLASS_BR_HOST 0x00
+#define PCI_SUBCLASS_BR_ISA 0x01
+#define PCI_SUBCLASS_BR_EISA 0x02
+#define PCI_SUBCLASS_BR_MCA 0x03
+#define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
+#define PCI_SUBCLASS_BR_PCMCIA 0x05
+#define PCI_SUBCLASS_BR_NUBUS 0x06
+#define PCI_SUBCLASS_BR_CARDBUS 0x07
+#define PCI_SUBCLASS_BR_RACEWAY 0x08
+#define PCI_SUBCLASS_BR_OTHER 0x80
+
+/* PCI device subclasses for class C (serial bus controller)*/
+#define PCI_SUBCLASS_SB_IEEE1394 0x00
+#define PCI_SUBCLASS_SB_ACCESS 0x01
+#define PCI_SUBCLASS_SB_SSA 0x02
+#define PCI_SUBCLASS_SB_USB 0x03
+#define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
+#define PCI_SUBCLASS_SB_SMBUS 0x05
+
+#define PCI_MAX_DEVICES 32
+#define PCI_MAX_FUNCTION 8
+#define PCI_MAX_BRIDGE_NUMBER 0xFF
+#define PCI_INVALID_VENDORID 0xFFFF
+#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
+
+#define PCI_ADDRESS_IO_SPACE 0x00000001
+#define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
+#define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
+#define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
+#define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
+#define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
+
+#define PCI_TYPE_32BIT 0
+#define PCI_TYPE_20BIT 2
+#define PCI_TYPE_64BIT 4
+
+#define SERVICE_KERNEL_DRIVER 0x00000001
+#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
+#define SERVICE_ADAPTER 0x00000004
+#define SERVICE_RECOGNIZER_DRIVER 0x00000008
+
+#define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
+ SERVICE_FILE_SYSTEM_DRIVER | \
+ SERVICE_RECOGNIZER_DRIVER)
+
+#define SERVICE_WIN32_OWN_PROCESS 0x00000010
+#define SERVICE_WIN32_SHARE_PROCESS 0x00000020
+#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
+ SERVICE_WIN32_SHARE_PROCESS)
+
+#define SERVICE_INTERACTIVE_PROCESS 0x00000100
#define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
SERVICE_ADAPTER | \
CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
CM_SERVICE_USB_DISK_BOOT_LOAD)
-/******************************************************************************
- * I/O Manager Types *
- ******************************************************************************/
-
-#define WDM_MAJORVERSION 0x06
-#define WDM_MINORVERSION 0x00
-
-#if defined(_WIN64)
-
-#ifndef USE_DMA_MACROS
-#define USE_DMA_MACROS
-#endif
-
-#ifndef NO_LEGACY_DRIVERS
-#define NO_LEGACY_DRIVERS
-#endif
-
-#endif /* defined(_WIN64) */
-
-#define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
-
-#define CONNECT_FULLY_SPECIFIED 0x1
-#define CONNECT_LINE_BASED 0x2
-#define CONNECT_MESSAGE_BASED 0x3
-#define CONNECT_FULLY_SPECIFIED_GROUP 0x4
-#define CONNECT_CURRENT_VERSION 0x4
-
#define POOL_COLD_ALLOCATION 256
#define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
#define POOL_RAISE_IF_ALLOCATION_FAILURE 16
+#define PCI_TYPE0_ADDRESSES 6
+#define PCI_TYPE1_ADDRESSES 2
+#define PCI_TYPE2_ADDRESSES 5
+
#define IO_TYPE_ADAPTER 1
#define IO_TYPE_CONTROLLER 2
#define IO_TYPE_DEVICE 3
#define IO_RESOURCE_DEFAULT 0x02
#define IO_RESOURCE_ALTERNATIVE 0x08
+/* DEVICE_OBJECT.Flags */
+#define DO_VERIFY_VOLUME 0x00000002
+#define DO_BUFFERED_IO 0x00000004
+#define DO_EXCLUSIVE 0x00000008
+#define DO_DIRECT_IO 0x00000010
+#define DO_MAP_IO_BUFFER 0x00000020
+#define DO_DEVICE_INITIALIZING 0x00000080
+#define DO_SHUTDOWN_REGISTERED 0x00000800
+#define DO_BUS_ENUMERATED_DEVICE 0x00001000
+#define DO_POWER_PAGABLE 0x00002000
+#define DO_POWER_INRUSH 0x00004000
+
+/* DEVICE_OBJECT.Characteristics */
+#define FILE_REMOVABLE_MEDIA 0x00000001
+#define FILE_READ_ONLY_DEVICE 0x00000002
+#define FILE_FLOPPY_DISKETTE 0x00000004
+#define FILE_WRITE_ONCE_MEDIA 0x00000008
+#define FILE_REMOTE_DEVICE 0x00000010
+#define FILE_DEVICE_IS_MOUNTED 0x00000020
+#define FILE_VIRTUAL_VOLUME 0x00000040
+#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
+#define FILE_DEVICE_SECURE_OPEN 0x00000100
+#define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
+#define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
+#define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
+
+/* DEVICE_OBJECT.AlignmentRequirement */
+#define FILE_BYTE_ALIGNMENT 0x00000000
+#define FILE_WORD_ALIGNMENT 0x00000001
+#define FILE_LONG_ALIGNMENT 0x00000003
+#define FILE_QUAD_ALIGNMENT 0x00000007
+#define FILE_OCTA_ALIGNMENT 0x0000000f
+#define FILE_32_BYTE_ALIGNMENT 0x0000001f
+#define FILE_64_BYTE_ALIGNMENT 0x0000003f
+#define FILE_128_BYTE_ALIGNMENT 0x0000007f
+#define FILE_256_BYTE_ALIGNMENT 0x000000ff
+#define FILE_512_BYTE_ALIGNMENT 0x000001ff
+
+/* DEVICE_OBJECT.DeviceType */
+#define DEVICE_TYPE ULONG
+
#define FILE_DEVICE_BEEP 0x00000001
#define FILE_DEVICE_CD_ROM 0x00000002
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
#define FILE_DEVICE_BIOMETRIC 0x00000044
#define FILE_DEVICE_PMI 0x00000045
-#if defined(NT_PROCESSOR_GROUPS)
-
-typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
-
-typedef enum _IRQ_DEVICE_POLICY_USHORT {
- IrqPolicyMachineDefault = 0,
- IrqPolicyAllCloseProcessors = 1,
- IrqPolicyOneCloseProcessor = 2,
- IrqPolicyAllProcessorsInMachine = 3,
- IrqPolicyAllProcessorsInGroup = 3,
- IrqPolicySpecifiedProcessors = 4,
- IrqPolicySpreadMessagesAcrossAllProcessors = 5};
-
-#else /* defined(NT_PROCESSOR_GROUPS) */
-
-typedef enum _IRQ_DEVICE_POLICY {
- IrqPolicyMachineDefault = 0,
- IrqPolicyAllCloseProcessors,
- IrqPolicyOneCloseProcessor,
- IrqPolicyAllProcessorsInMachine,
- IrqPolicySpecifiedProcessors,
- IrqPolicySpreadMessagesAcrossAllProcessors
-} IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
-
-#endif
-
-typedef enum _IRQ_PRIORITY {
- IrqPriorityUndefined = 0,
- IrqPriorityLow,
- IrqPriorityNormal,
- IrqPriorityHigh
-} IRQ_PRIORITY, *PIRQ_PRIORITY;
-
-typedef enum _IRQ_GROUP_POLICY {
- GroupAffinityAllGroupZero = 0,
- GroupAffinityDontCare
-} IRQ_GROUP_POLICY, *PIRQ_GROUP_POLICY;
-
#define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
typedef struct _OBJECT_HANDLE_INFORMATION {
HANDLE UniqueThread;
} CLIENT_ID, *PCLIENT_ID;
+typedef VOID
+(NTAPI *PKSTART_ROUTINE)(
+ IN PVOID StartContext);
+
typedef struct _VPB {
CSHORT Type;
CSHORT Size;
PKDPC BufferChainingDpc;
} WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
-/* DEVICE_OBJECT.Flags */
-#define DO_VERIFY_VOLUME 0x00000002
-#define DO_BUFFERED_IO 0x00000004
-#define DO_EXCLUSIVE 0x00000008
-#define DO_DIRECT_IO 0x00000010
-#define DO_MAP_IO_BUFFER 0x00000020
-#define DO_DEVICE_INITIALIZING 0x00000080
-#define DO_SHUTDOWN_REGISTERED 0x00000800
-#define DO_BUS_ENUMERATED_DEVICE 0x00001000
-#define DO_POWER_PAGABLE 0x00002000
-#define DO_POWER_INRUSH 0x00004000
-
-/* DEVICE_OBJECT.Characteristics */
-#define FILE_REMOVABLE_MEDIA 0x00000001
-#define FILE_READ_ONLY_DEVICE 0x00000002
-#define FILE_FLOPPY_DISKETTE 0x00000004
-#define FILE_WRITE_ONCE_MEDIA 0x00000008
-#define FILE_REMOTE_DEVICE 0x00000010
-#define FILE_DEVICE_IS_MOUNTED 0x00000020
-#define FILE_VIRTUAL_VOLUME 0x00000040
-#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
-#define FILE_DEVICE_SECURE_OPEN 0x00000100
-#define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
-#define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
-#define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
-
-/* DEVICE_OBJECT.AlignmentRequirement */
-#define FILE_BYTE_ALIGNMENT 0x00000000
-#define FILE_WORD_ALIGNMENT 0x00000001
-#define FILE_LONG_ALIGNMENT 0x00000003
-#define FILE_QUAD_ALIGNMENT 0x00000007
-#define FILE_OCTA_ALIGNMENT 0x0000000f
-#define FILE_32_BYTE_ALIGNMENT 0x0000001f
-#define FILE_64_BYTE_ALIGNMENT 0x0000003f
-#define FILE_128_BYTE_ALIGNMENT 0x0000007f
-#define FILE_256_BYTE_ALIGNMENT 0x000000ff
-#define FILE_512_BYTE_ALIGNMENT 0x000001ff
-
-/* DEVICE_OBJECT.DeviceType */
-#define DEVICE_TYPE ULONG
-
typedef struct _DEVICE_OBJECT {
CSHORT Type;
USHORT Size;
PVOID Reserved;
} DEVICE_OBJECT, *PDEVICE_OBJECT;
-typedef enum _IO_SESSION_STATE {
- IoSessionStateCreated = 1,
- IoSessionStateInitialized,
- IoSessionStateConnected,
- IoSessionStateDisconnected,
- IoSessionStateDisconnectedLoggedOn,
- IoSessionStateLoggedOn,
- IoSessionStateLoggedOff,
- IoSessionStateTerminated,
- IoSessionStateMax
-} IO_SESSION_STATE, *PIO_SESSION_STATE;
-
-typedef enum _IO_COMPLETION_ROUTINE_RESULT {
- ContinueCompletion = STATUS_CONTINUE_COMPLETION,
- StopCompletion = STATUS_MORE_PROCESSING_REQUIRED
-} IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT;
-
-typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY {
- PHYSICAL_ADDRESS MessageAddress;
- KAFFINITY TargetProcessorSet;
- PKINTERRUPT InterruptObject;
- ULONG MessageData;
- ULONG Vector;
- KIRQL Irql;
- KINTERRUPT_MODE Mode;
- KINTERRUPT_POLARITY Polarity;
-} IO_INTERRUPT_MESSAGE_INFO_ENTRY, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY;
-
-typedef struct _IO_INTERRUPT_MESSAGE_INFO {
- KIRQL UnifiedIrql;
- ULONG MessageCount;
- IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1];
-} IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO;
-
-typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS {
- IN PDEVICE_OBJECT PhysicalDeviceObject;
- OUT PKINTERRUPT *InterruptObject;
- IN PKSERVICE_ROUTINE ServiceRoutine;
- IN PVOID ServiceContext;
- IN PKSPIN_LOCK SpinLock OPTIONAL;
- IN KIRQL SynchronizeIrql;
- IN BOOLEAN FloatingSave;
- IN BOOLEAN ShareVector;
- IN ULONG Vector;
- IN KIRQL Irql;
- IN KINTERRUPT_MODE InterruptMode;
- IN KAFFINITY ProcessorEnableMask;
- IN USHORT Group;
-} IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS;
-
-typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS {
- IN PDEVICE_OBJECT PhysicalDeviceObject;
- OUT PKINTERRUPT *InterruptObject;
- IN PKSERVICE_ROUTINE ServiceRoutine;
- IN PVOID ServiceContext;
- IN PKSPIN_LOCK SpinLock OPTIONAL;
- IN KIRQL SynchronizeIrql OPTIONAL;
- IN BOOLEAN FloatingSave;
-} IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS;
-
-typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS {
- IN PDEVICE_OBJECT PhysicalDeviceObject;
- union {
- OUT PVOID *Generic;
- OUT PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable;
- OUT PKINTERRUPT *InterruptObject;
- } ConnectionContext;
- IN PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine;
- IN PVOID ServiceContext;
- IN PKSPIN_LOCK SpinLock OPTIONAL;
- IN KIRQL SynchronizeIrql OPTIONAL;
- IN BOOLEAN FloatingSave;
- IN PKSERVICE_ROUTINE FallBackServiceRoutine OPTIONAL;
-} IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS;
-
-typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
- IN OUT ULONG Version;
- union {
- IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
- IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
- IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
- };
-} IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;
-
-typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS {
- IN ULONG Version;
- union {
- IN PVOID Generic;
- IN PKINTERRUPT InterruptObject;
- IN PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable;
- } ConnectionContext;
-} IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS;
-
-typedef enum _IO_ACCESS_TYPE {
- ReadAccess,
- WriteAccess,
- ModifyAccess
-} IO_ACCESS_TYPE;
-
-typedef enum _IO_ACCESS_MODE {
- SequentialAccess,
- RandomAccess
-} IO_ACCESS_MODE;
-
-typedef enum _IO_CONTAINER_NOTIFICATION_CLASS {
- IoSessionStateNotification,
- IoMaxContainerNotificationClass
-} IO_CONTAINER_NOTIFICATION_CLASS;
-
-typedef struct _IO_SESSION_STATE_NOTIFICATION {
- ULONG Size;
- ULONG Flags;
- PVOID IoObject;
- ULONG EventMask;
- PVOID Context;
-} IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION;
-
-typedef enum _IO_CONTAINER_INFORMATION_CLASS {
- IoSessionStateInformation,
- IoMaxContainerInformationClass
-} IO_CONTAINER_INFORMATION_CLASS;
-
-typedef struct _IO_SESSION_STATE_INFORMATION {
- ULONG SessionId;
- IO_SESSION_STATE SessionState;
- BOOLEAN LocalSession;
-} IO_SESSION_STATE_INFORMATION, *PIO_SESSION_STATE_INFORMATION;
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-typedef NTSTATUS
-(NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)(
- VOID);
-
-typedef NTSTATUS
-(NTAPI IO_SESSION_NOTIFICATION_FUNCTION)(
- IN PVOID SessionObject,
- IN PVOID IoObject,
- IN ULONG Event,
- IN PVOID Context,
- IN PVOID NotificationPayload,
- IN ULONG PayloadLength);
-
-typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION;
-
-#endif
-
typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK;
typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
} type2; \
} u;
+typedef struct _PCI_COMMON_HEADER {
+ PCI_COMMON_HEADER_LAYOUT
+} PCI_COMMON_HEADER, *PPCI_COMMON_HEADER;
+
+#ifdef __cplusplus
+typedef struct _PCI_COMMON_CONFIG {
+ PCI_COMMON_HEADER_LAYOUT
+ UCHAR DeviceSpecific[192];
+} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
+#else
+typedef struct _PCI_COMMON_CONFIG {
+ PCI_COMMON_HEADER DUMMYSTRUCTNAME;
+ UCHAR DeviceSpecific[192];
+} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
+#endif
+
typedef enum _CREATE_FILE_TYPE {
CreateFileTypeNone,
CreateFileTypeNamedPipe,
ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
-#if defined(_WIN64)
-typedef struct _IO_STATUS_BLOCK32 {
- NTSTATUS Status;
- ULONG Information;
-} IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32;
-#endif
+typedef struct _PCI_SLOT_NUMBER {
+ union {
+ struct {
+ ULONG DeviceNumber : 5;
+ ULONG FunctionNumber : 3;
+ ULONG Reserved : 24;
+ } bits;
+ ULONG AsULONG;
+ } u;
+} PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
typedef VOID
(NTAPI *PIO_APC_ROUTINE)(
IN PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG Reserved);
-#define PIO_APC_ROUTINE_DEFINED
+typedef VOID
+(NTAPI *WMI_NOTIFICATION_CALLBACK)(
+ PVOID Wnode,
+ PVOID Context);
-typedef enum _IO_SESSION_EVENT {
- IoSessionEventIgnore = 0,
- IoSessionEventCreated,
- IoSessionEventTerminated,
- IoSessionEventConnected,
- IoSessionEventDisconnected,
- IoSessionEventLogon,
- IoSessionEventLogoff,
- IoSessionEventMax
-} IO_SESSION_EVENT, *PIO_SESSION_EVENT;
-
-#define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
-#define IO_SESSION_STATE_CREATION_EVENT 0x00000001
-#define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
-#define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
-#define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
-#define IO_SESSION_STATE_LOGON_EVENT 0x00000010
-#define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
-
-#define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
-
-#define IO_SESSION_MAX_PAYLOAD_SIZE 256L
-
-typedef struct _IO_SESSION_CONNECT_INFO {
- ULONG SessionId;
- BOOLEAN LocalSession;
-} IO_SESSION_CONNECT_INFO, *PIO_SESSION_CONNECT_INFO;
+#define WMIREG_ACTION_REGISTER 1
+#define WMIREG_ACTION_DEREGISTER 2
+#define WMIREG_ACTION_REREGISTER 3
+#define WMIREG_ACTION_UPDATE_GUIDS 4
+#define WMIREG_ACTION_BLOCK_IRPS 5
#define EVENT_INCREMENT 1
#define IO_NO_INCREMENT 0
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-#include <pshpack1.h>
typedef struct _EISA_MEMORY_TYPE {
UCHAR ReadWrite : 1;
UCHAR MoreEntries : 1;
} EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
+#include <pshpack1.h>
typedef struct _EISA_MEMORY_CONFIGURATION {
EISA_MEMORY_TYPE ConfigurationByte;
UCHAR DataSize;
UCHAR AddressHighByte;
USHORT MemorySize;
} EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
+#include <poppack.h>
typedef struct _EISA_IRQ_DESCRIPTOR {
UCHAR Interrupt : 4;
DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
} EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
+#include <pshpack1.h>
typedef struct _EISA_PORT_DESCRIPTOR {
UCHAR NumberPorts : 5;
UCHAR Reserved : 1;
EISA_PORT_DESCRIPTOR Configuration;
USHORT PortAddress;
} EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
-
-typedef struct _CM_EISA_SLOT_INFORMATION {
- UCHAR ReturnCode;
- UCHAR ReturnFlags;
- UCHAR MajorRevision;
- UCHAR MinorRevision;
- USHORT Checksum;
- UCHAR NumberFunctions;
- UCHAR FunctionInformation;
- ULONG CompressedId;
-} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
+#include <poppack.h>
typedef struct _CM_EISA_FUNCTION_INFORMATION {
ULONG CompressedId;
UCHAR InitializationData[60];
} CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
-#include <poppack.h>
-
/* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
#define EISA_FUNCTION_ENABLED 0x80
(EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
+ EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
-#define EISA_MORE_ENTRIES 0x80
-#define EISA_SYSTEM_MEMORY 0x00
-#define EISA_MEMORY_TYPE_RAM 0x01
+typedef struct _CM_EISA_SLOT_INFORMATION {
+ UCHAR ReturnCode;
+ UCHAR ReturnFlags;
+ UCHAR MajorRevision;
+ UCHAR MinorRevision;
+ USHORT Checksum;
+ UCHAR NumberFunctions;
+ UCHAR FunctionInformation;
+ ULONG CompressedId;
+} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
/* CM_EISA_SLOT_INFORMATION.ReturnCode */
IN ULONG Length);
typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA;
-typedef enum _DEVICE_INSTALL_STATE {
- InstallStateInstalled,
- InstallStateNeedsReinstall,
- InstallStateFailedInstall,
- InstallStateFinishInstall
-} DEVICE_INSTALL_STATE, *PDEVICE_INSTALL_STATE;
-
-typedef struct _LEGACY_BUS_INFORMATION {
- GUID BusTypeGuid;
- INTERFACE_TYPE LegacyBusType;
- ULONG BusNumber;
-} LEGACY_BUS_INFORMATION, *PLEGACY_BUS_INFORMATION;
-
-typedef enum _DEVICE_REMOVAL_POLICY {
- RemovalPolicyExpectNoRemoval = 1,
- RemovalPolicyExpectOrderlyRemoval = 2,
- RemovalPolicyExpectSurpriseRemoval = 3
-} DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY;
-
-typedef VOID
-(NTAPI*PREENUMERATE_SELF)(
- IN PVOID Context);
-
-typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf;
-} REENUMERATE_SELF_INTERFACE_STANDARD, *PREENUMERATE_SELF_INTERFACE_STANDARD;
-
-typedef VOID
-(NTAPI *PIO_DEVICE_EJECT_CALLBACK)(
- IN NTSTATUS Status,
- IN OUT PVOID Context OPTIONAL);
-
-#define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
-
/* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
#define PCI_USE_SUBSYSTEM_IDS 0x00000001
#define PCI_USE_REVISION 0x00000002
PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx;
} PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE;
-typedef struct _DEVICE_CAPABILITIES {
- USHORT Size;
- USHORT Version;
- ULONG DeviceD1 : 1;
- ULONG DeviceD2 : 1;
- ULONG LockSupported : 1;
- ULONG EjectSupported : 1;
- ULONG Removable : 1;
- ULONG DockDevice : 1;
- ULONG UniqueID : 1;
- ULONG SilentInstall : 1;
- ULONG RawDeviceOK : 1;
- ULONG SurpriseRemovalOK : 1;
- ULONG WakeFromD0 : 1;
- ULONG WakeFromD1 : 1;
- ULONG WakeFromD2 : 1;
- ULONG WakeFromD3 : 1;
- ULONG HardwareDisabled : 1;
- ULONG NonDynamic : 1;
+typedef
+BOOLEAN
+(*PGPE_SERVICE_ROUTINE2)(
+ PVOID ObjectContext,
+ PVOID ServiceContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_CONNECT_VECTOR2)(
+ PVOID Context,
+ ULONG GpeNumber,
+ KINTERRUPT_MODE Mode,
+ BOOLEAN Shareable,
+ PGPE_SERVICE_ROUTINE2 ServiceRoutine,
+ PVOID ServiceContext,
+ PVOID *ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_DISCONNECT_VECTOR2)(
+ PVOID Context,
+ PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_ENABLE_EVENT2)(
+ PVOID Context,
+ PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_DISABLE_EVENT2)(
+ PVOID Context,
+ PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_CLEAR_STATUS2)(
+ PVOID Context,
+ PVOID ObjectContext
+);
+
+typedef
+VOID
+(*PDEVICE_NOTIFY_CALLBACK2)(
+ PVOID NotificationContext,
+ ULONG NotifyCode
+);
+
+typedef
+NTSTATUS
+(*PREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
+ PVOID Context,
+ PDEVICE_NOTIFY_CALLBACK2 NotificationHandler,
+ PVOID NotificationContext
+);
+
+typedef
+VOID
+(*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
+ PVOID Context
+);
+
+typedef struct
+{
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PGPE_CONNECT_VECTOR2 GpeConnectVector;
+ PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector;
+ PGPE_ENABLE_EVENT2 GpeEnableEvent;
+ PGPE_DISABLE_EVENT2 GpeDisableEvent;
+ PGPE_CLEAR_STATUS2 GpeClearStatus;
+ PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications;
+ PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications;
+} ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2;
+
+typedef
+BOOLEAN
+(*PGPE_SERVICE_ROUTINE)(
+ PDEVICE_OBJECT ObjectContext,
+ PVOID ServiceContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_CONNECT_VECTOR)(
+ PDEVICE_OBJECT Context,
+ ULONG GpeNumber,
+ KINTERRUPT_MODE Mode,
+ BOOLEAN Shareable,
+ PGPE_SERVICE_ROUTINE ServiceRoutine,
+ PVOID ServiceContext,
+ PVOID *ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_DISCONNECT_VECTOR)(
+ PDEVICE_OBJECT Context,
+ PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_ENABLE_EVENT)(
+ PDEVICE_OBJECT Context,
+ PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_DISABLE_EVENT)(
+ PDEVICE_OBJECT Context,
+ PVOID ObjectContext
+);
+
+typedef
+NTSTATUS
+(*PGPE_CLEAR_STATUS)(
+ PDEVICE_OBJECT Context,
+ PVOID ObjectContext
+);
+
+typedef
+VOID
+(*PDEVICE_NOTIFY_CALLBACK)(
+ PVOID NotificationContext,
+ ULONG NotifyCode
+);
+
+typedef
+NTSTATUS
+(*PREGISTER_FOR_DEVICE_NOTIFICATIONS)(
+ PDEVICE_OBJECT Context,
+ PDEVICE_NOTIFY_CALLBACK NotificationHandler,
+ PVOID NotificationContext
+);
+
+typedef
+VOID
+(*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)(
+ PDEVICE_OBJECT Context,
+ PDEVICE_NOTIFY_CALLBACK NotificationHandler
+);
+
+typedef struct
+{
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PGPE_CONNECT_VECTOR GpeConnectVector;
+ PGPE_DISCONNECT_VECTOR GpeDisconnectVector;
+ PGPE_ENABLE_EVENT GpeEnableEvent;
+ PGPE_DISABLE_EVENT GpeDisableEvent;
+ PGPE_CLEAR_STATUS GpeClearStatus;
+ PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications;
+ PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications;
+} ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD;
+
+typedef struct _DEVICE_CAPABILITIES {
+ USHORT Size;
+ USHORT Version;
+ ULONG DeviceD1 : 1;
+ ULONG DeviceD2 : 1;
+ ULONG LockSupported : 1;
+ ULONG EjectSupported : 1;
+ ULONG Removable : 1;
+ ULONG DockDevice : 1;
+ ULONG UniqueID : 1;
+ ULONG SilentInstall : 1;
+ ULONG RawDeviceOK : 1;
+ ULONG SurpriseRemovalOK : 1;
+ ULONG WakeFromD0 : 1;
+ ULONG WakeFromD1 : 1;
+ ULONG WakeFromD2 : 1;
+ ULONG WakeFromD3 : 1;
+ ULONG HardwareDisabled : 1;
+ ULONG NonDynamic : 1;
ULONG WarmEjectSupported : 1;
ULONG NoDisplayInUI : 1;
ULONG Reserved : 14;
struct _FILE_OBJECT *FileObject;
} TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-#include <devpropdef.h>
-#define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
-#endif
-
-#define PNP_REPLACE_NO_MAP MAXLONGLONG
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_MAP_MEMORY)(
- IN PHYSICAL_ADDRESS TargetPhysicalAddress,
- IN PHYSICAL_ADDRESS SparePhysicalAddress,
- IN OUT PLARGE_INTEGER NumberOfBytes,
- OUT PVOID *TargetAddress,
- OUT PVOID *SpareAddress);
-
-typedef struct _PNP_REPLACE_MEMORY_LIST {
- ULONG AllocatedCount;
- ULONG Count;
- ULONGLONG TotalLength;
- struct {
- PHYSICAL_ADDRESS Address;
- ULONGLONG Length;
- } Ranges[ANYSIZE_ARRAY];
-} PNP_REPLACE_MEMORY_LIST, *PPNP_REPLACE_MEMORY_LIST;
-
-typedef struct _PNP_REPLACE_PROCESSOR_LIST {
- PKAFFINITY Affinity;
- ULONG GroupCount;
- ULONG AllocatedCount;
- ULONG Count;
- ULONG ApicIds[ANYSIZE_ARRAY];
-} PNP_REPLACE_PROCESSOR_LIST, *PPNP_REPLACE_PROCESSOR_LIST;
-
-typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 {
- KAFFINITY AffinityMask;
- ULONG AllocatedCount;
- ULONG Count;
- ULONG ApicIds[ANYSIZE_ARRAY];
-} PNP_REPLACE_PROCESSOR_LIST_V1, *PPNP_REPLACE_PROCESSOR_LIST_V1;
-
-#define PNP_REPLACE_PARAMETERS_VERSION 2
-
-typedef struct _PNP_REPLACE_PARAMETERS {
- ULONG Size;
- ULONG Version;
- ULONG64 Target;
- ULONG64 Spare;
- PPNP_REPLACE_PROCESSOR_LIST TargetProcessors;
- PPNP_REPLACE_PROCESSOR_LIST SpareProcessors;
- PPNP_REPLACE_MEMORY_LIST TargetMemory;
- PPNP_REPLACE_MEMORY_LIST SpareMemory;
- PREPLACE_MAP_MEMORY MapMemory;
-} PNP_REPLACE_PARAMETERS, *PPNP_REPLACE_PARAMETERS;
-
-typedef VOID
-(NTAPI *PREPLACE_UNLOAD)(
- VOID);
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_BEGIN)(
- IN PPNP_REPLACE_PARAMETERS Parameters,
- OUT PVOID *Context);
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_END)(
- IN PVOID Context);
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)(
- IN PVOID Context,
- IN PHYSICAL_ADDRESS PhysicalAddress,
- IN LARGE_INTEGER ByteCount);
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_SET_PROCESSOR_ID)(
- IN PVOID Context,
- IN ULONG ApicId,
- IN BOOLEAN Target);
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_SWAP)(
- IN PVOID Context);
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)(
- IN PVOID Context);
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)(
- IN PVOID Context);
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_GET_MEMORY_DESTINATION)(
- IN PVOID Context,
- IN PHYSICAL_ADDRESS SourceAddress,
- OUT PPHYSICAL_ADDRESS DestinationAddress);
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)(
- IN PVOID Context,
- IN BOOLEAN Enable);
-
-#define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
-#define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
- FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
-
-#define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
-#define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
-#define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
-#define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
-#define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
-
-typedef struct _PNP_REPLACE_DRIVER_INTERFACE {
- ULONG Size;
- ULONG Version;
- ULONG Flags;
- PREPLACE_UNLOAD Unload;
- PREPLACE_BEGIN BeginReplace;
- PREPLACE_END EndReplace;
- PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory;
- PREPLACE_SET_PROCESSOR_ID SetProcessorId;
- PREPLACE_SWAP Swap;
- PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror;
- PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory;
- PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination;
- PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce;
-} PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE;
-
-typedef NTSTATUS
-(NTAPI *PREPLACE_DRIVER_INIT)(
- IN OUT PPNP_REPLACE_DRIVER_INTERFACE Interface,
- IN PVOID Unused);
-
typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
DeviceUsageTypeUndefined,
DeviceUsageTypePaging,
EventCategoryTargetDeviceChange
} IO_NOTIFICATION_EVENT_CATEGORY;
-typedef enum _IO_PRIORITY_HINT {
- IoPriorityVeryLow = 0,
- IoPriorityLow,
- IoPriorityNormal,
- IoPriorityHigh,
- IoPriorityCritical,
- MaxIoPriorityTypes
-} IO_PRIORITY_HINT;
-
#define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
typedef NTSTATUS
LARGE_INTEGER CurrentByteOffset;
} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
+#include <pshpack8.h>
typedef struct _FILE_BASIC_INFORMATION {
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER ChangeTime;
ULONG FileAttributes;
} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
-
-typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION {
- IO_PRIORITY_HINT PriorityHint;
-} FILE_IO_PRIORITY_HINT_INFORMATION, *PFILE_IO_PRIORITY_HINT_INFORMATION;
-
-typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION {
- ULONG Flags;
-} FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
-
-typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION {
- PUCHAR IoStatusBlockRange;
- ULONG Length;
-} FILE_IOSTATUSBLOCK_RANGE_INFORMATION, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION;
-
-typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION {
- BOOLEAN IsRemote;
-} FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION;
-
-typedef struct _FILE_NUMA_NODE_INFORMATION {
- USHORT NodeNumber;
-} FILE_NUMA_NODE_INFORMATION, *PFILE_NUMA_NODE_INFORMATION;
-
-typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION {
- ULONG NumberOfProcessIdsInList;
- ULONG_PTR ProcessIdList[1];
-} FILE_PROCESS_IDS_USING_FILE_INFORMATION, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION;
+#include <poppack.h>
typedef struct _FILE_STANDARD_INFORMATION {
LARGE_INTEGER AllocationSize;
CHAR EaName[1];
} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
-typedef struct _FILE_SFIO_RESERVE_INFORMATION {
- ULONG RequestsPerPeriod;
- ULONG Period;
- BOOLEAN RetryFailures;
- BOOLEAN Discardable;
- ULONG RequestSize;
- ULONG NumOutstandingRequests;
-} FILE_SFIO_RESERVE_INFORMATION, *PFILE_SFIO_RESERVE_INFORMATION;
-
-typedef struct _FILE_SFIO_VOLUME_INFORMATION {
- ULONG MaximumRequestsPerPeriod;
- ULONG MinimumPeriod;
- ULONG MinimumTransferSize;
-} FILE_SFIO_VOLUME_INFORMATION, *PFILE_SFIO_VOLUME_INFORMATION;
-
-#define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
-#define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
-#define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
-
#define FM_LOCK_BIT (0x1)
#define FM_LOCK_BIT_V (0x0)
#define FM_LOCK_WAITER_WOKEN (0x2)
#define FM_LOCK_WAITER_INC (0x4)
+typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
+
+typedef struct _OWNER_ENTRY {
+ ERESOURCE_THREAD OwnerThread;
+ _ANONYMOUS_UNION union {
+ LONG OwnerCount;
+ ULONG TableSize;
+ } DUMMYUNIONNAME;
+} OWNER_ENTRY, *POWNER_ENTRY;
+
+typedef struct _ERESOURCE
+{
+ LIST_ENTRY SystemResourcesList;
+ POWNER_ENTRY OwnerTable;
+ SHORT ActiveCount;
+ USHORT Flag;
+ volatile PKSEMAPHORE SharedWaiters;
+ volatile PKEVENT ExclusiveWaiters;
+ OWNER_ENTRY OwnerEntry;
+ ULONG ActiveEntries;
+ ULONG ContentionCount;
+ ULONG NumberOfSharedWaiters;
+ ULONG NumberOfExclusiveWaiters;
+ __GNU_EXTENSION union
+ {
+ PVOID Address;
+ ULONG_PTR CreatorBackTraceIndex;
+ };
+ KSPIN_LOCK SpinLock;
+} ERESOURCE, *PERESOURCE;
+
+/* ERESOURCE.Flag */
+#define ResourceNeverExclusive 0x0010
+#define ResourceReleaseByOtherThread 0x0020
+#define ResourceOwnedExclusive 0x0080
+
+#define RESOURCE_HASH_TABLE_SIZE 64
+
typedef BOOLEAN
(NTAPI FAST_IO_CHECK_IF_POSSIBLE)(
IN struct _FILE_OBJECT *FileObject,
#define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
-#ifdef _WIN64
-#define PORT_MAXIMUM_MESSAGE_LENGTH 512
-#else
-#define PORT_MAXIMUM_MESSAGE_LENGTH 256
-#endif
-
typedef enum _DMA_WIDTH {
Width8Bits,
Width16Bits,
(NTAPI *PMM_DLL_UNLOAD)(
VOID);
+typedef BOOLEAN
+(NTAPI KSERVICE_ROUTINE)(
+ IN struct _KINTERRUPT *Interrupt,
+ IN PVOID ServiceContext);
+typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE;
+
typedef VOID
(NTAPI IO_TIMER_ROUTINE)(
IN struct _DEVICE_OBJECT *DeviceObject,
DeviceTextLocationInformation
} DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
-typedef BOOLEAN
-(NTAPI *PGPE_SERVICE_ROUTINE)(
- PVOID,
- PVOID);
-
-typedef NTSTATUS
-(NTAPI *PGPE_CONNECT_VECTOR)(
- PDEVICE_OBJECT,
- ULONG,
- KINTERRUPT_MODE,
- BOOLEAN,
- PGPE_SERVICE_ROUTINE,
- PVOID,
- PVOID);
-
-typedef NTSTATUS
-(NTAPI *PGPE_DISCONNECT_VECTOR)(
- PVOID);
-
-typedef NTSTATUS
-(NTAPI *PGPE_ENABLE_EVENT)(
- PDEVICE_OBJECT,
- PVOID);
-
-typedef NTSTATUS
-(NTAPI *PGPE_DISABLE_EVENT)(
- PDEVICE_OBJECT,
- PVOID);
-
-typedef NTSTATUS
-(NTAPI *PGPE_CLEAR_STATUS)(
- PDEVICE_OBJECT,
- PVOID);
-
-typedef VOID
-(NTAPI *PDEVICE_NOTIFY_CALLBACK)(
- PVOID,
- ULONG);
-
-typedef NTSTATUS
-(NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)(
- PDEVICE_OBJECT,
- PDEVICE_NOTIFY_CALLBACK,
- PVOID);
-
-typedef VOID
-(NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)(
- PDEVICE_OBJECT,
- PDEVICE_NOTIFY_CALLBACK);
-
-typedef struct _ACPI_INTERFACE_STANDARD {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PGPE_CONNECT_VECTOR GpeConnectVector;
- PGPE_DISCONNECT_VECTOR GpeDisconnectVector;
- PGPE_ENABLE_EVENT GpeEnableEvent;
- PGPE_DISABLE_EVENT GpeDisableEvent;
- PGPE_CLEAR_STATUS GpeClearStatus;
- PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications;
- PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications;
-} ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD;
-
-typedef BOOLEAN
-(NTAPI *PGPE_SERVICE_ROUTINE2)(
- PVOID ObjectContext,
- PVOID ServiceContext);
-
-typedef NTSTATUS
-(NTAPI *PGPE_CONNECT_VECTOR2)(
- PVOID Context,
- ULONG GpeNumber,
- KINTERRUPT_MODE Mode,
- BOOLEAN Shareable,
- PGPE_SERVICE_ROUTINE ServiceRoutine,
- PVOID ServiceContext,
- PVOID *ObjectContext);
-
-typedef NTSTATUS
-(NTAPI *PGPE_DISCONNECT_VECTOR2)(
- PVOID Context,
- PVOID ObjectContext);
-
-typedef NTSTATUS
-(NTAPI *PGPE_ENABLE_EVENT2)(
- PVOID Context,
- PVOID ObjectContext);
-
-typedef NTSTATUS
-(NTAPI *PGPE_DISABLE_EVENT2)(
- PVOID Context,
- PVOID ObjectContext);
-
-typedef NTSTATUS
-(NTAPI *PGPE_CLEAR_STATUS2)(
- PVOID Context,
- PVOID ObjectContext);
-
-typedef VOID
-(NTAPI *PDEVICE_NOTIFY_CALLBACK2)(
- PVOID NotificationContext,
- ULONG NotifyCode);
-
-typedef NTSTATUS
-(NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
- PVOID Context,
- PDEVICE_NOTIFY_CALLBACK2 NotificationHandler,
- PVOID NotificationContext);
-
-typedef VOID
-(NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
- PVOID Context);
-
-typedef struct _ACPI_INTERFACE_STANDARD2 {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PGPE_CONNECT_VECTOR2 GpeConnectVector;
- PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector;
- PGPE_ENABLE_EVENT2 GpeEnableEvent;
- PGPE_DISABLE_EVENT2 GpeDisableEvent;
- PGPE_CLEAR_STATUS2 GpeClearStatus;
- PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications;
- PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications;
-} ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2;
+typedef enum _WORK_QUEUE_TYPE {
+ CriticalWorkQueue,
+ DelayedWorkQueue,
+ HyperCriticalWorkQueue,
+ MaximumWorkQueue
+} WORK_QUEUE_TYPE;
#if !defined(_AMD64_) && !defined(_IA64_)
#include <pshpack4.h>
#define SL_INVOKE_ON_SUCCESS 0x40
#define SL_INVOKE_ON_ERROR 0x80
+/* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
+
+#define PCI_WHICHSPACE_CONFIG 0x0
+#define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
+
#define METHOD_BUFFERED 0
#define METHOD_IN_DIRECT 1
#define METHOD_OUT_DIRECT 2
/* end winnt.h */
-#define WMIREG_ACTION_REGISTER 1
-#define WMIREG_ACTION_DEREGISTER 2
-#define WMIREG_ACTION_REREGISTER 3
-#define WMIREG_ACTION_UPDATE_GUIDS 4
-#define WMIREG_ACTION_BLOCK_IRPS 5
-
-#define WMIREGISTER 0
-#define WMIUPDATE 1
+/******************************************************************************
+ * Object Manager Types *
+ ******************************************************************************/
-typedef VOID
-(NTAPI FWMI_NOTIFICATION_CALLBACK)(
- PVOID Wnode,
- PVOID Context);
-typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK;
+typedef struct _OBJECT_NAME_INFORMATION {
+ UNICODE_STRING Name;
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
-#ifndef _PCI_X_
-#define _PCI_X_
+/* Exported object types */
+extern POBJECT_TYPE NTSYSAPI CmKeyObjectType;
+extern POBJECT_TYPE NTSYSAPI ExEventObjectType;
+extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType;
+extern POBJECT_TYPE NTSYSAPI IoFileObjectType;
+extern POBJECT_TYPE NTSYSAPI PsThreadType;
+extern POBJECT_TYPE NTSYSAPI SeTokenObjectType;
+extern POBJECT_TYPE NTSYSAPI PsProcessType;
-typedef struct _PCI_SLOT_NUMBER {
- union {
- struct {
- ULONG DeviceNumber:5;
- ULONG FunctionNumber:3;
- ULONG Reserved:24;
- } bits;
- ULONG AsULONG;
- } u;
-} PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
-#define PCI_TYPE0_ADDRESSES 6
-#define PCI_TYPE1_ADDRESSES 2
-#define PCI_TYPE2_ADDRESSES 5
+/******************************************************************************
+ * Process Manager Types *
+ ******************************************************************************/
-typedef struct _PCI_COMMON_HEADER {
- PCI_COMMON_HEADER_LAYOUT
-} PCI_COMMON_HEADER, *PPCI_COMMON_HEADER;
+#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
+#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
+#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
+#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
+#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
-#ifdef __cplusplus
-typedef struct _PCI_COMMON_CONFIG {
- PCI_COMMON_HEADER_LAYOUT
- UCHAR DeviceSpecific[192];
-} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
-#else
-typedef struct _PCI_COMMON_CONFIG {
- PCI_COMMON_HEADER DUMMYSTRUCTNAME;
- UCHAR DeviceSpecific[192];
-} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
-#endif
+/* Process Qoutas */
+typedef struct _QUOTA_LIMITS {
+ SIZE_T PagedPoolLimit;
+ SIZE_T NonPagedPoolLimit;
+ SIZE_T MinimumWorkingSetSize;
+ SIZE_T MaximumWorkingSetSize;
+ SIZE_T PagefileLimit;
+ LARGE_INTEGER TimeLimit;
+} QUOTA_LIMITS, *PQUOTA_LIMITS;
-#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
+/* Thread Access Rights */
+#define THREAD_TERMINATE 0x0001
+#define THREAD_SUSPEND_RESUME 0x0002
+#define THREAD_ALERT 0x0004
+#define THREAD_GET_CONTEXT 0x0008
+#define THREAD_SET_CONTEXT 0x0010
+#define THREAD_SET_INFORMATION 0x0020
+#define THREAD_SET_LIMITED_INFORMATION 0x0400
+#define THREAD_QUERY_LIMITED_INFORMATION 0x0800
-#define PCI_EXTENDED_CONFIG_LENGTH 0x1000
+#define PROCESS_DUP_HANDLE (0x0040)
-#define PCI_MAX_DEVICES 32
-#define PCI_MAX_FUNCTION 8
-#define PCI_MAX_BRIDGE_NUMBER 0xFF
-#define PCI_INVALID_VENDORID 0xFFFF
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
+#else
+#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
+#endif
-/* PCI_COMMON_CONFIG.HeaderType */
-#define PCI_MULTIFUNCTION 0x80
-#define PCI_DEVICE_TYPE 0x00
-#define PCI_BRIDGE_TYPE 0x01
-#define PCI_CARDBUS_BRIDGE_TYPE 0x02
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
+#else
+#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
+#endif
-#define PCI_CONFIGURATION_TYPE(PciData) \
- (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
+#define ES_SYSTEM_REQUIRED 0x00000001
+#define ES_DISPLAY_REQUIRED 0x00000002
+#define ES_USER_PRESENT 0x00000004
+#define ES_CONTINUOUS 0x80000000
-#define PCI_MULTIFUNCTION_DEVICE(PciData) \
- ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
+#define LOW_PRIORITY 0
+#define LOW_REALTIME_PRIORITY 16
+#define HIGH_PRIORITY 31
+#define MAXIMUM_PRIORITY 32
-/* PCI_COMMON_CONFIG.Command */
-#define PCI_ENABLE_IO_SPACE 0x0001
-#define PCI_ENABLE_MEMORY_SPACE 0x0002
-#define PCI_ENABLE_BUS_MASTER 0x0004
-#define PCI_ENABLE_SPECIAL_CYCLES 0x0008
-#define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
-#define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
-#define PCI_ENABLE_PARITY 0x0040
-#define PCI_ENABLE_WAIT_CYCLE 0x0080
-#define PCI_ENABLE_SERR 0x0100
-#define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
-#define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
-/* PCI_COMMON_CONFIG.Status */
-#define PCI_STATUS_INTERRUPT_PENDING 0x0008
-#define PCI_STATUS_CAPABILITIES_LIST 0x0010
-#define PCI_STATUS_66MHZ_CAPABLE 0x0020
-#define PCI_STATUS_UDF_SUPPORTED 0x0040
-#define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
-#define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
-#define PCI_STATUS_DEVSEL 0x0600
-#define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
-#define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
-#define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
-#define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
-#define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
+#ifdef _X86_
+/** Kernel definitions for x86 **/
-/* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
+/* Interrupt request levels */
+#define PASSIVE_LEVEL 0
+#define LOW_LEVEL 0
+#define APC_LEVEL 1
+#define DISPATCH_LEVEL 2
+#define CMCI_LEVEL 5
+#define PROFILE_LEVEL 27
+#define CLOCK1_LEVEL 28
+#define CLOCK2_LEVEL 28
+#define IPI_LEVEL 29
+#define POWER_LEVEL 30
+#define HIGH_LEVEL 31
+#define CLOCK_LEVEL CLOCK2_LEVEL
-#define PCI_WHICHSPACE_CONFIG 0x0
-#define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
+#define KIP0PCRADDRESS 0xffdff000
+#define KI_USER_SHARED_DATA 0xffdf0000
+#define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
-#define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
-#define PCI_CAPABILITY_ID_AGP 0x02
-#define PCI_CAPABILITY_ID_VPD 0x03
-#define PCI_CAPABILITY_ID_SLOT_ID 0x04
-#define PCI_CAPABILITY_ID_MSI 0x05
-#define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
-#define PCI_CAPABILITY_ID_PCIX 0x07
-#define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
-#define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
-#define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
-#define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
-#define PCI_CAPABILITY_ID_SHPC 0x0C
-#define PCI_CAPABILITY_ID_P2P_SSID 0x0D
-#define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
-#define PCI_CAPABILITY_ID_SECURE 0x0F
-#define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
-#define PCI_CAPABILITY_ID_MSIX 0x11
-
-typedef struct _PCI_CAPABILITIES_HEADER {
- UCHAR CapabilityID;
- UCHAR Next;
-} PCI_CAPABILITIES_HEADER, *PPCI_CAPABILITIES_HEADER;
-
-typedef struct _PCI_PMC {
- UCHAR Version:3;
- UCHAR PMEClock:1;
- UCHAR Rsvd1:1;
- UCHAR DeviceSpecificInitialization:1;
- UCHAR Rsvd2:2;
- struct _PM_SUPPORT {
- UCHAR Rsvd2:1;
- UCHAR D1:1;
- UCHAR D2:1;
- UCHAR PMED0:1;
- UCHAR PMED1:1;
- UCHAR PMED2:1;
- UCHAR PMED3Hot:1;
- UCHAR PMED3Cold:1;
- } Support;
-} PCI_PMC, *PPCI_PMC;
-
-typedef struct _PCI_PMCSR {
- USHORT PowerState:2;
- USHORT Rsvd1:6;
- USHORT PMEEnable:1;
- USHORT DataSelect:4;
- USHORT DataScale:2;
- USHORT PMEStatus:1;
-} PCI_PMCSR, *PPCI_PMCSR;
-
-typedef struct _PCI_PMCSR_BSE {
- UCHAR Rsvd1:6;
- UCHAR D3HotSupportsStopClock:1;
- UCHAR BusPowerClockControlEnabled:1;
-} PCI_PMCSR_BSE, *PPCI_PMCSR_BSE;
-
-typedef struct _PCI_PM_CAPABILITY {
- PCI_CAPABILITIES_HEADER Header;
- union {
- PCI_PMC Capabilities;
- USHORT AsUSHORT;
- } PMC;
- union {
- PCI_PMCSR ControlStatus;
- USHORT AsUSHORT;
- } PMCSR;
- union {
- PCI_PMCSR_BSE BridgeSupport;
- UCHAR AsUCHAR;
- } PMCSR_BSE;
- UCHAR Data;
-} PCI_PM_CAPABILITY, *PPCI_PM_CAPABILITY;
+#define PAGE_SIZE 0x1000
+#define PAGE_SHIFT 12L
+#define KeGetDcacheFillSize() 1L
-typedef struct {
- PCI_CAPABILITIES_HEADER Header;
- union {
- struct {
- USHORT DataParityErrorRecoveryEnable:1;
- USHORT EnableRelaxedOrdering:1;
- USHORT MaxMemoryReadByteCount:2;
- USHORT MaxOutstandingSplitTransactions:3;
- USHORT Reserved:9;
- } bits;
- USHORT AsUSHORT;
- } Command;
- union {
- struct {
- ULONG FunctionNumber:3;
- ULONG DeviceNumber:5;
- ULONG BusNumber:8;
- ULONG Device64Bit:1;
- ULONG Capable133MHz:1;
- ULONG SplitCompletionDiscarded:1;
- ULONG UnexpectedSplitCompletion:1;
- ULONG DeviceComplexity:1;
- ULONG DesignedMaxMemoryReadByteCount:2;
- ULONG DesignedMaxOutstandingSplitTransactions:3;
- ULONG DesignedMaxCumulativeReadSize:3;
- ULONG ReceivedSplitCompletionErrorMessage:1;
- ULONG CapablePCIX266:1;
- ULONG CapablePCIX533:1;
- } bits;
- ULONG AsULONG;
- } Status;
-} PCI_X_CAPABILITY, *PPCI_X_CAPABILITY;
-
-#define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
-#define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
-#define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
-#define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
-#define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
-#define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
-#define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
-#define PCI_EXPRESS_MFVC_CAP_ID 0x0008
-#define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
-#define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
-#define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
-
-typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER {
- USHORT CapabilityID;
- USHORT Version:4;
- USHORT Next:12;
-} PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER;
-
-typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- ULONG LowSerialNumber;
- ULONG HighSerialNumber;
-} PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY;
-
-typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS {
- struct {
- ULONG Undefined:1;
- ULONG Reserved1:3;
- ULONG DataLinkProtocolError:1;
- ULONG SurpriseDownError:1;
- ULONG Reserved2:6;
- ULONG PoisonedTLP:1;
- ULONG FlowControlProtocolError:1;
- ULONG CompletionTimeout:1;
- ULONG CompleterAbort:1;
- ULONG UnexpectedCompletion:1;
- ULONG ReceiverOverflow:1;
- ULONG MalformedTLP:1;
- ULONG ECRCError:1;
- ULONG UnsupportedRequestError:1;
- ULONG Reserved3:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS;
+#define EFLAG_SIGN 0x8000
+#define EFLAG_ZERO 0x4000
+#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
-typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK {
- struct {
- ULONG Undefined:1;
- ULONG Reserved1:3;
- ULONG DataLinkProtocolError:1;
- ULONG SurpriseDownError:1;
- ULONG Reserved2:6;
- ULONG PoisonedTLP:1;
- ULONG FlowControlProtocolError:1;
- ULONG CompletionTimeout:1;
- ULONG CompleterAbort:1;
- ULONG UnexpectedCompletion:1;
- ULONG ReceiverOverflow:1;
- ULONG MalformedTLP:1;
- ULONG ECRCError:1;
- ULONG UnsupportedRequestError:1;
- ULONG Reserved3:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK;
+#define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+#define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
+#define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
-typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY {
- struct {
- ULONG Undefined:1;
- ULONG Reserved1:3;
- ULONG DataLinkProtocolError:1;
- ULONG SurpriseDownError:1;
- ULONG Reserved2:6;
- ULONG PoisonedTLP:1;
- ULONG FlowControlProtocolError:1;
- ULONG CompletionTimeout:1;
- ULONG CompleterAbort:1;
- ULONG UnexpectedCompletion:1;
- ULONG ReceiverOverflow:1;
- ULONG MalformedTLP:1;
- ULONG ECRCError:1;
- ULONG UnsupportedRequestError:1;
- ULONG Reserved3:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY;
-typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS {
- struct {
- ULONG ReceiverError:1;
- ULONG Reserved1:5;
- ULONG BadTLP:1;
- ULONG BadDLLP:1;
- ULONG ReplayNumRollover:1;
- ULONG Reserved2:3;
- ULONG ReplayTimerTimeout:1;
- ULONG AdvisoryNonFatalError:1;
- ULONG Reserved3:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_CORRECTABLE_ERROR_STATUS, *PPCI_CORRECTABLE_ERROR_STATUS;
+typedef struct _KFLOATING_SAVE {
+ ULONG ControlWord;
+ ULONG StatusWord;
+ ULONG ErrorOffset;
+ ULONG ErrorSelector;
+ ULONG DataOffset;
+ ULONG DataSelector;
+ ULONG Cr0NpxState;
+ ULONG Spare1;
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
-typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK {
- struct {
- ULONG ReceiverError:1;
- ULONG Reserved1:5;
- ULONG BadTLP:1;
- ULONG BadDLLP:1;
- ULONG ReplayNumRollover:1;
- ULONG Reserved2:3;
- ULONG ReplayTimerTimeout:1;
- ULONG AdvisoryNonFatalError:1;
- ULONG Reserved3:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_CORRECTABLE_ERROR_MASK, *PPCI_CORRECTABLE_ERROR_MASK;
+extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
-typedef union _PCI_EXPRESS_AER_CAPABILITIES {
- struct {
- ULONG FirstErrorPointer:5;
- ULONG ECRCGenerationCapable:1;
- ULONG ECRCGenerationEnable:1;
- ULONG ECRCCheckCapable:1;
- ULONG ECRCCheckEnable:1;
- ULONG Reserved:23;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_AER_CAPABILITIES, *PPCI_EXPRESS_AER_CAPABILITIES;
+#define YieldProcessor _mm_pause
-typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND {
- struct {
- ULONG CorrectableErrorReportingEnable:1;
- ULONG NonFatalErrorReportingEnable:1;
- ULONG FatalErrorReportingEnable:1;
- ULONG Reserved:29;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_ROOT_ERROR_COMMAND, *PPCI_EXPRESS_ROOT_ERROR_COMMAND;
+FORCEINLINE
+VOID
+KeMemoryBarrier(VOID)
+{
+ volatile LONG Barrier;
+#if defined(__GNUC__)
+ __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
+#elif defined(_MSC_VER)
+ __asm xchg [Barrier], eax
+#endif
+}
-typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS {
- struct {
- ULONG CorrectableErrorReceived:1;
- ULONG MultipleCorrectableErrorsReceived:1;
- ULONG UncorrectableErrorReceived:1;
- ULONG MultipleUncorrectableErrorsReceived:1;
- ULONG FirstUncorrectableFatal:1;
- ULONG NonFatalErrorMessagesReceived:1;
- ULONG FatalErrorMessagesReceived:1;
- ULONG Reserved:20;
- ULONG AdvancedErrorInterruptMessageNumber:5;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_ROOT_ERROR_STATUS, *PPCI_EXPRESS_ROOT_ERROR_STATUS;
+NTHALAPI
+KIRQL
+NTAPI
+KeGetCurrentIrql(VOID);
-typedef union _PCI_EXPRESS_ERROR_SOURCE_ID {
- struct {
- USHORT CorrectableSourceIdFun:3;
- USHORT CorrectableSourceIdDev:5;
- USHORT CorrectableSourceIdBus:8;
- USHORT UncorrectableSourceIdFun:3;
- USHORT UncorrectableSourceIdDev:5;
- USHORT UncorrectableSourceIdBus:8;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_ERROR_SOURCE_ID, *PPCI_EXPRESS_ERROR_SOURCE_ID;
+NTHALAPI
+VOID
+FASTCALL
+KfLowerIrql(
+ IN KIRQL NewIrql);
+#define KeLowerIrql(a) KfLowerIrql(a)
-typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS {
- struct {
- ULONG TargetAbortOnSplitCompletion:1;
- ULONG MasterAbortOnSplitCompletion:1;
- ULONG ReceivedTargetAbort:1;
- ULONG ReceivedMasterAbort:1;
- ULONG RsvdZ:1;
- ULONG UnexpectedSplitCompletionError:1;
- ULONG UncorrectableSplitCompletion:1;
- ULONG UncorrectableDataError:1;
- ULONG UncorrectableAttributeError:1;
- ULONG UncorrectableAddressError:1;
- ULONG DelayedTransactionDiscardTimerExpired:1;
- ULONG PERRAsserted:1;
- ULONG SERRAsserted:1;
- ULONG InternalBridgeError:1;
- ULONG Reserved:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS;
+NTHALAPI
+KIRQL
+FASTCALL
+KfRaiseIrql(
+ IN KIRQL NewIrql);
+#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
-typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK {
- struct {
- ULONG TargetAbortOnSplitCompletion:1;
- ULONG MasterAbortOnSplitCompletion:1;
- ULONG ReceivedTargetAbort:1;
- ULONG ReceivedMasterAbort:1;
- ULONG RsvdZ:1;
- ULONG UnexpectedSplitCompletionError:1;
- ULONG UncorrectableSplitCompletion:1;
- ULONG UncorrectableDataError:1;
- ULONG UncorrectableAttributeError:1;
- ULONG UncorrectableAddressError:1;
- ULONG DelayedTransactionDiscardTimerExpired:1;
- ULONG PERRAsserted:1;
- ULONG SERRAsserted:1;
- ULONG InternalBridgeError:1;
- ULONG Reserved:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK;
+NTHALAPI
+KIRQL
+NTAPI
+KeRaiseIrqlToDpcLevel(VOID);
-typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY {
- struct {
- ULONG TargetAbortOnSplitCompletion:1;
- ULONG MasterAbortOnSplitCompletion:1;
- ULONG ReceivedTargetAbort:1;
- ULONG ReceivedMasterAbort:1;
- ULONG RsvdZ:1;
- ULONG UnexpectedSplitCompletionError:1;
- ULONG UncorrectableSplitCompletion:1;
- ULONG UncorrectableDataError:1;
- ULONG UncorrectableAttributeError:1;
- ULONG UncorrectableAddressError:1;
- ULONG DelayedTransactionDiscardTimerExpired:1;
- ULONG PERRAsserted:1;
- ULONG SERRAsserted:1;
- ULONG InternalBridgeError:1;
- ULONG Reserved:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY;
+NTHALAPI
+KIRQL
+NTAPI
+KeRaiseIrqlToSynchLevel(VOID);
-typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES {
- struct {
- ULONG SecondaryUncorrectableFirstErrorPtr:5;
- ULONG Reserved:27;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_SEC_AER_CAPABILITIES, *PPCI_EXPRESS_SEC_AER_CAPABILITIES;
-
-#define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
-#define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
-#define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
-
-#define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
- (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
- ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
- ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
-
-typedef struct _PCI_EXPRESS_AER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
- PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
- PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
- PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
- ULONG HeaderLog[4];
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
- PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
- ULONG SecHeaderLog[4];
-} PCI_EXPRESS_AER_CAPABILITY, *PPCI_EXPRESS_AER_CAPABILITY;
-
-typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
- PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
- PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
- PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
- ULONG HeaderLog[4];
- PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand;
- PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus;
- PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId;
-} PCI_EXPRESS_ROOTPORT_AER_CAPABILITY, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY;
-
-typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
- PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
- PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
- PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
- ULONG HeaderLog[4];
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
- PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
- ULONG SecHeaderLog[4];
-} PCI_EXPRESS_BRIDGE_AER_CAPABILITY, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY;
-
-typedef union _PCI_EXPRESS_SRIOV_CAPS {
- struct {
- ULONG VFMigrationCapable:1;
- ULONG Reserved1:20;
- ULONG VFMigrationInterruptNumber:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_SRIOV_CAPS, *PPCI_EXPRESS_SRIOV_CAPS;
+NTHALAPI
+KIRQL
+FASTCALL
+KfAcquireSpinLock(
+ IN OUT PKSPIN_LOCK SpinLock);
+#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
-typedef union _PCI_EXPRESS_SRIOV_CONTROL {
- struct {
- USHORT VFEnable:1;
- USHORT VFMigrationEnable:1;
- USHORT VFMigrationInterruptEnable:1;
- USHORT VFMemorySpaceEnable:1;
- USHORT ARICapableHierarchy:1;
- USHORT Reserved1:11;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_SRIOV_CONTROL, *PPCI_EXPRESS_SRIOV_CONTROL;
+NTHALAPI
+VOID
+FASTCALL
+KfReleaseSpinLock(
+ IN OUT PKSPIN_LOCK SpinLock,
+ IN KIRQL NewIrql);
+#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
-typedef union _PCI_EXPRESS_SRIOV_STATUS {
- struct {
- USHORT VFMigrationStatus:1;
- USHORT Reserved1:15;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
-} PCI_EXPRESS_SRIOV_STATUS, *PPCI_EXPRESS_SRIOV_STATUS;
+NTKERNELAPI
+VOID
+FASTCALL
+KefAcquireSpinLockAtDpcLevel(
+ IN OUT PKSPIN_LOCK SpinLock);
+#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
-typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY {
- struct {
- ULONG VFMigrationStateBIR:3;
- ULONG VFMigrationStateOffset:29;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
-} PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY;
-
-typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities;
- PCI_EXPRESS_SRIOV_CONTROL SRIOVControl;
- PCI_EXPRESS_SRIOV_STATUS SRIOVStatus;
- USHORT InitialVFs;
- USHORT TotalVFs;
- USHORT NumVFs;
- UCHAR FunctionDependencyLink;
- UCHAR RsvdP1;
- USHORT FirstVFOffset;
- USHORT VFStride;
- USHORT RsvdP2;
- USHORT VFDeviceId;
- ULONG SupportedPageSizes;
- ULONG SystemPageSize;
- ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
- PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset;
-} PCI_EXPRESS_SRIOV_CAPABILITY, *PPCI_EXPRESS_SRIOV_CAPABILITY;
+NTKERNELAPI
+VOID
+FASTCALL
+KefReleaseSpinLockFromDpcLevel(
+ IN OUT PKSPIN_LOCK SpinLock);
+#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
-/* PCI device classes */
-#define PCI_CLASS_PRE_20 0x00
-#define PCI_CLASS_MASS_STORAGE_CTLR 0x01
-#define PCI_CLASS_NETWORK_CTLR 0x02
-#define PCI_CLASS_DISPLAY_CTLR 0x03
-#define PCI_CLASS_MULTIMEDIA_DEV 0x04
-#define PCI_CLASS_MEMORY_CTLR 0x05
-#define PCI_CLASS_BRIDGE_DEV 0x06
-#define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
-#define PCI_CLASS_BASE_SYSTEM_DEV 0x08
-#define PCI_CLASS_INPUT_DEV 0x09
-#define PCI_CLASS_DOCKING_STATION 0x0a
-#define PCI_CLASS_PROCESSOR 0x0b
-#define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
-#define PCI_CLASS_WIRELESS_CTLR 0x0d
-#define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
-#define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
-#define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
-#define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
-#define PCI_CLASS_NOT_DEFINED 0xff
+NTSYSAPI
+PKTHREAD
+NTAPI
+KeGetCurrentThread(VOID);
-/* PCI device subclasses for class 0 */
-#define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
-#define PCI_SUBCLASS_PRE_20_VGA 0x01
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeSaveFloatingPointState(
+ OUT PKFLOATING_SAVE FloatSave);
-/* PCI device subclasses for class 1 (mass storage controllers)*/
-#define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
-#define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
-#define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
-#define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
-#define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
-#define PCI_SUBCLASS_MSC_OTHER 0x80
-
-/* PCI device subclasses for class 2 (network controllers)*/
-#define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
-#define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
-#define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
-#define PCI_SUBCLASS_NET_ATM_CTLR 0x03
-#define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
-#define PCI_SUBCLASS_NET_OTHER 0x80
-
-/* PCI device subclasses for class 3 (display controllers)*/
-#define PCI_SUBCLASS_VID_VGA_CTLR 0x00
-#define PCI_SUBCLASS_VID_XGA_CTLR 0x01
-#define PCI_SUBCLASS_VID_3D_CTLR 0x02
-#define PCI_SUBCLASS_VID_OTHER 0x80
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeRestoreFloatingPointState(
+ IN PKFLOATING_SAVE FloatSave);
-/* PCI device subclasses for class 4 (multimedia device)*/
-#define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
-#define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
-#define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
-#define PCI_SUBCLASS_MM_OTHER 0x80
+/* VOID
+ * KeFlushIoBuffers(
+ * IN PMDL Mdl,
+ * IN BOOLEAN ReadOperation,
+ * IN BOOLEAN DmaOperation)
+ */
+#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
-/* PCI device subclasses for class 5 (memory controller)*/
-#define PCI_SUBCLASS_MEM_RAM 0x00
-#define PCI_SUBCLASS_MEM_FLASH 0x01
-#define PCI_SUBCLASS_MEM_OTHER 0x80
+/* x86 and x64 performs a 0x2C interrupt */
+#define DbgRaiseAssertionFailure __int2c
-/* PCI device subclasses for class 6 (bridge device)*/
-#define PCI_SUBCLASS_BR_HOST 0x00
-#define PCI_SUBCLASS_BR_ISA 0x01
-#define PCI_SUBCLASS_BR_EISA 0x02
-#define PCI_SUBCLASS_BR_MCA 0x03
-#define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
-#define PCI_SUBCLASS_BR_PCMCIA 0x05
-#define PCI_SUBCLASS_BR_NUBUS 0x06
-#define PCI_SUBCLASS_BR_CARDBUS 0x07
-#define PCI_SUBCLASS_BR_RACEWAY 0x08
-#define PCI_SUBCLASS_BR_OTHER 0x80
+FORCEINLINE
+VOID
+_KeQueryTickCount(
+ OUT PLARGE_INTEGER CurrentCount)
+{
+ for (;;) {
+ CurrentCount->HighPart = KeTickCount.High1Time;
+ CurrentCount->LowPart = KeTickCount.LowPart;
+ if (CurrentCount->HighPart == KeTickCount.High2Time) break;
+ YieldProcessor();
+ }
+}
+#define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
-#define PCI_SUBCLASS_COM_SERIAL 0x00
-#define PCI_SUBCLASS_COM_PARALLEL 0x01
-#define PCI_SUBCLASS_COM_MULTIPORT 0x02
-#define PCI_SUBCLASS_COM_MODEM 0x03
-#define PCI_SUBCLASS_COM_OTHER 0x80
-
-#define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
-#define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
-#define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
-#define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
-#define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
-#define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
-#define PCI_SUBCLASS_SYS_OTHER 0x80
-
-#define PCI_SUBCLASS_INP_KEYBOARD 0x00
-#define PCI_SUBCLASS_INP_DIGITIZER 0x01
-#define PCI_SUBCLASS_INP_MOUSE 0x02
-#define PCI_SUBCLASS_INP_SCANNER 0x03
-#define PCI_SUBCLASS_INP_GAMEPORT 0x04
-#define PCI_SUBCLASS_INP_OTHER 0x80
-
-#define PCI_SUBCLASS_DOC_GENERIC 0x00
-#define PCI_SUBCLASS_DOC_OTHER 0x80
-
-#define PCI_SUBCLASS_PROC_386 0x00
-#define PCI_SUBCLASS_PROC_486 0x01
-#define PCI_SUBCLASS_PROC_PENTIUM 0x02
-#define PCI_SUBCLASS_PROC_ALPHA 0x10
-#define PCI_SUBCLASS_PROC_POWERPC 0x20
-#define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
+#endif /* _X86_ */
-/* PCI device subclasses for class C (serial bus controller)*/
-#define PCI_SUBCLASS_SB_IEEE1394 0x00
-#define PCI_SUBCLASS_SB_ACCESS 0x01
-#define PCI_SUBCLASS_SB_SSA 0x02
-#define PCI_SUBCLASS_SB_USB 0x03
-#define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
-#define PCI_SUBCLASS_SB_SMBUS 0x05
-#define PCI_SUBCLASS_WIRELESS_IRDA 0x00
-#define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
-#define PCI_SUBCLASS_WIRELESS_RF 0x10
-#define PCI_SUBCLASS_WIRELESS_OTHER 0x80
-#define PCI_SUBCLASS_INTIO_I2O 0x00
-#define PCI_SUBCLASS_SAT_TV 0x01
-#define PCI_SUBCLASS_SAT_AUDIO 0x02
-#define PCI_SUBCLASS_SAT_VOICE 0x03
-#define PCI_SUBCLASS_SAT_DATA 0x04
+FORCEINLINE
+VOID
+InitializeListHead(
+ OUT PLIST_ENTRY ListHead)
+{
+ ListHead->Flink = ListHead->Blink = ListHead;
+}
-#define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
-#define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
-#define PCI_SUBCLASS_CRYPTO_OTHER 0x80
+FORCEINLINE
+VOID
+InsertHeadList(
+ IN OUT PLIST_ENTRY ListHead,
+ IN OUT PLIST_ENTRY Entry)
+{
+ PLIST_ENTRY OldFlink;
+ OldFlink = ListHead->Flink;
+ Entry->Flink = OldFlink;
+ Entry->Blink = ListHead;
+ OldFlink->Blink = Entry;
+ ListHead->Flink = Entry;
+}
-#define PCI_SUBCLASS_DASP_DPIO 0x00
-#define PCI_SUBCLASS_DASP_OTHER 0x80
+FORCEINLINE
+VOID
+InsertTailList(
+ IN OUT PLIST_ENTRY ListHead,
+ IN OUT PLIST_ENTRY Entry)
+{
+ PLIST_ENTRY OldBlink;
+ OldBlink = ListHead->Blink;
+ Entry->Flink = ListHead;
+ Entry->Blink = OldBlink;
+ OldBlink->Flink = Entry;
+ ListHead->Blink = Entry;
+}
-#define PCI_ADDRESS_IO_SPACE 0x00000001
-#define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
-#define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
-#define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
-#define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
-#define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
+BOOLEAN
+FORCEINLINE
+IsListEmpty(
+ IN CONST LIST_ENTRY * ListHead)
+{
+ return (BOOLEAN)(ListHead->Flink == ListHead);
+}
-#define PCI_TYPE_32BIT 0
-#define PCI_TYPE_20BIT 2
-#define PCI_TYPE_64BIT 4
+FORCEINLINE
+PSINGLE_LIST_ENTRY
+PopEntryList(
+ IN OUT PSINGLE_LIST_ENTRY ListHead)
+{
+ PSINGLE_LIST_ENTRY FirstEntry;
+ FirstEntry = ListHead->Next;
+ if (FirstEntry != NULL) {
+ ListHead->Next = FirstEntry->Next;
+ }
+ return FirstEntry;
+}
-#define PCI_ROMADDRESS_ENABLED 0x00000001
+FORCEINLINE
+VOID
+PushEntryList(
+ IN OUT PSINGLE_LIST_ENTRY ListHead,
+ IN OUT PSINGLE_LIST_ENTRY Entry)
+{
+ Entry->Next = ListHead->Next;
+ ListHead->Next = Entry;
+}
-#endif /* _PCI_X_ */
+FORCEINLINE
+BOOLEAN
+RemoveEntryList(
+ IN PLIST_ENTRY Entry)
+{
+ PLIST_ENTRY OldFlink;
+ PLIST_ENTRY OldBlink;
-#define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
+ OldFlink = Entry->Flink;
+ OldBlink = Entry->Blink;
+ OldFlink->Blink = OldBlink;
+ OldBlink->Flink = OldFlink;
+ return (BOOLEAN)(OldFlink == OldBlink);
+}
-typedef NTSTATUS
-(NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)(
- IN OUT PVOID Context);
-typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE;
+FORCEINLINE
+PLIST_ENTRY
+RemoveHeadList(
+ IN OUT PLIST_ENTRY ListHead)
+{
+ PLIST_ENTRY Flink;
+ PLIST_ENTRY Entry;
-typedef NTSTATUS
-(NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)(
- IN OUT PVOID Context);
-typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE;
+ Entry = ListHead->Flink;
+ Flink = Entry->Flink;
+ ListHead->Flink = Flink;
+ Flink->Blink = ListHead;
+ return Entry;
+}
-typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode;
- PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode;
-} PCI_EXPRESS_LINK_QUIESCENT_INTERFACE, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE;
+FORCEINLINE
+PLIST_ENTRY
+RemoveTailList(
+ IN OUT PLIST_ENTRY ListHead)
+{
+ PLIST_ENTRY Blink;
+ PLIST_ENTRY Entry;
-#define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
+ Entry = ListHead->Blink;
+ Blink = Entry->Blink;
+ ListHead->Blink = Blink;
+ Blink->Flink = ListHead;
+ return Entry;
+}
-typedef ULONG
-(NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)(
- IN PVOID Context,
- OUT PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
+NTSYSAPI
+VOID
+NTAPI
+RtlAssert(
+ IN PVOID FailedAssertion,
+ IN PVOID FileName,
+ IN ULONG LineNumber,
+ IN PSTR Message);
-typedef ULONG
-(NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)(
- IN PVOID Context,
- IN PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
+/* VOID
+ * RtlCopyMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+#define RtlCopyMemory(Destination, Source, Length) \
+ memcpy(Destination, Source, Length)
-typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace;
- PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace;
-} PCI_EXPRESS_ROOT_PORT_INTERFACE, *PPCI_EXPRESS_ROOT_PORT_INTERFACE;
+#define RtlCopyBytes RtlCopyMemory
-#define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
+#if defined(_M_AMD64)
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyMemoryNonTemporal(
+ VOID UNALIGNED *Destination,
+ CONST VOID UNALIGNED *Source,
+ SIZE_T Length);
+#else
+#define RtlCopyMemoryNonTemporal RtlCopyMemory
+#endif
-typedef NTSTATUS
-(NTAPI PCI_MSIX_SET_ENTRY)(
- IN PVOID Context,
- IN ULONG TableEntry,
- IN ULONG MessageNumber);
-typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY;
+/* BOOLEAN
+ * RtlEqualLuid(
+ * IN PLUID Luid1,
+ * IN PLUID Luid2)
+ */
+#define RtlEqualLuid(Luid1, Luid2) \
+ (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
-typedef NTSTATUS
-(NTAPI PCI_MSIX_MASKUNMASK_ENTRY)(
- IN PVOID Context,
- IN ULONG TableEntry);
-typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY;
+/* ULONG
+ * RtlEqualMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+#define RtlEqualMemory(Destination, Source, Length) \
+ (!memcmp(Destination, Source, Length))
-typedef NTSTATUS
-(NTAPI PCI_MSIX_GET_ENTRY)(
- IN PVOID Context,
- IN ULONG TableEntry,
- OUT PULONG MessageNumber,
- OUT PBOOLEAN Masked);
-typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY;
+/* VOID
+ * RtlFillMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN SIZE_T Length,
+ * IN UCHAR Fill)
+ */
+#define RtlFillMemory(Destination, Length, Fill) \
+ memset(Destination, Fill, Length)
-typedef NTSTATUS
-(NTAPI PCI_MSIX_GET_TABLE_SIZE)(
- IN PVOID Context,
- OUT PULONG TableSize);
-typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE;
+#define RtlFillBytes RtlFillMemory
-typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_MSIX_SET_ENTRY SetTableEntry;
- PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry;
- PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry;
- PPCI_MSIX_GET_ENTRY GetTableEntry;
- PPCI_MSIX_GET_TABLE_SIZE GetTableSize;
-} PCI_MSIX_TABLE_CONFIG_INTERFACE, *PPCI_MSIX_TABLE_CONFIG_INTERFACE;
-
-#define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
- RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeUnicodeString(
+ IN OUT PUNICODE_STRING UnicodeString);
-/******************************************************************************
- * Object Manager Types *
- ******************************************************************************/
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGUIDFromString(
+ IN PUNICODE_STRING GuidString,
+ OUT GUID *Guid);
-#define MAXIMUM_FILENAME_LENGTH 256
-#define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
-
-#define OBJECT_TYPE_CREATE 0x0001
-#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
-
-#define DIRECTORY_QUERY 0x0001
-#define DIRECTORY_TRAVERSE 0x0002
-#define DIRECTORY_CREATE_OBJECT 0x0004
-#define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
-#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
-
-#define SYMBOLIC_LINK_QUERY 0x0001
-#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
+NTSYSAPI
+VOID
+NTAPI
+RtlInitUnicodeString(
+ IN OUT PUNICODE_STRING DestinationString,
+ IN PCWSTR SourceString OPTIONAL);
-#define DUPLICATE_CLOSE_SOURCE 0x00000001
-#define DUPLICATE_SAME_ACCESS 0x00000002
-#define DUPLICATE_SAME_ATTRIBUTES 0x00000004
+/* VOID
+ * RtlMoveMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+#define RtlMoveMemory(Destination, Source, Length) \
+ memmove(Destination, Source, Length)
-#define OB_FLT_REGISTRATION_VERSION_0100 0x0100
-#define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlStringFromGUID(
+ IN REFGUID Guid,
+ OUT PUNICODE_STRING GuidString);
-typedef ULONG OB_OPERATION;
+/* VOID
+ * RtlZeroMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN SIZE_T Length)
+ */
+#define RtlZeroMemory(Destination, Length) \
+ memset(Destination, 0, Length)
-#define OB_OPERATION_HANDLE_CREATE 0x00000001
-#define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
+#define RtlZeroBytes RtlZeroMemory
-typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION {
- IN OUT ACCESS_MASK DesiredAccess;
- IN ACCESS_MASK OriginalDesiredAccess;
-} OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION;
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
-typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION {
- IN OUT ACCESS_MASK DesiredAccess;
- IN ACCESS_MASK OriginalDesiredAccess;
- IN PVOID SourceProcess;
- IN PVOID TargetProcess;
-} OB_PRE_DUPLICATE_HANDLE_INFORMATION, *POB_PRE_DUPLICATE_HANDLE_INFORMATION;
-typedef union _OB_PRE_OPERATION_PARAMETERS {
- IN OUT OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation;
- IN OUT OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
-} OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS;
-typedef struct _OB_PRE_OPERATION_INFORMATION {
- IN OB_OPERATION Operation;
- union {
- IN ULONG Flags;
- struct {
- IN ULONG KernelHandle:1;
- IN ULONG Reserved:31;
- };
- };
- IN PVOID Object;
- IN POBJECT_TYPE ObjectType;
- OUT PVOID CallContext;
- IN POB_PRE_OPERATION_PARAMETERS Parameters;
-} OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION;
-
-typedef struct _OB_POST_CREATE_HANDLE_INFORMATION {
- IN ACCESS_MASK GrantedAccess;
-} OB_POST_CREATE_HANDLE_INFORMATION, *POB_POST_CREATE_HANDLE_INFORMATION;
-
-typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION {
- IN ACCESS_MASK GrantedAccess;
-} OB_POST_DUPLICATE_HANDLE_INFORMATION, *POB_POST_DUPLICATE_HANDLE_INFORMATION;
-
-typedef union _OB_POST_OPERATION_PARAMETERS {
- IN OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation;
- IN OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
-} OB_POST_OPERATION_PARAMETERS, *POB_POST_OPERATION_PARAMETERS;
-
-typedef struct _OB_POST_OPERATION_INFORMATION {
- IN OB_OPERATION Operation;
- union {
- IN ULONG Flags;
- struct {
- IN ULONG KernelHandle:1;
- IN ULONG Reserved:31;
- };
- };
- IN PVOID Object;
- IN POBJECT_TYPE ObjectType;
- IN PVOID CallContext;
- IN NTSTATUS ReturnStatus;
- IN POB_POST_OPERATION_PARAMETERS Parameters;
-} OB_POST_OPERATION_INFORMATION,*POB_POST_OPERATION_INFORMATION;
-
-typedef enum _OB_PREOP_CALLBACK_STATUS {
- OB_PREOP_SUCCESS
-} OB_PREOP_CALLBACK_STATUS, *POB_PREOP_CALLBACK_STATUS;
-
-typedef OB_PREOP_CALLBACK_STATUS
-(NTAPI *POB_PRE_OPERATION_CALLBACK)(
- IN PVOID RegistrationContext,
- IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation);
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAreBitsClear(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG StartingIndex,
+ IN ULONG Length);
-typedef VOID
-(NTAPI *POB_POST_OPERATION_CALLBACK)(
- IN PVOID RegistrationContext,
- IN POB_POST_OPERATION_INFORMATION OperationInformation);
-
-typedef struct _OB_OPERATION_REGISTRATION {
- IN POBJECT_TYPE *ObjectType;
- IN OB_OPERATION Operations;
- IN POB_PRE_OPERATION_CALLBACK PreOperation;
- IN POB_POST_OPERATION_CALLBACK PostOperation;
-} OB_OPERATION_REGISTRATION, *POB_OPERATION_REGISTRATION;
-
-typedef struct _OB_CALLBACK_REGISTRATION {
- IN USHORT Version;
- IN USHORT OperationRegistrationCount;
- IN UNICODE_STRING Altitude;
- IN PVOID RegistrationContext;
- IN OB_OPERATION_REGISTRATION *OperationRegistration;
-} OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION;
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAreBitsSet(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG StartingIndex,
+ IN ULONG Length);
-typedef struct _OBJECT_NAME_INFORMATION {
- UNICODE_STRING Name;
-} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAnsiStringToUnicodeString(
+ IN OUT PUNICODE_STRING DestinationString,
+ IN PANSI_STRING SourceString,
+ IN BOOLEAN AllocateDestinationString);
-/* Exported object types */
-extern POBJECT_TYPE NTSYSAPI CmKeyObjectType;
-extern POBJECT_TYPE NTSYSAPI ExEventObjectType;
-extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType;
-extern POBJECT_TYPE NTSYSAPI IoFileObjectType;
-extern POBJECT_TYPE NTSYSAPI PsThreadType;
-extern POBJECT_TYPE NTSYSAPI SeTokenObjectType;
-extern POBJECT_TYPE NTSYSAPI PsProcessType;
+NTSYSAPI
+ULONG
+NTAPI
+RtlxAnsiStringToUnicodeSize(
+ IN PCANSI_STRING AnsiString);
+#define RtlAnsiStringToUnicodeSize(String) ( \
+ NLS_MB_CODE_PAGE_TAG ? \
+ RtlxAnsiStringToUnicodeSize(String) : \
+ ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
+)
-/******************************************************************************
- * Process Manager Types *
- ******************************************************************************/
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendUnicodeStringToString(
+ IN OUT PUNICODE_STRING Destination,
+ IN PCUNICODE_STRING Source);
-#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
-#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
-#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
-#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
-#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendUnicodeToString(
+ IN OUT PUNICODE_STRING Destination,
+ IN PCWSTR Source);
-/* Thread Access Rights */
-#define THREAD_TERMINATE 0x0001
-#define THREAD_SUSPEND_RESUME 0x0002
-#define THREAD_ALERT 0x0004
-#define THREAD_GET_CONTEXT 0x0008
-#define THREAD_SET_CONTEXT 0x0010
-#define THREAD_SET_INFORMATION 0x0020
-#define THREAD_SET_LIMITED_INFORMATION 0x0400
-#define THREAD_QUERY_LIMITED_INFORMATION 0x0800
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCheckRegistryKey(
+ IN ULONG RelativeTo,
+ IN PWSTR Path);
-#define PROCESS_DUP_HANDLE (0x0040)
+NTSYSAPI
+VOID
+NTAPI
+RtlClearAllBits(
+ IN PRTL_BITMAP BitMapHeader);
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
-#else
-#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
-#endif
+NTSYSAPI
+VOID
+NTAPI
+RtlClearBits(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG StartingIndex,
+ IN ULONG NumberToClear);
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
-#else
-#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
-#endif
+NTSYSAPI
+SIZE_T
+NTAPI
+RtlCompareMemory(
+ IN CONST VOID *Source1,
+ IN CONST VOID *Source2,
+ IN SIZE_T Length);
-#define LOW_PRIORITY 0
-#define LOW_REALTIME_PRIORITY 16
-#define HIGH_PRIORITY 31
-#define MAXIMUM_PRIORITY 32
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareUnicodeString(
+ IN PCUNICODE_STRING String1,
+ IN PCUNICODE_STRING String2,
+ IN BOOLEAN CaseInSensitive);
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareUnicodeStrings(
+ IN PCWCH String1,
+ IN SIZE_T String1Length,
+ IN PCWCH String2,
+ IN SIZE_T String2Length,
+ IN BOOLEAN CaseInSensitive);
-/******************************************************************************
- * WMI Library Support Types *
- ******************************************************************************/
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyUnicodeString(
+ IN OUT PUNICODE_STRING DestinationString,
+ IN PCUNICODE_STRING SourceString OPTIONAL);
-#ifdef RUN_WPP
-#include <evntrace.h>
-#include <stdarg.h>
-#endif
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateRegistryKey(
+ IN ULONG RelativeTo,
+ IN PWSTR Path);
-#ifndef _TRACEHANDLE_DEFINED
-#define _TRACEHANDLE_DEFINED
-typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
-#endif
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateSecurityDescriptor(
+ IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN ULONG Revision);
-#ifndef TRACE_INFORMATION_CLASS_DEFINE
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteRegistryValue(
+ IN ULONG RelativeTo,
+ IN PCWSTR Path,
+ IN PCWSTR ValueName);
-typedef struct _ETW_TRACE_SESSION_SETTINGS {
- ULONG Version;
- ULONG BufferSize;
- ULONG MinimumBuffers;
- ULONG MaximumBuffers;
- ULONG LoggerMode;
- ULONG FlushTimer;
- ULONG FlushThreshold;
- ULONG ClockType;
-} ETW_TRACE_SESSION_SETTINGS, *PETW_TRACE_SESSION_SETTINGS;
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlEqualUnicodeString(
+ IN CONST UNICODE_STRING *String1,
+ IN CONST UNICODE_STRING *String2,
+ IN BOOLEAN CaseInSensitive);
-typedef enum _TRACE_INFORMATION_CLASS {
- TraceIdClass,
- TraceHandleClass,
- TraceEnableFlagsClass,
- TraceEnableLevelClass,
- GlobalLoggerHandleClass,
- EventLoggerHandleClass,
- AllLoggerHandlesClass,
- TraceHandleByNameClass,
- LoggerEventsLostClass,
- TraceSessionSettingsClass,
- LoggerEventsLoggedClass,
- MaxTraceInformationClass
-} TRACE_INFORMATION_CLASS;
+#if !defined(_AMD64_) && !defined(_IA64_)
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedIntegerMultiply(
+ IN LARGE_INTEGER Multiplicand,
+ IN LONG Multiplier);
-#endif /* TRACE_INFORMATION_CLASS_DEFINE */
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedLargeIntegerDivide(
+ IN LARGE_INTEGER Dividend,
+ IN ULONG Divisor,
+ OUT PULONG Remainder OPTIONAL);
+#endif
-#ifndef _ETW_KM_
-#define _ETW_KM_
+#if defined(_X86_) || defined(_IA64_)
+NTSYSAPI
+LARGE_INTEGER
+NTAPI
+RtlExtendedMagicDivide(
+ IN LARGE_INTEGER Dividend,
+ IN LARGE_INTEGER MagicDivisor,
+ IN CCHAR ShiftCount);
#endif
-#include <evntprov.h>
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeAnsiString(
+ IN PANSI_STRING AnsiString);
-typedef VOID
-(NTAPI *PETWENABLECALLBACK)(
- IN LPCGUID SourceId,
- IN ULONG ControlCode,
- IN UCHAR Level,
- IN ULONGLONG MatchAnyKeyword,
- IN ULONGLONG MatchAllKeyword,
- IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL,
- IN OUT PVOID CallbackContext OPTIONAL);
-
-#define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearBits(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG NumberToFind,
+ IN ULONG HintIndex);
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearBitsAndSet(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG NumberToFind,
+ IN ULONG HintIndex);
-#if defined(_M_IX86)
-/** Kernel definitions for x86 **/
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindFirstRunClear(
+ IN PRTL_BITMAP BitMapHeader,
+ OUT PULONG StartingIndex);
-/* Interrupt request levels */
-#define PASSIVE_LEVEL 0
-#define LOW_LEVEL 0
-#define APC_LEVEL 1
-#define DISPATCH_LEVEL 2
-#define CMCI_LEVEL 5
-#define PROFILE_LEVEL 27
-#define CLOCK1_LEVEL 28
-#define CLOCK2_LEVEL 28
-#define IPI_LEVEL 29
-#define POWER_LEVEL 30
-#define HIGH_LEVEL 31
-#define CLOCK_LEVEL CLOCK2_LEVEL
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearRuns(
+ IN PRTL_BITMAP BitMapHeader,
+ OUT PRTL_BITMAP_RUN RunArray,
+ IN ULONG SizeOfRunArray,
+ IN BOOLEAN LocateLongestRuns);
-#define KIP0PCRADDRESS 0xffdff000
-#define KI_USER_SHARED_DATA 0xffdf0000
-#define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindLastBackwardRunClear(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG FromIndex,
+ OUT PULONG StartingRunIndex);
-#define PAGE_SIZE 0x1000
-#define PAGE_SHIFT 12L
-#define KeGetDcacheFillSize() 1L
+NTSYSAPI
+CCHAR
+NTAPI
+RtlFindLeastSignificantBit(
+ IN ULONGLONG Set);
-#define EFLAG_SIGN 0x8000
-#define EFLAG_ZERO 0x4000
-#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindLongestRunClear(
+ IN PRTL_BITMAP BitMapHeader,
+ OUT PULONG StartingIndex);
-#define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
-#define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
-#define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+NTSYSAPI
+CCHAR
+NTAPI
+RtlFindMostSignificantBit(
+ IN ULONGLONG Set);
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindNextForwardRunClear(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG FromIndex,
+ OUT PULONG StartingRunIndex);
-typedef struct _KFLOATING_SAVE {
- ULONG ControlWord;
- ULONG StatusWord;
- ULONG ErrorOffset;
- ULONG ErrorSelector;
- ULONG DataOffset;
- ULONG DataSelector;
- ULONG Cr0NpxState;
- ULONG Spare1;
-} KFLOATING_SAVE, *PKFLOATING_SAVE;
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindSetBits(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG NumberToFind,
+ IN ULONG HintIndex);
-extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindSetBitsAndClear(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG NumberToFind,
+ IN ULONG HintIndex);
-#define YieldProcessor _mm_pause
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlHashUnicodeString(
+ IN CONST UNICODE_STRING *String,
+ IN BOOLEAN CaseInSensitive,
+ IN ULONG HashAlgorithm,
+ OUT PULONG HashValue);
-FORCEINLINE
+NTSYSAPI
VOID
-KeMemoryBarrier(VOID)
-{
- volatile LONG Barrier;
-#if defined(__GNUC__)
- __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
-#elif defined(_MSC_VER)
- __asm xchg [Barrier], eax
-#endif
-}
-
-NTHALAPI
-KIRQL
NTAPI
-KeGetCurrentIrql(VOID);
+RtlInitAnsiString(
+ IN OUT PANSI_STRING DestinationString,
+ IN PCSZ SourceString);
-NTHALAPI
+NTSYSAPI
VOID
-FASTCALL
-KfLowerIrql(
- IN KIRQL NewIrql);
-#define KeLowerIrql(a) KfLowerIrql(a)
-
-NTHALAPI
-KIRQL
-FASTCALL
-KfRaiseIrql(
- IN KIRQL NewIrql);
-#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+NTAPI
+RtlInitializeBitMap(
+ IN PRTL_BITMAP BitMapHeader,
+ IN PULONG BitMapBuffer,
+ IN ULONG SizeOfBitMap);
-NTHALAPI
-KIRQL
+NTSYSAPI
+VOID
NTAPI
-KeRaiseIrqlToDpcLevel(VOID);
+RtlInitString(
+ IN OUT PSTRING DestinationString,
+ IN PCSZ SourceString);
-NTHALAPI
-KIRQL
+NTSYSAPI
+NTSTATUS
NTAPI
-KeRaiseIrqlToSynchLevel(VOID);
+RtlIntegerToUnicodeString(
+ IN ULONG Value,
+ IN ULONG Base OPTIONAL,
+ IN OUT PUNICODE_STRING String);
-NTHALAPI
-KIRQL
-FASTCALL
-KfAcquireSpinLock(
- IN OUT PKSPIN_LOCK SpinLock);
-#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInt64ToUnicodeString(
+ IN ULONGLONG Value,
+ IN ULONG Base OPTIONAL,
+ IN OUT PUNICODE_STRING String);
-NTHALAPI
-VOID
-FASTCALL
-KfReleaseSpinLock(
- IN OUT PKSPIN_LOCK SpinLock,
- IN KIRQL NewIrql);
-#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
+#ifdef _WIN64
+#define RtlIntPtrToUnicodeString(Value, Base, String) \
+ RtlInt64ToUnicodeString(Value, Base, String)
+#else
+#define RtlIntPtrToUnicodeString(Value, Base, String) \
+ RtlIntegerToUnicodeString(Value, Base, String)
+#endif
-NTKERNELAPI
-VOID
-FASTCALL
-KefAcquireSpinLockAtDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock);
-#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
+/* BOOLEAN
+ * RtlIsZeroLuid(
+ * IN PLUID L1);
+ */
+#define RtlIsZeroLuid(_L1) \
+ ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
-NTKERNELAPI
-VOID
-FASTCALL
-KefReleaseSpinLockFromDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock);
-#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
+NTSYSAPI
+ULONG
+NTAPI
+RtlLengthSecurityDescriptor(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor);
NTSYSAPI
-PKTHREAD
+ULONG
NTAPI
-KeGetCurrentThread(VOID);
+RtlNumberOfClearBits(
+ IN PRTL_BITMAP BitMapHeader);
-NTKERNELAPI
-NTSTATUS
+NTSYSAPI
+ULONG
NTAPI
-KeSaveFloatingPointState(
- OUT PKFLOATING_SAVE FloatSave);
+RtlNumberOfSetBits(
+ IN PRTL_BITMAP BitMapHeader);
-NTKERNELAPI
+NTSYSAPI
NTSTATUS
NTAPI
-KeRestoreFloatingPointState(
- IN PKFLOATING_SAVE FloatSave);
+RtlQueryRegistryValues(
+ IN ULONG RelativeTo,
+ IN PCWSTR Path,
+ IN OUT PRTL_QUERY_REGISTRY_TABLE QueryTable,
+ IN PVOID Context OPTIONAL,
+ IN PVOID Environment OPTIONAL);
+
+#define SHORT_SIZE (sizeof(USHORT))
+#define SHORT_MASK (SHORT_SIZE - 1)
+#define LONG_SIZE (sizeof(LONG))
+#define LONGLONG_SIZE (sizeof(LONGLONG))
+#define LONG_MASK (LONG_SIZE - 1)
+#define LONGLONG_MASK (LONGLONG_SIZE - 1)
+#define LOWBYTE_MASK 0x00FF
/* VOID
- * KeFlushIoBuffers(
- * IN PMDL Mdl,
- * IN BOOLEAN ReadOperation,
- * IN BOOLEAN DmaOperation)
+ * RtlRetrieveUlong(
+ * PULONG DestinationAddress,
+ * PULONG SourceAddress);
*/
-#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
+#if defined(_AMD64_)
+#define RtlRetrieveUlong(DestAddress,SrcAddress) \
+ *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
+#else
+#define RtlRetrieveUlong(DestAddress,SrcAddress) \
+ if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
+ { \
+ ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
+ ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
+ ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
+ ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
+ } \
+ else \
+ { \
+ *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
+ }
+#endif
-/* x86 and x64 performs a 0x2C interrupt */
-#define DbgRaiseAssertionFailure __int2c
+/* VOID
+ * RtlRetrieveUshort(
+ * PUSHORT DestinationAddress,
+ * PUSHORT SourceAddress);
+ */
+#if defined(_AMD64_)
+#define RtlRetrieveUshort(DestAddress,SrcAddress) \
+ *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
+#else
+#define RtlRetrieveUshort(DestAddress,SrcAddress) \
+ if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
+ { \
+ ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
+ ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
+ } \
+ else \
+ { \
+ *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
+ }
+#endif
-FORCEINLINE
+NTSYSAPI
VOID
-_KeQueryTickCount(
- OUT PLARGE_INTEGER CurrentCount)
-{
- for (;;) {
- CurrentCount->HighPart = KeTickCount.High1Time;
- CurrentCount->LowPart = KeTickCount.LowPart;
- if (CurrentCount->HighPart == KeTickCount.High2Time) break;
- YieldProcessor();
- }
-}
-#define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
+NTAPI
+RtlSetAllBits(
+ IN PRTL_BITMAP BitMapHeader);
+NTSYSAPI
+VOID
+NTAPI
+RtlSetBits(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG StartingIndex,
+ IN ULONG NumberToSet);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetDaclSecurityDescriptor(
+ IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN BOOLEAN DaclPresent,
+ IN PACL Dacl OPTIONAL,
+ IN BOOLEAN DaclDefaulted OPTIONAL);
+#if defined(_AMD64_)
+/* VOID
+ * RtlStoreUlong(
+ * IN PULONG Address,
+ * IN ULONG Value);
+ */
+#define RtlStoreUlong(Address,Value) \
+ *(ULONG UNALIGNED *)(Address) = (Value)
-#elif defined(_M_AMD64)
-/** Kernel definitions for AMD64 **/
+/* VOID
+ * RtlStoreUlonglong(
+ * IN OUT PULONGLONG Address,
+ * ULONGLONG Value);
+ */
+#define RtlStoreUlonglong(Address,Value) \
+ *(ULONGLONG UNALIGNED *)(Address) = (Value)
-/* Interrupt request levels */
-#define PASSIVE_LEVEL 0
-#define LOW_LEVEL 0
-#define APC_LEVEL 1
-#define DISPATCH_LEVEL 2
-#define CMCI_LEVEL 5
-#define CLOCK_LEVEL 13
-#define IPI_LEVEL 14
-#define DRS_LEVEL 14
-#define POWER_LEVEL 14
-#define PROFILE_LEVEL 15
-#define HIGH_LEVEL 15
-
-#define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
-#define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
-#define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8)
-#define SharedSystemTime (KI_USER_SHARED_DATA + 0x14)
-#define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
+/* VOID
+ * RtlStoreUshort(
+ * IN PUSHORT Address,
+ * IN USHORT Value);
+ */
+#define RtlStoreUshort(Address,Value) \
+ *(USHORT UNALIGNED *)(Address) = (Value)
-#define PAGE_SIZE 0x1000
-#define PAGE_SHIFT 12L
+/* VOID
+ * RtlRetrieveUshort(
+ * PUSHORT DestinationAddress,
+ * PUSHORT SourceAddress);
+ */
+#define RtlRetrieveUshort(DestAddress,SrcAddress) \
+ *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
-#define EFLAG_SIGN 0x8000
-#define EFLAG_ZERO 0x4000
-#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
+/* VOID
+ * RtlRetrieveUlong(
+ * PULONG DestinationAddress,
+ * PULONG SourceAddress);
+ */
+#define RtlRetrieveUlong(DestAddress,SrcAddress) \
+ *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
-#define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
-#define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
-#define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+#else
+#define RtlStoreUlong(Address,Value) \
+ if ((ULONG_PTR)(Address) & LONG_MASK) { \
+ ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
+ ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
+ ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
+ ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
+ } \
+ else { \
+ *((PULONG)(Address)) = (ULONG) (Value); \
+ }
+#endif
-typedef struct _KFLOATING_SAVE {
- ULONG Dummy;
-} KFLOATING_SAVE, *PKFLOATING_SAVE;
+/* VOID
+ * RtlStoreUlonglong(
+ * IN OUT PULONGLONG Address,
+ * ULONGLONG Value);
+ */
+#if defined(_AMD64_)
+#define RtlStoreUlonglong(Address,Value) \
+ *(ULONGLONG UNALIGNED *)(Address) = (Value)
+#else
+#define RtlStoreUlonglong(Address,Value) \
+ if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
+ RtlStoreUlong((ULONG_PTR)(Address), \
+ (ULONGLONG)(Value) & 0xFFFFFFFF); \
+ RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
+ (ULONGLONG)(Value) >> 32); \
+ } else { \
+ *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
+ }
+#endif
-typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
+/* VOID
+ * RtlStoreUlongPtr(
+ * IN OUT PULONG_PTR Address,
+ * IN ULONG_PTR Value);
+ */
+#ifdef _WIN64
+#define RtlStoreUlongPtr(Address,Value) \
+ RtlStoreUlonglong(Address,Value)
+#else
+#define RtlStoreUlongPtr(Address,Value) \
+ RtlStoreUlong(Address,Value)
+#endif
-#define KeQueryInterruptTime() \
- (*(volatile ULONG64*)SharedInterruptTime)
+/* VOID
+ * RtlStoreUshort(
+ * IN PUSHORT Address,
+ * IN USHORT Value);
+ */
+#if defined(_AMD64_)
+#define RtlStoreUshort(Address,Value) \
+ *(USHORT UNALIGNED *)(Address) = (Value)
+#else
+#define RtlStoreUshort(Address,Value) \
+ if ((ULONG_PTR)(Address) & SHORT_MASK) { \
+ ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
+ ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
+ } \
+ else { \
+ *((PUSHORT) (Address)) = (USHORT)Value; \
+ }
+#endif
-#define KeQuerySystemTime(CurrentCount) \
- *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTimeFieldsToTime(
+ IN PTIME_FIELDS TimeFields,
+ IN PLARGE_INTEGER Time);
-#define KeQueryTickCount(CurrentCount) \
- *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
+NTSYSAPI
+VOID
+NTAPI
+RtlTimeToTimeFields(
+ IN PLARGE_INTEGER Time,
+ IN PTIME_FIELDS TimeFields);
-#define KeGetDcacheFillSize() 1L
+NTSYSAPI
+ULONG
+FASTCALL
+RtlUlongByteSwap(
+ IN ULONG Source);
-#define YieldProcessor _mm_pause
+NTSYSAPI
+ULONGLONG
+FASTCALL
+RtlUlonglongByteSwap(
+ IN ULONGLONG Source);
-FORCEINLINE
-KIRQL
-KeGetCurrentIrql(VOID)
-{
- return (KIRQL)__readcr8();
-}
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToAnsiString(
+ IN OUT PANSI_STRING DestinationString,
+ IN PCUNICODE_STRING SourceString,
+ IN BOOLEAN AllocateDestinationString);
-FORCEINLINE
-VOID
-KeLowerIrql(IN KIRQL NewIrql)
-{
- //ASSERT(KeGetCurrentIrql() >= NewIrql);
- __writecr8(NewIrql);
-}
+NTSYSAPI
+ULONG
+NTAPI
+RtlxUnicodeStringToAnsiSize(
+ IN PCUNICODE_STRING UnicodeString);
-FORCEINLINE
-KIRQL
-KfRaiseIrql(IN KIRQL NewIrql)
-{
- KIRQL OldIrql;
+#define RtlUnicodeStringToAnsiSize(String) ( \
+ NLS_MB_CODE_PAGE_TAG ? \
+ RtlxUnicodeStringToAnsiSize(String) : \
+ ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
+)
- OldIrql = __readcr8();
- //ASSERT(OldIrql <= NewIrql);
- __writecr8(NewIrql);
- return OldIrql;
-}
-#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToInteger(
+ IN PCUNICODE_STRING String,
+ IN ULONG Base OPTIONAL,
+ OUT PULONG Value);
-FORCEINLINE
-KIRQL
-KeRaiseIrqlToDpcLevel(VOID)
-{
- return KfRaiseIrql(DISPATCH_LEVEL);
-}
+NTSYSAPI
+WCHAR
+NTAPI
+RtlUpcaseUnicodeChar(
+ IN WCHAR SourceCharacter);
-FORCEINLINE
-KIRQL
-KeRaiseIrqlToSynchLevel(VOID)
-{
- return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
- }
+NTSYSAPI
+USHORT
+FASTCALL
+RtlUshortByteSwap(
+ IN USHORT Source);
-FORCEINLINE
-PKTHREAD
-KeGetCurrentThread(VOID)
-{
- return (struct _KTHREAD *)__readgsqword(0x188);
-}
-
-/* VOID
- * KeFlushIoBuffers(
- * IN PMDL Mdl,
- * IN BOOLEAN ReadOperation,
- * IN BOOLEAN DmaOperation)
- */
-#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
-
-/* x86 and x64 performs a 0x2C interrupt */
-#define DbgRaiseAssertionFailure __int2c
-
-#elif defined(_M_IA64)
-/** Kernel definitions for IA64 **/
-
-/* Interrupt request levels */
-#define PASSIVE_LEVEL 0
-#define LOW_LEVEL 0
-#define APC_LEVEL 1
-#define DISPATCH_LEVEL 2
-#define CMC_LEVEL 3
-#define DEVICE_LEVEL_BASE 4
-#define PC_LEVEL 12
-#define IPI_LEVEL 14
-#define DRS_LEVEL 14
-#define CLOCK_LEVEL 13
-#define POWER_LEVEL 15
-#define PROFILE_LEVEL 15
-#define HIGH_LEVEL 15
-
-#define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
-extern volatile LARGE_INTEGER KeTickCount;
-
-#define PAUSE_PROCESSOR __yield();
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidRelativeSecurityDescriptor(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
+ IN ULONG SecurityDescriptorLength,
+ IN SECURITY_INFORMATION RequiredInformation);
-FORCEINLINE
-VOID
-KeFlushWriteBuffer(VOID)
-{
- __mf ();
- return;
-}
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidSecurityDescriptor(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor);
NTSYSAPI
-PKTHREAD
+NTSTATUS
NTAPI
-KeGetCurrentThread(VOID);
+RtlWriteRegistryValue(
+ IN ULONG RelativeTo,
+ IN PCWSTR Path,
+ IN PCWSTR ValueName,
+ IN ULONG ValueType,
+ IN PVOID ValueData,
+ IN ULONG ValueLength);
-#elif defined(_M_PPC)
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-/* Interrupt request levels */
-#define PASSIVE_LEVEL 0
-#define LOW_LEVEL 0
-#define APC_LEVEL 1
-#define DISPATCH_LEVEL 2
-#define PROFILE_LEVEL 27
-#define CLOCK1_LEVEL 28
-#define CLOCK2_LEVEL 28
-#define IPI_LEVEL 29
-#define POWER_LEVEL 30
-#define HIGH_LEVEL 31
-//
-// Used to contain PFNs and PFN counts
-//
-typedef ULONG PFN_COUNT;
-typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
-typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
+#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
+NTSYSAPI
+VOID
+FASTCALL
+RtlPrefetchMemoryNonTemporal(
+ IN PVOID Source,
+ IN SIZE_T Length);
+#endif
-typedef struct _KFLOATING_SAVE {
- ULONG Dummy;
-} KFLOATING_SAVE, *PKFLOATING_SAVE;
+#if (NTDDI_VERSION >= NTDDI_WINXP)
-typedef struct _KPCR_TIB {
- PVOID ExceptionList; /* 00 */
- PVOID StackBase; /* 04 */
- PVOID StackLimit; /* 08 */
- PVOID SubSystemTib; /* 0C */
- _ANONYMOUS_UNION union {
- PVOID FiberData; /* 10 */
- ULONG Version; /* 10 */
- } DUMMYUNIONNAME;
- PVOID ArbitraryUserPointer; /* 14 */
- struct _KPCR_TIB *Self; /* 18 */
-} KPCR_TIB, *PKPCR_TIB; /* 1C */
-
-#define PCR_MINOR_VERSION 1
-#define PCR_MAJOR_VERSION 1
-
-typedef struct _KPCR {
- KPCR_TIB Tib; /* 00 */
- struct _KPCR *Self; /* 1C */
- struct _KPRCB *Prcb; /* 20 */
- KIRQL Irql; /* 24 */
- ULONG IRR; /* 28 */
- ULONG IrrActive; /* 2C */
- ULONG IDR; /* 30 */
- PVOID KdVersionBlock; /* 34 */
- PUSHORT IDT; /* 38 */
- PUSHORT GDT; /* 3C */
- struct _KTSS *TSS; /* 40 */
- USHORT MajorVersion; /* 44 */
- USHORT MinorVersion; /* 46 */
- KAFFINITY SetMember; /* 48 */
- ULONG StallScaleFactor; /* 4C */
- UCHAR SpareUnused; /* 50 */
- UCHAR Number; /* 51 */
-} KPCR, *PKPCR; /* 54 */
-
-#define KeGetPcr() PCR
-
-#define YieldProcessor() __asm__ __volatile__("nop");
-FORCEINLINE
-ULONG
-NTAPI
-KeGetCurrentProcessorNumber(VOID)
-{
- ULONG Number;
- __asm__ __volatile__ (
- "lwz %0, %c1(12)\n"
- : "=r" (Number)
- : "i" (FIELD_OFFSET(KPCR, Number))
- );
- return Number;
-}
-NTHALAPI
+NTSYSAPI
VOID
-FASTCALL
-KfLowerIrql(
- IN KIRQL NewIrql);
-#define KeLowerIrql(a) KfLowerIrql(a)
-
-NTHALAPI
-KIRQL
-FASTCALL
-KfRaiseIrql(
- IN KIRQL NewIrql);
-#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
-
-NTHALAPI
-KIRQL
NTAPI
-KeRaiseIrqlToDpcLevel(VOID);
+RtlClearBit(
+ PRTL_BITMAP BitMapHeader,
+ ULONG BitNumber);
-NTHALAPI
-KIRQL
+NTSYSAPI
+WCHAR
NTAPI
-KeRaiseIrqlToSynchLevel(VOID);
+RtlDowncaseUnicodeChar(
+ IN WCHAR SourceCharacter);
+NTSYSAPI
+VOID
+NTAPI
+RtlSetBit(
+ PRTL_BITMAP BitMapHeader,
+ ULONG BitNumber);
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTestBit(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG BitNumber);
-#elif defined(_M_MIPS)
-#error MIPS Headers are totally incorrect
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlHashUnicodeString(
+ IN CONST UNICODE_STRING *String,
+ IN BOOLEAN CaseInSensitive,
+ IN ULONG HashAlgorithm,
+ OUT PULONG HashValue);
-//
-// Used to contain PFNs and PFN counts
-//
-typedef ULONG PFN_COUNT;
-typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
-typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
-#define PASSIVE_LEVEL 0
-#define APC_LEVEL 1
-#define DISPATCH_LEVEL 2
-#define PROFILE_LEVEL 27
-#define IPI_LEVEL 29
-#define HIGH_LEVEL 31
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-typedef struct _KPCR {
- struct _KPRCB *Prcb; /* 20 */
- KIRQL Irql; /* 24 */
- ULONG IRR; /* 28 */
- ULONG IDR; /* 30 */
-} KPCR, *PKPCR;
+#if (NTDDI_VERSION >= NTDDI_VISTA)
-#define KeGetPcr() PCR
-typedef struct _KFLOATING_SAVE {
-} KFLOATING_SAVE, *PKFLOATING_SAVE;
-static __inline
+NTSYSAPI
ULONG
NTAPI
-KeGetCurrentProcessorNumber(VOID)
-{
- return 0;
-}
-
-#define YieldProcessor() __asm__ __volatile__("nop");
+RtlNumberOfSetBitsUlongPtr(
+ IN ULONG_PTR Target);
-#define KeLowerIrql(a) KfLowerIrql(a)
-#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+NTSYSAPI
+ULONGLONG
+NTAPI
+RtlIoDecodeMemIoResource (
+ IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
+ OUT PULONGLONG Alignment OPTIONAL,
+ OUT PULONGLONG MinimumAddress OPTIONAL,
+ OUT PULONGLONG MaximumAddress OPTIONAL);
-NTKERNELAPI
-VOID
+NTSYSAPI
+NTSTATUS
NTAPI
-KfLowerIrql(
- IN KIRQL NewIrql);
+RtlIoEncodeMemIoResource(
+ IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
+ IN UCHAR Type,
+ IN ULONGLONG Length,
+ IN ULONGLONG Alignment,
+ IN ULONGLONG MinimumAddress,
+ IN ULONGLONG MaximumAddress);
-NTKERNELAPI
-KIRQL
+NTSYSAPI
+ULONGLONG
NTAPI
-KfRaiseIrql(
- IN KIRQL NewIrql);
+RtlCmDecodeMemIoResource(
+ IN struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor,
+ OUT PULONGLONG Start OPTIONAL);
-NTKERNELAPI
-KIRQL
+NTSYSAPI
+NTSTATUS
NTAPI
-KeRaiseIrqlToDpcLevel(VOID);
+RtlFindClosestEncodableLength(
+ IN ULONGLONG SourceLength,
+ OUT PULONGLONG TargetLength);
-NTKERNELAPI
-KIRQL
+NTSYSAPI
+NTSTATUS
NTAPI
-KeRaiseIrqlToSynchLevel(VOID);
+RtlCmEncodeMemIoResource(
+ IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
+ IN UCHAR Type,
+ IN ULONGLONG Length,
+ IN ULONGLONG Start);
-#elif defined(_M_ARM)
-#include <armddk.h>
-#else
-#error Unknown Architecture
-#endif
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
-/******************************************************************************
- * Runtime Library Functions *
- ******************************************************************************/
-#if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeToUTF8N(
+ OUT PCHAR UTF8StringDestination,
+ IN ULONG UTF8StringMaxByteCount,
+ OUT PULONG UTF8StringActualByteCount,
+ IN PCWCH UnicodeStringSource,
+ IN ULONG UnicodeStringByteCount);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUTF8ToUnicodeN(
+ OUT PWSTR UnicodeStringDestination,
+ IN ULONG UnicodeStringMaxByteCount,
+ OUT PULONG UnicodeStringActualByteCount,
+ IN PCCH UTF8StringSource,
+ IN ULONG UTF8StringByteCount);
+
+NTSYSAPI
+ULONG64
+NTAPI
+RtlGetEnabledExtendedFeatures(
+ IN ULONG64 FeatureMask);
-#define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
-FORCEINLINE
-VOID
-InitializeListHead(
- OUT PLIST_ENTRY ListHead)
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+
+#if !defined(MIDL_PASS)
+/* inline funftions */
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertLongToLargeInteger(
+ IN LONG SignedInteger)
{
- ListHead->Flink = ListHead->Blink = ListHead;
+ LARGE_INTEGER ret;
+ ret.QuadPart = SignedInteger;
+ return ret;
}
-BOOLEAN
-FORCEINLINE
-IsListEmpty(
- IN CONST LIST_ENTRY * ListHead)
+//DECLSPEC_DEPRECATED_DDK_WINXP
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertUlongToLargeInteger(
+ IN ULONG UnsignedInteger)
{
- return (BOOLEAN)(ListHead->Flink == ListHead);
+ LARGE_INTEGER ret;
+ ret.QuadPart = UnsignedInteger;
+ return ret;
}
-FORCEINLINE
-BOOLEAN
-RemoveEntryList(
- IN PLIST_ENTRY Entry)
-{
- PLIST_ENTRY OldFlink;
- PLIST_ENTRY OldBlink;
-
- OldFlink = Entry->Flink;
- OldBlink = Entry->Blink;
- OldFlink->Blink = OldBlink;
- OldBlink->Flink = OldFlink;
- return (BOOLEAN)(OldFlink == OldBlink);
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+ULONG
+NTAPI_INLINE
+RtlEnlargedUnsignedDivide(
+ IN ULARGE_INTEGER Dividend,
+ IN ULONG Divisor,
+ IN OUT PULONG Remainder)
+{
+ if (Remainder)
+ *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+ return (ULONG)(Dividend.QuadPart / Divisor);
}
-FORCEINLINE
-PLIST_ENTRY
-RemoveHeadList(
- IN OUT PLIST_ENTRY ListHead)
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlEnlargedUnsignedMultiply(
+ IN ULONG Multiplicand,
+ IN ULONG Multiplier)
{
- PLIST_ENTRY Flink;
- PLIST_ENTRY Entry;
-
- Entry = ListHead->Flink;
- Flink = Entry->Flink;
- ListHead->Flink = Flink;
- Flink->Blink = ListHead;
- return Entry;
+ LARGE_INTEGER ret;
+ ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+ return ret;
}
-FORCEINLINE
-PLIST_ENTRY
-RemoveTailList(
- IN OUT PLIST_ENTRY ListHead)
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlEnlargedIntegerMultiply(
+ IN LONG Multiplicand,
+ IN LONG Multiplier)
{
- PLIST_ENTRY Blink;
- PLIST_ENTRY Entry;
-
- Entry = ListHead->Blink;
- Blink = Entry->Blink;
- ListHead->Blink = Blink;
- Blink->Flink = ListHead;
- return Entry;
+ LARGE_INTEGER ret;
+ ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+ return ret;
}
FORCEINLINE
VOID
-InsertTailList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PLIST_ENTRY Entry)
+RtlInitEmptyAnsiString(
+ OUT PANSI_STRING AnsiString,
+ IN PCHAR Buffer,
+ IN USHORT BufferSize)
{
- PLIST_ENTRY OldBlink;
- OldBlink = ListHead->Blink;
- Entry->Flink = ListHead;
- Entry->Blink = OldBlink;
- OldBlink->Flink = Entry;
- ListHead->Blink = Entry;
+ AnsiString->Length = 0;
+ AnsiString->MaximumLength = BufferSize;
+ AnsiString->Buffer = Buffer;
}
FORCEINLINE
VOID
-InsertHeadList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PLIST_ENTRY Entry)
+RtlInitEmptyUnicodeString(
+ OUT PUNICODE_STRING UnicodeString,
+ IN PWSTR Buffer,
+ IN USHORT BufferSize)
{
- PLIST_ENTRY OldFlink;
- OldFlink = ListHead->Flink;
- Entry->Flink = OldFlink;
- Entry->Blink = ListHead;
- OldFlink->Blink = Entry;
- ListHead->Flink = Entry;
+ UnicodeString->Length = 0;
+ UnicodeString->MaximumLength = BufferSize;
+ UnicodeString->Buffer = Buffer;
}
-FORCEINLINE
-VOID
-AppendTailList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PLIST_ENTRY ListToAppend)
-{
- PLIST_ENTRY ListEnd = ListHead->Blink;
+#if defined(_AMD64_) || defined(_IA64_)
- ListHead->Blink->Flink = ListToAppend;
- ListHead->Blink = ListToAppend->Blink;
- ListToAppend->Blink->Flink = ListHead;
- ListToAppend->Blink = ListEnd;
-}
-FORCEINLINE
-PSINGLE_LIST_ENTRY
-PopEntryList(
- IN OUT PSINGLE_LIST_ENTRY ListHead)
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedIntegerMultiply(
+ IN LARGE_INTEGER Multiplicand,
+ IN LONG Multiplier)
{
- PSINGLE_LIST_ENTRY FirstEntry;
- FirstEntry = ListHead->Next;
- if (FirstEntry != NULL) {
- ListHead->Next = FirstEntry->Next;
- }
- return FirstEntry;
+ LARGE_INTEGER ret;
+ ret.QuadPart = Multiplicand.QuadPart * Multiplier;
+ return ret;
}
-FORCEINLINE
-VOID
-PushEntryList(
- IN OUT PSINGLE_LIST_ENTRY ListHead,
- IN OUT PSINGLE_LIST_ENTRY Entry)
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedLargeIntegerDivide(
+ IN LARGE_INTEGER Dividend,
+ IN ULONG Divisor,
+ OUT PULONG Remainder OPTIONAL)
{
- Entry->Next = ListHead->Next;
- ListHead->Next = Entry;
+ LARGE_INTEGER ret;
+ ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
+ if (Remainder)
+ *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+ return ret;
}
-#endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
-NTSYSAPI
-VOID
-NTAPI
-RtlAssert(
- IN PVOID FailedAssertion,
- IN PVOID FileName,
- IN ULONG LineNumber,
- IN PSTR Message);
-/* VOID
- * RtlCopyMemory(
- * IN VOID UNALIGNED *Destination,
- * IN CONST VOID UNALIGNED *Source,
- * IN SIZE_T Length)
- */
-#define RtlCopyMemory(Destination, Source, Length) \
- memcpy(Destination, Source, Length)
+#endif /* defined(_AMD64_) || defined(_IA64_) */
-#define RtlCopyBytes RtlCopyMemory
-#if defined(_M_AMD64)
-NTSYSAPI
-VOID
-NTAPI
-RtlCopyMemoryNonTemporal(
- VOID UNALIGNED *Destination,
- CONST VOID UNALIGNED *Source,
- SIZE_T Length);
-#else
-#define RtlCopyMemoryNonTemporal RtlCopyMemory
-#endif
+#if defined(_AMD64_)
-/* BOOLEAN
- * RtlEqualLuid(
- * IN PLUID Luid1,
- * IN PLUID Luid2)
- */
-#define RtlEqualLuid(Luid1, Luid2) \
- (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
+#define MultiplyHigh __mulh
+#define UnsignedMultiplyHigh __umulh
-/* ULONG
- * RtlEqualMemory(
- * IN VOID UNALIGNED *Destination,
- * IN CONST VOID UNALIGNED *Source,
- * IN SIZE_T Length)
- */
-#define RtlEqualMemory(Destination, Source, Length) \
- (!memcmp(Destination, Source, Length))
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlExtendedMagicDivide(
+ IN LARGE_INTEGER Dividend,
+ IN LARGE_INTEGER MagicDivisor,
+ IN CCHAR ShiftCount)
+{
+ LARGE_INTEGER ret;
+ ULONG64 ret64;
+ BOOLEAN Pos;
+ Pos = (Dividend.QuadPart >= 0);
+ ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart,
+ MagicDivisor.QuadPart);
+ ret64 >>= ShiftCount;
+ ret.QuadPart = Pos ? ret64 : -ret64;
+ return ret;
+}
+#endif
+
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerAdd(
+ IN LARGE_INTEGER Addend1,
+ IN LARGE_INTEGER Addend2)
+{
+ LARGE_INTEGER ret;
+ ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart;
+ return ret;
+}
/* VOID
- * RtlFillMemory(
- * IN VOID UNALIGNED *Destination,
- * IN SIZE_T Length,
- * IN UCHAR Fill)
+ * RtlLargeIntegerAnd(
+ * IN OUT LARGE_INTEGER Result,
+ * IN LARGE_INTEGER Source,
+ * IN LARGE_INTEGER Mask);
*/
-#define RtlFillMemory(Destination, Length, Fill) \
- memset(Destination, Fill, Length)
+#define RtlLargeIntegerAnd(Result, Source, Mask) \
+ Result.QuadPart = Source.QuadPart & Mask.QuadPart
-#define RtlFillBytes RtlFillMemory
+//DECLSPEC_DEPRECATED_DDK
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlLargeIntegerArithmeticShift(
+ IN LARGE_INTEGER LargeInteger,
+ IN CCHAR ShiftCount)
+{
+ LARGE_INTEGER ret;
+ ret.QuadPart = LargeInteger.QuadPart >> ShiftCount;
+ return ret;
+}
-NTSYSAPI
-VOID
-NTAPI
-RtlFreeUnicodeString(
- IN OUT PUNICODE_STRING UnicodeString);
+/* BOOLEAN
+ * RtlLargeIntegerEqualTo(
+ * IN LARGE_INTEGER Operand1,
+ * IN LARGE_INTEGER Operand2);
+ */
+#define RtlLargeIntegerEqualTo(X,Y) \
+ (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlGUIDFromString(
- IN PUNICODE_STRING GuidString,
- OUT GUID *Guid);
+FORCEINLINE
+PVOID
+RtlSecureZeroMemory(
+ OUT PVOID Pointer,
+ IN SIZE_T Size)
+{
+ volatile char* vptr = (volatile char*)Pointer;
+#if defined(_M_AMD64)
+ __stosb((PUCHAR)vptr, 0, Size);
+#else
+ char * endptr = (char *)vptr + Size;
+ while (vptr < endptr) {
+ *vptr = 0; vptr++;
+ }
+#endif
+ return Pointer;
+}
-NTSYSAPI
-VOID
-NTAPI
-RtlInitUnicodeString(
- IN OUT PUNICODE_STRING DestinationString,
- IN PCWSTR SourceString OPTIONAL);
+#if defined(_M_AMD64)
+FORCEINLINE
+BOOLEAN
+RtlCheckBit(
+ IN PRTL_BITMAP BitMapHeader,
+ IN ULONG BitPosition)
+{
+ return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition);
+}
+#else
+#define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
+#endif /* defined(_M_AMD64) */
-/* VOID
- * RtlMoveMemory(
- * IN VOID UNALIGNED *Destination,
- * IN CONST VOID UNALIGNED *Source,
- * IN SIZE_T Length)
- */
-#define RtlMoveMemory(Destination, Source, Length) \
- memmove(Destination, Source, Length)
+#define RtlLargeIntegerGreaterThan(X,Y) ( \
+ (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
+ ((X).HighPart > (Y).HighPart) \
+)
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlStringFromGUID(
- IN REFGUID Guid,
- OUT PUNICODE_STRING GuidString);
+#define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
+ (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
+ ((X).HighPart > (Y).HighPart) \
+)
-/* VOID
- * RtlZeroMemory(
- * IN VOID UNALIGNED *Destination,
- * IN SIZE_T Length)
- */
-#define RtlZeroMemory(Destination, Length) \
- memset(Destination, 0, Length)
+#define RtlLargeIntegerNotEqualTo(X,Y) ( \
+ (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
+)
-#define RtlZeroBytes RtlZeroMemory
+#define RtlLargeIntegerLessThan(X,Y) ( \
+ (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
+ ((X).HighPart < (Y).HighPart) \
+)
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+#define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
+ (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
+ ((X).HighPart < (Y).HighPart) \
+)
+#define RtlLargeIntegerGreaterThanZero(X) ( \
+ (((X).HighPart == 0) && ((X).LowPart > 0)) || \
+ ((X).HighPart > 0 ) \
+)
+#define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlAreBitsClear(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG StartingIndex,
- IN ULONG Length);
+#define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlAreBitsSet(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG StartingIndex,
- IN ULONG Length);
+#define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlAnsiStringToUnicodeString(
- IN OUT PUNICODE_STRING DestinationString,
- IN PANSI_STRING SourceString,
- IN BOOLEAN AllocateDestinationString);
+#define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
-NTSYSAPI
-ULONG
-NTAPI
-RtlxAnsiStringToUnicodeSize(
- IN PCANSI_STRING AnsiString);
+#define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
-#define RtlAnsiStringToUnicodeSize(String) ( \
- NLS_MB_CODE_PAGE_TAG ? \
- RtlxAnsiStringToUnicodeSize(String) : \
- ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
-)
+#endif /* !defined(MIDL_PASS) */
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlAppendUnicodeStringToString(
- IN OUT PUNICODE_STRING Destination,
- IN PCUNICODE_STRING Source);
+/* Byte Swap Functions */
+#if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
+ ((defined(_M_AMD64) || defined(_M_IA64)) \
+ && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlAppendUnicodeToString(
- IN OUT PUNICODE_STRING Destination,
- IN PCWSTR Source);
+#define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
+#define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
+#define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlCheckRegistryKey(
- IN ULONG RelativeTo,
- IN PWSTR Path);
+#endif
-NTSYSAPI
-VOID
-NTAPI
-RtlClearAllBits(
- IN PRTL_BITMAP BitMapHeader);
+#if DBG
-NTSYSAPI
-VOID
-NTAPI
-RtlClearBits(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG StartingIndex,
- IN ULONG NumberToClear);
+#define ASSERT(exp) \
+ (VOID)((!(exp)) ? \
+ RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
-NTSYSAPI
-SIZE_T
-NTAPI
-RtlCompareMemory(
- IN CONST VOID *Source1,
- IN CONST VOID *Source2,
- IN SIZE_T Length);
+#define ASSERTMSG(msg, exp) \
+ (VOID)((!(exp)) ? \
+ RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
-NTSYSAPI
-LONG
-NTAPI
-RtlCompareUnicodeString(
- IN PCUNICODE_STRING String1,
- IN PCUNICODE_STRING String2,
- IN BOOLEAN CaseInSensitive);
+#define RTL_SOFT_ASSERT(exp) \
+ (VOID)((!(exp)) ? \
+ DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
-NTSYSAPI
-LONG
-NTAPI
-RtlCompareUnicodeStrings(
- IN PCWCH String1,
- IN SIZE_T String1Length,
- IN PCWCH String2,
- IN SIZE_T String2Length,
- IN BOOLEAN CaseInSensitive);
+#define RTL_SOFT_ASSERTMSG(msg, exp) \
+ (VOID)((!(exp)) ? \
+ DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
-NTSYSAPI
-VOID
-NTAPI
-RtlCopyUnicodeString(
- IN OUT PUNICODE_STRING DestinationString,
- IN PCUNICODE_STRING SourceString OPTIONAL);
+#define RTL_VERIFY(exp) ASSERT(exp)
+#define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp)
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlCreateRegistryKey(
- IN ULONG RelativeTo,
- IN PWSTR Path);
+#define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
+#define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlCreateSecurityDescriptor(
- IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN ULONG Revision);
+#if defined(_MSC_VER)
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlDeleteRegistryValue(
- IN ULONG RelativeTo,
- IN PCWSTR Path,
- IN PCWSTR ValueName);
+#define NT_ASSERT(exp) \
+ ((!(exp)) ? \
+ (__annotation(L"Debug", L"AssertFail", L#exp), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE)
-NTSYSAPI
-BOOLEAN
-NTAPI
-RtlEqualUnicodeString(
- IN CONST UNICODE_STRING *String1,
- IN CONST UNICODE_STRING *String2,
- IN BOOLEAN CaseInSensitive);
+#define NT_ASSERTMSG(msg, exp) \
+ ((!(exp)) ? \
+ (__annotation(L"Debug", L"AssertFail", L##msg), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE)
-#if !defined(_AMD64_) && !defined(_IA64_)
-NTSYSAPI
-LARGE_INTEGER
-NTAPI
-RtlExtendedIntegerMultiply(
- IN LARGE_INTEGER Multiplicand,
- IN LONG Multiplier);
+#define NT_ASSERTMSGW(msg, exp) \
+ ((!(exp)) ? \
+ (__annotation(L"Debug", L"AssertFail", msg), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE)
-NTSYSAPI
-LARGE_INTEGER
-NTAPI
-RtlExtendedLargeIntegerDivide(
- IN LARGE_INTEGER Dividend,
- IN ULONG Divisor,
- OUT PULONG Remainder OPTIONAL);
-#endif
+#else
+
+/* GCC doesn't support __annotation (nor PDB) */
+#define NT_ASSERT(exp) \
+ (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
+
+#define NT_ASSERTMSG NT_ASSERT
+#define NT_ASSERTMSGW NT_ASSERT
-#if defined(_X86_) || defined(_IA64_)
-NTSYSAPI
-LARGE_INTEGER
-NTAPI
-RtlExtendedMagicDivide(
- IN LARGE_INTEGER Dividend,
- IN LARGE_INTEGER MagicDivisor,
- IN CCHAR ShiftCount);
#endif
-NTSYSAPI
+#else /* !DBG */
+
+#define ASSERT(exp) ((VOID) 0)
+#define ASSERTMSG(msg, exp) ((VOID) 0)
+
+#define RTL_SOFT_ASSERT(exp) ((VOID) 0)
+#define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
+
+#define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
+#define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+
+#define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
+#define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+
+#define NT_ASSERT(exp) ((VOID)0)
+#define NT_ASSERTMSG(exp) ((VOID)0)
+#define NT_ASSERTMSGW(exp) ((VOID)0)
+
+#define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
+#define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
+#define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
+
+#endif /* DBG */
+
+#define InitializeListHead32(ListHead) (\
+ (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
+
+#if !defined(_WINBASE_)
+
+#if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
+
+NTKERNELAPI
VOID
-NTAPI
-RtlFreeAnsiString(
- IN PANSI_STRING AnsiString);
+InitializeSListHead(
+ OUT PSLIST_HEADER SListHead);
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindClearBits(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG NumberToFind,
- IN ULONG HintIndex);
+#else
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindClearBitsAndSet(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG NumberToFind,
- IN ULONG HintIndex);
+VOID
+FORCEINLINE
+InitializeSListHead(
+ OUT PSLIST_HEADER SListHead)
+{
+#if defined(_IA64_)
+ ULONG64 FeatureBits;
+#endif
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindFirstRunClear(
- IN PRTL_BITMAP BitMapHeader,
- OUT PULONG StartingIndex);
+#if defined(_WIN64)
+ if (((ULONG_PTR)SListHead & 0xf) != 0) {
+ RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT);
+ }
+#endif
+ RtlZeroMemory(SListHead, sizeof(SLIST_HEADER));
+#if defined(_IA64_)
+ FeatureBits = __getReg(CV_IA64_CPUID4);
+ if ((FeatureBits & KF_16BYTE_INSTR) != 0) {
+ SListHead->Header16.HeaderType = 1;
+ SListHead->Header16.Init = 1;
+ }
+#endif
+}
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindClearRuns(
- IN PRTL_BITMAP BitMapHeader,
- OUT PRTL_BITMAP_RUN RunArray,
- IN ULONG SizeOfRunArray,
- IN BOOLEAN LocateLongestRuns);
+#endif
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindLastBackwardRunClear(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG FromIndex,
- OUT PULONG StartingRunIndex);
+#if defined(_WIN64)
-NTSYSAPI
-CCHAR
-NTAPI
-RtlFindLeastSignificantBit(
- IN ULONGLONG Set);
+#define InterlockedPopEntrySList(Head) \
+ ExpInterlockedPopEntrySList(Head)
-NTSYSAPI
-ULONG
-NTAPI
-RtlFindLongestRunClear(
- IN PRTL_BITMAP BitMapHeader,
- OUT PULONG StartingIndex);
+#define InterlockedPushEntrySList(Head, Entry) \
+ ExpInterlockedPushEntrySList(Head, Entry)
-NTSYSAPI
-CCHAR
-NTAPI
-RtlFindMostSignificantBit(
- IN ULONGLONG Set);
+#define InterlockedFlushSList(Head) \
+ ExpInterlockedFlushSList(Head)
-NTSYSAPI
-ULONG
+#define QueryDepthSList(Head) \
+ ExQueryDepthSList(Head)
+
+#else /* !defined(_WIN64) */
+
+NTKERNELAPI
+PSLIST_ENTRY
+FASTCALL
+InterlockedPopEntrySList(
+ IN PSLIST_HEADER ListHead);
+
+NTKERNELAPI
+PSLIST_ENTRY
+FASTCALL
+InterlockedPushEntrySList(
+ IN PSLIST_HEADER ListHead,
+ IN PSLIST_ENTRY ListEntry);
+
+#define InterlockedFlushSList(ListHead) \
+ ExInterlockedFlushSList(ListHead)
+
+#define QueryDepthSList(Head) \
+ ExQueryDepthSList(Head)
+
+#endif /* !defined(_WIN64) */
+
+#endif /* !defined(_WINBASE_) */
+
+/******************************************************************************
+ * Kernel Functions *
+ ******************************************************************************/
+
+NTHALAPI
+KIRQL
NTAPI
-RtlFindNextForwardRunClear(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG FromIndex,
- OUT PULONG StartingRunIndex);
+KeGetCurrentIrql(
+ VOID);
-NTSYSAPI
-ULONG
+NTKERNELAPI
+VOID
NTAPI
-RtlFindSetBits(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG NumberToFind,
- IN ULONG HintIndex);
+KeInitializeEvent(
+ OUT PRKEVENT Event,
+ IN EVENT_TYPE Type,
+ IN BOOLEAN State);
-NTSYSAPI
-ULONG
+NTKERNELAPI
+VOID
NTAPI
-RtlFindSetBitsAndClear(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG NumberToFind,
- IN ULONG HintIndex);
+KeClearEvent(
+ IN OUT PRKEVENT Event);
-NTSYSAPI
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+
+#if defined(_NTDDK_) || defined(_NTIFS_)
+NTKERNELAPI
VOID
NTAPI
-RtlInitAnsiString(
- IN OUT PANSI_STRING DestinationString,
- IN PCSZ SourceString);
+ProbeForRead(
+ IN CONST VOID *Address, /* CONST is added */
+ IN SIZE_T Length,
+ IN ULONG Alignment);
+#endif /* defined(_NTDDK_) || defined(_NTIFS_) */
-NTSYSAPI
+NTKERNELAPI
VOID
NTAPI
-RtlInitializeBitMap(
- IN PRTL_BITMAP BitMapHeader,
- IN PULONG BitMapBuffer,
- IN ULONG SizeOfBitMap);
+ProbeForWrite(
+ IN PVOID Address,
+ IN SIZE_T Length,
+ IN ULONG Alignment);
-NTSYSAPI
+
+#if defined(SINGLE_GROUP_LEGACY_API)
+
+NTKERNELAPI
VOID
NTAPI
-RtlInitString(
- IN OUT PSTRING DestinationString,
- IN PCSZ SourceString);
+KeRevertToUserAffinityThread(VOID);
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+VOID
NTAPI
-RtlIntegerToUnicodeString(
- IN ULONG Value,
- IN ULONG Base OPTIONAL,
- IN OUT PUNICODE_STRING String);
+KeSetSystemAffinityThread(
+ IN KAFFINITY Affinity);
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+VOID
NTAPI
-RtlInt64ToUnicodeString(
- IN ULONGLONG Value,
- IN ULONG Base OPTIONAL,
- IN OUT PUNICODE_STRING String);
+KeSetTargetProcessorDpc(
+ IN OUT PRKDPC Dpc,
+ IN CCHAR Number);
-#ifdef _WIN64
-#define RtlIntPtrToUnicodeString(Value, Base, String) \
- RtlInt64ToUnicodeString(Value, Base, String)
-#else
-#define RtlIntPtrToUnicodeString(Value, Base, String) \
- RtlIntegerToUnicodeString(Value, Base, String)
-#endif
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeQueryActiveProcessors(VOID);
-/* BOOLEAN
- * RtlIsZeroLuid(
- * IN PLUID L1);
- */
-#define RtlIsZeroLuid(_L1) \
- ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
-NTSYSAPI
-ULONG
+#endif /* defined(SINGLE_GROUP_LEGACY_API) */
+
+#if !defined(_M_AMD64)
+NTKERNELAPI
+ULONGLONG
NTAPI
-RtlLengthSecurityDescriptor(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+KeQueryInterruptTime(VOID);
-NTSYSAPI
-ULONG
+NTKERNELAPI
+VOID
NTAPI
-RtlNumberOfClearBits(
- IN PRTL_BITMAP BitMapHeader);
+KeQuerySystemTime(
+ OUT PLARGE_INTEGER CurrentTime);
+#endif /* !_M_AMD64 */
-NTSYSAPI
-ULONG
+#if !defined(_X86_)
+NTKERNELAPI
+KIRQL
NTAPI
-RtlNumberOfSetBits(
- IN PRTL_BITMAP BitMapHeader);
+KeAcquireSpinLockRaiseToDpc(
+ IN OUT PKSPIN_LOCK SpinLock);
-NTSYSAPI
-NTSTATUS
+#define KeAcquireSpinLock(SpinLock, OldIrql) \
+ *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
+
+NTKERNELAPI
+VOID
NTAPI
-RtlQueryRegistryValues(
- IN ULONG RelativeTo,
- IN PCWSTR Path,
- IN OUT PRTL_QUERY_REGISTRY_TABLE QueryTable,
- IN PVOID Context OPTIONAL,
- IN PVOID Environment OPTIONAL);
+KeAcquireSpinLockAtDpcLevel(
+ IN OUT PKSPIN_LOCK SpinLock);
-#define SHORT_SIZE (sizeof(USHORT))
-#define SHORT_MASK (SHORT_SIZE - 1)
-#define LONG_SIZE (sizeof(LONG))
-#define LONGLONG_SIZE (sizeof(LONGLONG))
-#define LONG_MASK (LONG_SIZE - 1)
-#define LONGLONG_MASK (LONGLONG_SIZE - 1)
-#define LOWBYTE_MASK 0x00FF
+NTKERNELAPI
+VOID
+NTAPI
+KeReleaseSpinLock(
+ IN OUT PKSPIN_LOCK SpinLock,
+ IN KIRQL NewIrql);
-#define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK)
-#define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
-#define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK)
-#define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
+NTKERNELAPI
+VOID
+NTAPI
+KeReleaseSpinLockFromDpcLevel(
+ IN OUT PKSPIN_LOCK SpinLock);
+#endif /* !_X86_ */
-NTSYSAPI
+#if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
+NTKERNELAPI
VOID
NTAPI
-RtlSetAllBits(
- IN PRTL_BITMAP BitMapHeader);
+KeInitializeSpinLock(
+ IN PKSPIN_LOCK SpinLock);
+#else
+FORCEINLINE
+VOID
+KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock)
+{
+ /* Clear the lock */
+ *SpinLock = 0;
+}
+#endif
-NTSYSAPI
+NTKERNELAPI
+DECLSPEC_NORETURN
VOID
NTAPI
-RtlSetBits(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG StartingIndex,
- IN ULONG NumberToSet);
+KeBugCheckEx(
+ IN ULONG BugCheckCode,
+ IN ULONG_PTR BugCheckParameter1,
+ IN ULONG_PTR BugCheckParameter2,
+ IN ULONG_PTR BugCheckParameter3,
+ IN ULONG_PTR BugCheckParameter4);
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+BOOLEAN
NTAPI
-RtlSetDaclSecurityDescriptor(
- IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN BOOLEAN DaclPresent,
- IN PACL Dacl OPTIONAL,
- IN BOOLEAN DaclDefaulted OPTIONAL);
+KeCancelTimer(
+ IN OUT PKTIMER);
-#if defined(_AMD64_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeDelayExecutionThread(
+ IN KPROCESSOR_MODE WaitMode,
+ IN BOOLEAN Alertable,
+ IN PLARGE_INTEGER Interval);
-/* VOID
- * RtlStoreUlong(
- * IN PULONG Address,
- * IN ULONG Value);
- */
-#define RtlStoreUlong(Address,Value) \
- *(ULONG UNALIGNED *)(Address) = (Value)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeDeregisterBugCheckCallback(
+ IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
-/* VOID
- * RtlStoreUlonglong(
- * IN OUT PULONGLONG Address,
- * ULONGLONG Value);
- */
-#define RtlStoreUlonglong(Address,Value) \
- *(ULONGLONG UNALIGNED *)(Address) = (Value)
+NTKERNELAPI
+VOID
+NTAPI
+KeEnterCriticalRegion(VOID);
-/* VOID
- * RtlStoreUshort(
- * IN PUSHORT Address,
- * IN USHORT Value);
- */
-#define RtlStoreUshort(Address,Value) \
- *(USHORT UNALIGNED *)(Address) = (Value)
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeDeviceQueue(
+ OUT PKDEVICE_QUEUE DeviceQueue);
-/* VOID
- * RtlRetrieveUshort(
- * PUSHORT DestinationAddress,
- * PUSHORT SourceAddress);
- */
-#define RtlRetrieveUshort(DestAddress,SrcAddress) \
- *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeDpc(
+ OUT PRKDPC Dpc,
+ IN PKDEFERRED_ROUTINE DeferredRoutine,
+ IN PVOID DeferredContext OPTIONAL);
-/* VOID
- * RtlRetrieveUlong(
- * PULONG DestinationAddress,
- * PULONG SourceAddress);
- */
-#define RtlRetrieveUlong(DestAddress,SrcAddress) \
- *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeMutex(
+ OUT PRKMUTEX Mutex,
+ IN ULONG Level);
-#else
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeSemaphore(
+ OUT PRKSEMAPHORE Semaphore,
+ IN LONG Count,
+ IN LONG Limit);
-#define RtlStoreUlong(Address,Value) \
- if ((ULONG_PTR)(Address) & LONG_MASK) { \
- ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
- ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
- ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
- ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
- } \
- else { \
- *((PULONG)(Address)) = (ULONG) (Value); \
- }
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeTimer(
+ OUT PKTIMER Timer);
-#define RtlStoreUlonglong(Address,Value) \
- if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
- RtlStoreUlong((ULONG_PTR)(Address), \
- (ULONGLONG)(Value) & 0xFFFFFFFF); \
- RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
- (ULONGLONG)(Value) >> 32); \
- } else { \
- *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
- }
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeTimerEx(
+ OUT PKTIMER Timer,
+ IN TIMER_TYPE Type);
-#define RtlStoreUshort(Address,Value) \
- if ((ULONG_PTR)(Address) & SHORT_MASK) { \
- ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
- ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
- } \
- else { \
- *((PUSHORT) (Address)) = (USHORT)Value; \
- }
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeInsertByKeyDeviceQueue(
+ IN OUT PKDEVICE_QUEUE DeviceQueue,
+ IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,
+ IN ULONG SortKey);
-#define RtlRetrieveUshort(DestAddress,SrcAddress) \
- if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
- { \
- ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
- ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
- } \
- else \
- { \
- *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
- }
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeInsertDeviceQueue(
+ IN OUT PKDEVICE_QUEUE DeviceQueue,
+ IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
-#define RtlRetrieveUlong(DestAddress,SrcAddress) \
- if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
- { \
- ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
- ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
- ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
- ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
- } \
- else \
- { \
- *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
- }
-
-#endif /* defined(_AMD64_) */
-
-#ifdef _WIN64
-/* VOID
- * RtlStoreUlongPtr(
- * IN OUT PULONG_PTR Address,
- * IN ULONG_PTR Value);
- */
-#define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
-#else
-#define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
-#endif /* _WIN64 */
-
-
-NTSYSAPI
+NTKERNELAPI
BOOLEAN
NTAPI
-RtlTimeFieldsToTime(
- IN PTIME_FIELDS TimeFields,
- IN PLARGE_INTEGER Time);
+KeInsertQueueDpc(
+ IN OUT PRKDPC Dpc,
+ IN PVOID SystemArgument1 OPTIONAL,
+ IN PVOID SystemArgument2 OPTIONAL);
-NTSYSAPI
+NTKERNELAPI
VOID
NTAPI
-RtlTimeToTimeFields(
- IN PLARGE_INTEGER Time,
- IN PTIME_FIELDS TimeFields);
-
-NTSYSAPI
-ULONG
-FASTCALL
-RtlUlongByteSwap(
- IN ULONG Source);
+KeLeaveCriticalRegion(VOID);
-NTSYSAPI
-ULONGLONG
-FASTCALL
-RtlUlonglongByteSwap(
- IN ULONGLONG Source);
+NTHALAPI
+LARGE_INTEGER
+NTAPI
+KeQueryPerformanceCounter(
+ OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL);
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+KPRIORITY
NTAPI
-RtlUnicodeStringToAnsiString(
- IN OUT PANSI_STRING DestinationString,
- IN PCUNICODE_STRING SourceString,
- IN BOOLEAN AllocateDestinationString);
+KeQueryPriorityThread(
+ IN PRKTHREAD Thread);
-NTSYSAPI
+NTKERNELAPI
ULONG
NTAPI
-RtlxUnicodeStringToAnsiSize(
- IN PCUNICODE_STRING UnicodeString);
-
-#define RtlUnicodeStringToAnsiSize(String) ( \
- NLS_MB_CODE_PAGE_TAG ? \
- RtlxUnicodeStringToAnsiSize(String) : \
- ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
-)
+KeQueryTimeIncrement(VOID);
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+LONG
NTAPI
-RtlUnicodeStringToInteger(
- IN PCUNICODE_STRING String,
- IN ULONG Base OPTIONAL,
- OUT PULONG Value);
+KeReadStateEvent(
+ IN PRKEVENT Event);
-NTSYSAPI
-WCHAR
+NTKERNELAPI
+LONG
NTAPI
-RtlUpcaseUnicodeChar(
- IN WCHAR SourceCharacter);
+KeReadStateMutex(
+ IN PRKMUTEX Mutex);
-NTSYSAPI
-USHORT
-FASTCALL
-RtlUshortByteSwap(
- IN USHORT Source);
+NTKERNELAPI
+LONG
+NTAPI
+KeReadStateSemaphore(
+ IN PRKSEMAPHORE Semaphore);
-NTSYSAPI
+NTKERNELAPI
BOOLEAN
NTAPI
-RtlValidRelativeSecurityDescriptor(
- IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
- IN ULONG SecurityDescriptorLength,
- IN SECURITY_INFORMATION RequiredInformation);
+KeReadStateTimer(
+ IN PKTIMER Timer);
-NTSYSAPI
+NTKERNELAPI
BOOLEAN
NTAPI
-RtlValidSecurityDescriptor(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+KeRegisterBugCheckCallback(
+ OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
+ IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
+ IN PVOID Buffer,
+ IN ULONG Length,
+ IN PUCHAR Component);
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+LONG
NTAPI
-RtlWriteRegistryValue(
- IN ULONG RelativeTo,
- IN PCWSTR Path,
- IN PCWSTR ValueName,
- IN ULONG ValueType,
- IN PVOID ValueData,
- IN ULONG ValueLength);
-
+KeReleaseMutex(
+ IN OUT PRKMUTEX Mutex,
+ IN BOOLEAN Wait);
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+NTKERNELAPI
+LONG
+NTAPI
+KeReleaseSemaphore(
+ IN OUT PRKSEMAPHORE Semaphore,
+ IN KPRIORITY Increment,
+ IN LONG Adjustment,
+ IN BOOLEAN Wait);
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
+NTAPI
+KeRemoveByKeyDeviceQueue(
+ IN OUT PKDEVICE_QUEUE DeviceQueue,
+ IN ULONG SortKey);
-#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
-NTSYSAPI
-VOID
-FASTCALL
-RtlPrefetchMemoryNonTemporal(
- IN PVOID Source,
- IN SIZE_T Length);
-#endif
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
+NTAPI
+KeRemoveDeviceQueue(
+ IN OUT PKDEVICE_QUEUE DeviceQueue);
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRemoveEntryDeviceQueue(
+ IN OUT PKDEVICE_QUEUE DeviceQueue,
+ IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
-#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRemoveQueueDpc(
+ IN OUT PRKDPC Dpc);
+NTKERNELAPI
+LONG
+NTAPI
+KeResetEvent(
+ IN OUT PRKEVENT Event);
+NTKERNELAPI
+LONG
+NTAPI
+KeSetEvent(
+ IN OUT PRKEVENT Event,
+ IN KPRIORITY Increment,
+ IN BOOLEAN Wait);
-NTSYSAPI
+NTKERNELAPI
VOID
NTAPI
-RtlClearBit(
- PRTL_BITMAP BitMapHeader,
- ULONG BitNumber);
+KeSetImportanceDpc(
+ IN OUT PRKDPC Dpc,
+ IN KDPC_IMPORTANCE Importance);
-NTSYSAPI
-WCHAR
+NTKERNELAPI
+KPRIORITY
NTAPI
-RtlDowncaseUnicodeChar(
- IN WCHAR SourceCharacter);
+KeSetPriorityThread(
+ IN OUT PKTHREAD Thread,
+ IN KPRIORITY Priority);
-NTSYSAPI
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSetTimer(
+ IN OUT PKTIMER Timer,
+ IN LARGE_INTEGER DueTime,
+ IN PKDPC Dpc OPTIONAL);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSetTimerEx(
+ IN OUT PKTIMER Timer,
+ IN LARGE_INTEGER DueTime,
+ IN LONG Period OPTIONAL,
+ IN PKDPC Dpc OPTIONAL);
+
+NTHALAPI
VOID
NTAPI
-RtlSetBit(
- PRTL_BITMAP BitMapHeader,
- ULONG BitNumber);
+KeStallExecutionProcessor(
+ IN ULONG MicroSeconds);
-NTSYSAPI
+NTKERNELAPI
BOOLEAN
NTAPI
-RtlTestBit(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG BitNumber);
+KeSynchronizeExecution(
+ IN OUT PKINTERRUPT Interrupt,
+ IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
+ IN PVOID SynchronizeContext OPTIONAL);
-NTSYSAPI
+NTKERNELAPI
NTSTATUS
NTAPI
-RtlHashUnicodeString(
- IN CONST UNICODE_STRING *String,
- IN BOOLEAN CaseInSensitive,
- IN ULONG HashAlgorithm,
- OUT PULONG HashValue);
+KeWaitForMultipleObjects(
+ IN ULONG Count,
+ IN PVOID Object[],
+ IN WAIT_TYPE WaitType,
+ IN KWAIT_REASON WaitReason,
+ IN KPROCESSOR_MODE WaitMode,
+ IN BOOLEAN Alertable,
+ IN PLARGE_INTEGER Timeout OPTIONAL,
+ OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL);
+#define KeWaitForMutexObject KeWaitForSingleObject
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeWaitForSingleObject(
+ IN PVOID Object,
+ IN KWAIT_REASON WaitReason,
+ IN KPROCESSOR_MODE WaitMode,
+ IN BOOLEAN Alertable,
+ IN PLARGE_INTEGER Timeout OPTIONAL);
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+_DECL_HAL_KE_IMPORT
+VOID
+FASTCALL
+KeAcquireInStackQueuedSpinLock(
+ IN OUT PKSPIN_LOCK SpinLock,
+ OUT PKLOCK_QUEUE_HANDLE LockHandle);
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireInStackQueuedSpinLockAtDpcLevel(
+ IN OUT PKSPIN_LOCK SpinLock,
+ OUT PKLOCK_QUEUE_HANDLE LockHandle);
-NTSYSAPI
-ULONG
+NTKERNELAPI
+KIRQL
NTAPI
-RtlNumberOfSetBitsUlongPtr(
- IN ULONG_PTR Target);
+KeAcquireInterruptSpinLock(
+ IN OUT PKINTERRUPT Interrupt);
-NTSYSAPI
-ULONGLONG
+NTKERNELAPI
+BOOLEAN
NTAPI
-RtlIoDecodeMemIoResource (
- IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
- OUT PULONGLONG Alignment OPTIONAL,
- OUT PULONGLONG MinimumAddress OPTIONAL,
- OUT PULONGLONG MaximumAddress OPTIONAL);
+KeAreApcsDisabled(VOID);
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+ULONG
NTAPI
-RtlIoEncodeMemIoResource(
- IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
- IN UCHAR Type,
- IN ULONGLONG Length,
- IN ULONGLONG Alignment,
- IN ULONGLONG MinimumAddress,
- IN ULONGLONG MaximumAddress);
+KeGetRecommendedSharedDataAlignment(VOID);
-NTSYSAPI
-ULONGLONG
+NTKERNELAPI
+ULONG
NTAPI
-RtlCmDecodeMemIoResource(
- IN struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor,
- OUT PULONGLONG Start OPTIONAL);
+KeQueryRuntimeThread(
+ IN PKTHREAD Thread,
+ OUT PULONG UserTime);
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLockFromDpcLevel(
+ IN PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTKERNELAPI
+VOID
NTAPI
-RtlFindClosestEncodableLength(
- IN ULONGLONG SourceLength,
- OUT PULONGLONG TargetLength);
+KeReleaseInterruptSpinLock(
+ IN OUT PKINTERRUPT Interrupt,
+ IN KIRQL OldIrql);
-NTSYSAPI
-NTSTATUS
+NTKERNELAPI
+PKDEVICE_QUEUE_ENTRY
NTAPI
-RtlCmEncodeMemIoResource(
- IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
- IN UCHAR Type,
- IN ULONGLONG Length,
- IN ULONGLONG Start);
+KeRemoveByKeyDeviceQueueIfBusy(
+ IN OUT PKDEVICE_QUEUE DeviceQueue,
+ IN ULONG SortKey);
+
+_DECL_HAL_KE_IMPORT
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLock(
+ IN PKLOCK_QUEUE_HANDLE LockHandle);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeDeregisterBugCheckReasonCallback(
+ IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord);
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeRegisterBugCheckReasonCallback(
+ OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord,
+ IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine,
+ IN KBUGCHECK_CALLBACK_REASON Reason,
+ IN PUCHAR Component);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
-NTSYSAPI
-NTSTATUS
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
+NTKERNELAPI
+VOID
NTAPI
-RtlUnicodeToUTF8N(
- OUT PCHAR UTF8StringDestination,
- IN ULONG UTF8StringMaxByteCount,
- OUT PULONG UTF8StringActualByteCount,
- IN PCWCH UnicodeStringSource,
- IN ULONG UnicodeStringByteCount);
+KeFlushQueuedDpcs(VOID);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
-NTSYSAPI
+#if (NTDDI_VERSION >= NTDDI_WS03)
+
+NTKERNELAPI
+PVOID
+NTAPI
+KeRegisterNmiCallback(
+ IN PNMI_CALLBACK CallbackRoutine,
+ IN PVOID Context OPTIONAL);
+
+NTKERNELAPI
NTSTATUS
NTAPI
-RtlUTF8ToUnicodeN(
- OUT PWSTR UnicodeStringDestination,
- IN ULONG UnicodeStringMaxByteCount,
- OUT PULONG UnicodeStringActualByteCount,
- IN PCCH UTF8StringSource,
- IN ULONG UTF8StringByteCount);
+KeDeregisterNmiCallback(
+ IN PVOID Handle);
-NTSYSAPI
-ULONG64
+NTKERNELAPI
+VOID
NTAPI
-RtlGetEnabledExtendedFeatures(
- IN ULONG64 FeatureMask);
+KeInitializeThreadedDpc(
+ OUT PRKDPC Dpc,
+ IN PKDEFERRED_ROUTINE DeferredRoutine,
+ IN PVOID DeferredContext OPTIONAL);
+NTKERNELAPI
+ULONG_PTR
+NTAPI
+KeIpiGenericCall(
+ IN PKIPI_BROADCAST_WORKER BroadcastFunction,
+ IN ULONG_PTR Context);
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+NTKERNELAPI
+KIRQL
+FASTCALL
+KeAcquireSpinLockForDpc(
+ IN OUT PKSPIN_LOCK SpinLock);
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseSpinLockForDpc(
+ IN OUT PKSPIN_LOCK SpinLock,
+ IN KIRQL OldIrql);
-#if !defined(MIDL_PASS)
-/* inline funftions */
-//DECLSPEC_DEPRECATED_DDK_WINXP
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlConvertLongToLargeInteger(
- IN LONG SignedInteger)
-{
- LARGE_INTEGER ret;
- ret.QuadPart = SignedInteger;
- return ret;
-}
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTestSpinLock(
+ IN PKSPIN_LOCK SpinLock);
-//DECLSPEC_DEPRECATED_DDK_WINXP
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlConvertUlongToLargeInteger(
- IN ULONG UnsignedInteger)
-{
- LARGE_INTEGER ret;
- ret.QuadPart = UnsignedInteger;
- return ret;
-}
-//DECLSPEC_DEPRECATED_DDK_WINXP
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlLargeIntegerShiftLeft(
- IN LARGE_INTEGER LargeInteger,
- IN CCHAR ShiftCount)
-{
- LARGE_INTEGER Result;
+#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
- Result.QuadPart = LargeInteger.QuadPart << ShiftCount;
- return Result;
-}
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
-//DECLSPEC_DEPRECATED_DDK_WINXP
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlLargeIntegerShiftRight(
- IN LARGE_INTEGER LargeInteger,
- IN CCHAR ShiftCount)
-{
- LARGE_INTEGER Result;
- Result.QuadPart = (ULONG64)LargeInteger.QuadPart >> ShiftCount;
- return Result;
-}
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTryToAcquireSpinLockAtDpcLevel(
+ IN OUT PKSPIN_LOCK SpinLock);
-//DECLSPEC_DEPRECATED_DDK
-static __inline
-ULONG
-NTAPI_INLINE
-RtlEnlargedUnsignedDivide(
- IN ULARGE_INTEGER Dividend,
- IN ULONG Divisor,
- IN OUT PULONG Remainder)
-{
- if (Remainder)
- *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
- return (ULONG)(Dividend.QuadPart / Divisor);
-}
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeAreAllApcsDisabled(VOID);
-//DECLSPEC_DEPRECATED_DDK
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlLargeIntegerNegate(
- IN LARGE_INTEGER Subtrahend)
-{
- LARGE_INTEGER Difference;
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireGuardedMutex(
+ IN OUT PKGUARDED_MUTEX GuardedMutex);
- Difference.QuadPart = -Subtrahend.QuadPart;
- return Difference;
-}
-
-//DECLSPEC_DEPRECATED_DDK
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlLargeIntegerSubtract(
- IN LARGE_INTEGER Minuend,
- IN LARGE_INTEGER Subtrahend)
-{
- LARGE_INTEGER Difference;
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireGuardedMutexUnsafe(
+ IN OUT PKGUARDED_MUTEX GuardedMutex);
- Difference.QuadPart = Minuend.QuadPart - Subtrahend.QuadPart;
- return Difference;
-}
+NTKERNELAPI
+VOID
+NTAPI
+KeEnterGuardedRegion(VOID);
-//DECLSPEC_DEPRECATED_DDK
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlEnlargedUnsignedMultiply(
- IN ULONG Multiplicand,
- IN ULONG Multiplier)
-{
- LARGE_INTEGER ret;
- ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
- return ret;
-}
+NTKERNELAPI
+VOID
+NTAPI
+KeLeaveGuardedRegion(VOID);
-//DECLSPEC_DEPRECATED_DDK
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlEnlargedIntegerMultiply(
- IN LONG Multiplicand,
- IN LONG Multiplier)
-{
- LARGE_INTEGER ret;
- ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
- return ret;
-}
+NTKERNELAPI
+VOID
+FASTCALL
+KeInitializeGuardedMutex(
+ OUT PKGUARDED_MUTEX GuardedMutex);
-FORCEINLINE
+NTKERNELAPI
VOID
-RtlInitEmptyAnsiString(
- OUT PANSI_STRING AnsiString,
- IN PCHAR Buffer,
- IN USHORT BufferSize)
-{
- AnsiString->Length = 0;
- AnsiString->MaximumLength = BufferSize;
- AnsiString->Buffer = Buffer;
-}
+FASTCALL
+KeReleaseGuardedMutexUnsafe(
+ IN OUT PKGUARDED_MUTEX GuardedMutex);
-FORCEINLINE
+NTKERNELAPI
VOID
-RtlInitEmptyUnicodeString(
- OUT PUNICODE_STRING UnicodeString,
- IN PWSTR Buffer,
- IN USHORT BufferSize)
-{
- UnicodeString->Length = 0;
- UnicodeString->MaximumLength = BufferSize;
- UnicodeString->Buffer = Buffer;
-}
+FASTCALL
+KeReleaseGuardedMutex(
+ IN OUT PKGUARDED_MUTEX GuardedMutex);
-#if defined(_AMD64_) || defined(_IA64_)
+NTKERNELAPI
+BOOLEAN
+FASTCALL
+KeTryToAcquireGuardedMutex(
+ IN OUT PKGUARDED_MUTEX GuardedMutex);
+#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlExtendedIntegerMultiply(
- IN LARGE_INTEGER Multiplicand,
- IN LONG Multiplier)
-{
- LARGE_INTEGER ret;
- ret.QuadPart = Multiplicand.QuadPart * Multiplier;
- return ret;
-}
+#if (NTDDI_VERSION >= NTDDI_VISTA)
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlExtendedLargeIntegerDivide(
- IN LARGE_INTEGER Dividend,
- IN ULONG Divisor,
- OUT PULONG Remainder OPTIONAL)
-{
- LARGE_INTEGER ret;
- ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
- if (Remainder)
- *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
- return ret;
-}
+NTKERNELAPI
+VOID
+FASTCALL
+KeAcquireInStackQueuedSpinLockForDpc(
+ IN OUT PKSPIN_LOCK SpinLock,
+ OUT PKLOCK_QUEUE_HANDLE LockHandle);
+NTKERNELAPI
+VOID
+FASTCALL
+KeReleaseInStackQueuedSpinLockForDpc(
+ IN PKLOCK_QUEUE_HANDLE LockHandle);
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeQueryDpcWatchdogInformation(
+ OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation);
-#endif /* defined(_AMD64_) || defined(_IA64_) */
+#if defined(SINGLE_GROUP_LEGACY_API)
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeSetSystemAffinityThreadEx(
+ IN KAFFINITY Affinity);
-#if defined(_AMD64_)
+NTKERNELAPI
+VOID
+NTAPI
+KeRevertToUserAffinityThreadEx(
+ IN KAFFINITY Affinity);
-#define MultiplyHigh __mulh
-#define UnsignedMultiplyHigh __umulh
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryActiveProcessorCount(
+ OUT PKAFFINITY ActiveProcessors OPTIONAL);
-//DECLSPEC_DEPRECATED_DDK
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlExtendedMagicDivide(
- IN LARGE_INTEGER Dividend,
- IN LARGE_INTEGER MagicDivisor,
- IN CCHAR ShiftCount)
-{
- LARGE_INTEGER ret;
- ULONG64 ret64;
- BOOLEAN Pos;
- Pos = (Dividend.QuadPart >= 0);
- ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart,
- MagicDivisor.QuadPart);
- ret64 >>= ShiftCount;
- ret.QuadPart = Pos ? ret64 : -ret64;
- return ret;
-}
-#endif
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryMaximumProcessorCount(VOID);
+#endif /* SINGLE_GROUP_LEGACY_API */
-//DECLSPEC_DEPRECATED_DDK
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlLargeIntegerAdd(
- IN LARGE_INTEGER Addend1,
- IN LARGE_INTEGER Addend2)
-{
- LARGE_INTEGER ret;
- ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart;
- return ret;
-}
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-/* VOID
- * RtlLargeIntegerAnd(
- * IN OUT LARGE_INTEGER Result,
- * IN LARGE_INTEGER Source,
- * IN LARGE_INTEGER Mask);
- */
-#define RtlLargeIntegerAnd(Result, Source, Mask) \
- Result.QuadPart = Source.QuadPart & Mask.QuadPart
+#if (NTDDI_VERSION >= NTDDI_WS08)
-//DECLSPEC_DEPRECATED_DDK
-static __inline
-LARGE_INTEGER
-NTAPI_INLINE
-RtlLargeIntegerArithmeticShift(
- IN LARGE_INTEGER LargeInteger,
- IN CCHAR ShiftCount)
-{
- LARGE_INTEGER ret;
- ret.QuadPart = LargeInteger.QuadPart >> ShiftCount;
- return ret;
-}
+PVOID
+KeRegisterProcessorChangeCallback(
+ IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction,
+ IN PVOID CallbackContext OPTIONAL,
+ IN ULONG Flags);
-/* BOOLEAN
- * RtlLargeIntegerEqualTo(
- * IN LARGE_INTEGER Operand1,
- * IN LARGE_INTEGER Operand2);
- */
-#define RtlLargeIntegerEqualTo(X,Y) \
- (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
+VOID
+KeDeregisterProcessorChangeCallback(
+ IN PVOID CallbackHandle);
-FORCEINLINE
-PVOID
-RtlSecureZeroMemory(
- OUT PVOID Pointer,
- IN SIZE_T Size)
-{
- volatile char* vptr = (volatile char*)Pointer;
-#if defined(_M_AMD64)
- __stosb((PUCHAR)vptr, 0, Size);
-#else
- char * endptr = (char *)vptr + Size;
- while (vptr < endptr) {
- *vptr = 0; vptr++;
- }
-#endif
- return Pointer;
-}
+#endif /* (NTDDI_VERSION >= NTDDI_WS08) */
-#if defined(_M_AMD64)
-FORCEINLINE
-BOOLEAN
-RtlCheckBit(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG BitPosition)
-{
- return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition);
-}
-#else
-#define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
-#endif /* defined(_M_AMD64) */
+#if (NTDDI_VERSION >= NTDDI_WIN7)
-#define RtlLargeIntegerGreaterThan(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
- ((X).HighPart > (Y).HighPart) \
-)
-#define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
- ((X).HighPart > (Y).HighPart) \
-)
+ULONG64
+NTAPI
+KeQueryTotalCycleTimeProcess(
+ IN OUT PKPROCESS Process,
+ OUT PULONG64 CycleTimeStamp);
-#define RtlLargeIntegerNotEqualTo(X,Y) ( \
- (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
-)
+ULONG64
+NTAPI
+KeQueryTotalCycleTimeThread(
+ IN OUT PKTHREAD Thread,
+ OUT PULONG64 CycleTimeStamp);
-#define RtlLargeIntegerLessThan(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
- ((X).HighPart < (Y).HighPart) \
-)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeSetTargetProcessorDpcEx(
+ IN OUT PKDPC Dpc,
+ IN PPROCESSOR_NUMBER ProcNumber);
-#define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
- ((X).HighPart < (Y).HighPart) \
-)
+NTKERNELAPI
+VOID
+NTAPI
+KeSetSystemGroupAffinityThread(
+ IN PGROUP_AFFINITY Affinity,
+ OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL);
-#define RtlLargeIntegerGreaterThanZero(X) ( \
- (((X).HighPart == 0) && ((X).LowPart > 0)) || \
- ((X).HighPart > 0 ) \
-)
+NTKERNELAPI
+VOID
+NTAPI
+KeRevertToUserGroupAffinityThread(
+ IN PGROUP_AFFINITY PreviousAffinity);
-#define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeSetCoalescableTimer(
+ IN OUT PKTIMER Timer,
+ IN LARGE_INTEGER DueTime,
+ IN ULONG Period,
+ IN ULONG TolerableDelay,
+ IN PKDPC Dpc OPTIONAL);
-#define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
+NTKERNELAPI
+ULONGLONG
+NTAPI
+KeQueryUnbiasedInterruptTime(VOID);
-#define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryActiveProcessorCountEx(
+ IN USHORT GroupNumber);
-#define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
+NTKERNELAPI
+ULONG
+NTAPI
+KeQueryMaximumProcessorCountEx(
+ IN USHORT GroupNumber);
-#define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryActiveGroupCount(VOID);
-#endif /* !defined(MIDL_PASS) */
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryMaximumGroupCount(VOID);
-/* Byte Swap Functions */
-#if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
- ((defined(_M_AMD64) || defined(_M_IA64)) \
- && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
+NTKERNELAPI
+KAFFINITY
+NTAPI
+KeQueryGroupAffinity(
+ IN USHORT GroupNumber);
-#define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
-#define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
-#define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
+NTKERNELAPI
+ULONG
+NTAPI
+KeGetCurrentProcessorNumberEx(
+ OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL);
-#endif
+NTKERNELAPI
+VOID
+NTAPI
+KeQueryNodeActiveAffinity(
+ IN USHORT NodeNumber,
+ OUT PGROUP_AFFINITY Affinity OPTIONAL,
+ OUT PUSHORT Count OPTIONAL);
-#if DBG
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryNodeMaximumProcessorCount(
+ IN USHORT NodeNumber);
-#define ASSERT(exp) \
- (VOID)((!(exp)) ? \
- RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
+NTKERNELAPI
+USHORT
+NTAPI
+KeQueryHighestNodeNumber(VOID);
-#define ASSERTMSG(msg, exp) \
- (VOID)((!(exp)) ? \
- RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
+NTKERNELAPI
+USHORT
+NTAPI
+KeGetCurrentNodeNumber(VOID);
-#define RTL_SOFT_ASSERT(exp) \
- (VOID)((!(exp)) ? \
- DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeQueryLogicalProcessorRelationship(
+ IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL,
+ IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
+ OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL,
+ IN OUT PULONG Length);
-#define RTL_SOFT_ASSERTMSG(msg, exp) \
- (VOID)((!(exp)) ? \
- DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+KeSaveExtendedProcessorState(
+ IN ULONG64 Mask,
+ OUT PXSTATE_SAVE XStateSave);
-#define RTL_VERIFY(exp) ASSERT(exp)
-#define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp)
+NTKERNELAPI
+VOID
+NTAPI
+KeRestoreExtendedProcessorState(
+ IN PXSTATE_SAVE XStateSave);
-#define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
-#define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
+NTSTATUS
+NTAPI
+KeGetProcessorNumberFromIndex(
+ IN ULONG ProcIndex,
+ OUT PPROCESSOR_NUMBER ProcNumber);
-#if defined(_MSC_VER)
+ULONG
+NTAPI
+KeGetProcessorIndexFromNumber(
+ IN PPROCESSOR_NUMBER ProcNumber);
-#define NT_ASSERT(exp) \
- ((!(exp)) ? \
- (__annotation(L"Debug", L"AssertFail", L#exp), \
- DbgRaiseAssertionFailure(), FALSE) : TRUE)
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-#define NT_ASSERTMSG(msg, exp) \
- ((!(exp)) ? \
- (__annotation(L"Debug", L"AssertFail", L##msg), \
- DbgRaiseAssertionFailure(), FALSE) : TRUE)
+#if !defined(_IA64_)
+NTHALAPI
+VOID
+NTAPI
+KeFlushWriteBuffer(VOID);
+#endif
-#define NT_ASSERTMSGW(msg, exp) \
- ((!(exp)) ? \
- (__annotation(L"Debug", L"AssertFail", msg), \
- DbgRaiseAssertionFailure(), FALSE) : TRUE)
+/* VOID
+ * KeInitializeCallbackRecord(
+ * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
+ */
+#define KeInitializeCallbackRecord(CallbackRecord) \
+ CallbackRecord->State = BufferEmpty;
-#define NT_VERIFY NT_ASSERT
-#define NT_VERIFYMSG NT_ASSERTMSG
-#define NT_VERIFYMSGW NT_ASSERTMSGW
+#if DBG
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define PAGED_ASSERT( exp ) NT_ASSERT( exp )
#else
-
-/* GCC doesn't support __annotation (nor PDB) */
-#define NT_ASSERT(exp) \
- (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
-
-#define NT_ASSERTMSG NT_ASSERT
-#define NT_ASSERTMSGW NT_ASSERT
-
+#define PAGED_ASSERT( exp ) ASSERT( exp )
#endif
-#else /* !DBG */
+#define PAGED_CODE() { \
+ if (KeGetCurrentIrql() > APC_LEVEL) { \
+ KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
+ PAGED_ASSERT(FALSE); \
+ } \
+}
-#define ASSERT(exp) ((VOID) 0)
-#define ASSERTMSG(msg, exp) ((VOID) 0)
+#else
-#define RTL_SOFT_ASSERT(exp) ((VOID) 0)
-#define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
+#define PAGED_CODE()
-#define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
-#define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+#endif /* DBG */
-#define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
-#define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+#define PAGED_CODE_LOCKED() NOP_FUNCTION;
-#define NT_ASSERT(exp) ((VOID)0)
-#define NT_ASSERTMSG(msg, exp) ((VOID)0)
-#define NT_ASSERTMSGW(msg, exp) ((VOID)0)
+/******************************************************************************
+ * Memory manager Functions *
+ ******************************************************************************/
+/* Alignment Macros */
+#define ALIGN_DOWN_BY(size, align) \
+ ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
-#define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
-#define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
-#define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
+#define ALIGN_UP_BY(size, align) \
+ (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
-#endif /* DBG */
+#define ALIGN_DOWN_POINTER_BY(ptr, align) \
+ ((PVOID)ALIGN_DOWN_BY(ptr, align))
-#define InitializeListHead32(ListHead) (\
- (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
+#define ALIGN_UP_POINTER_BY(ptr, align) \
+ ((PVOID)ALIGN_UP_BY(ptr, align))
-#if !defined(_WINBASE_)
+#define ALIGN_DOWN(size, type) \
+ ALIGN_DOWN_BY(size, sizeof(type))
-#if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
+#define ALIGN_UP(size, type) \
+ ALIGN_UP_BY(size, sizeof(type))
-NTKERNELAPI
-VOID
-InitializeSListHead(
- OUT PSLIST_HEADER SListHead);
+#define ALIGN_DOWN_POINTER(ptr, type) \
+ ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
-#else
+#define ALIGN_UP_POINTER(ptr, type) \
+ ALIGN_UP_POINTER_BY(ptr, sizeof(type))
-VOID
-FORCEINLINE
-InitializeSListHead(
- OUT PSLIST_HEADER SListHead)
-{
-#if defined(_IA64_)
- ULONG64 FeatureBits;
-#endif
-
-#if defined(_WIN64)
- if (((ULONG_PTR)SListHead & 0xf) != 0) {
- RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT);
- }
-#endif
- RtlZeroMemory(SListHead, sizeof(SLIST_HEADER));
-#if defined(_IA64_)
- FeatureBits = __getReg(CV_IA64_CPUID4);
- if ((FeatureBits & KF_16BYTE_INSTR) != 0) {
- SListHead->Header16.HeaderType = 1;
- SListHead->Header16.Init = 1;
- }
-#endif
-}
-
-#endif
-
-#if defined(_WIN64)
-
-#define InterlockedPopEntrySList(Head) \
- ExpInterlockedPopEntrySList(Head)
-
-#define InterlockedPushEntrySList(Head, Entry) \
- ExpInterlockedPushEntrySList(Head, Entry)
-
-#define InterlockedFlushSList(Head) \
- ExpInterlockedFlushSList(Head)
-
-#define QueryDepthSList(Head) \
- ExQueryDepthSList(Head)
-
-#else /* !defined(_WIN64) */
-
-NTKERNELAPI
-PSLIST_ENTRY
-FASTCALL
-InterlockedPopEntrySList(
- IN PSLIST_HEADER ListHead);
-
-NTKERNELAPI
-PSLIST_ENTRY
-FASTCALL
-InterlockedPushEntrySList(
- IN PSLIST_HEADER ListHead,
- IN PSLIST_ENTRY ListEntry);
-
-#define InterlockedFlushSList(ListHead) \
- ExInterlockedFlushSList(ListHead)
-
-#define QueryDepthSList(Head) \
- ExQueryDepthSList(Head)
+/* ULONG
+ * BYTE_OFFSET(
+ * IN PVOID Va)
+ */
+#define BYTE_OFFSET(Va) \
+ ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
-#endif /* !defined(_WIN64) */
+/* ULONG
+ * BYTES_TO_PAGES(
+ * IN ULONG Size)
+ */
+#define BYTES_TO_PAGES(Size) \
+ (((Size) >> PAGE_SHIFT) + (((Size) & (PAGE_SIZE - 1)) != 0))
-#endif /* !defined(_WINBASE_) */
+/* PVOID
+ * PAGE_ALIGN(
+ * IN PVOID Va)
+ */
+#define PAGE_ALIGN(Va) \
+ ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
-#define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
-#define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
-#define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \
- ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
-#define RTL_CONTEXT_OFFSET(Context, Chunk) \
- RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
-#define RTL_CONTEXT_LENGTH(Context, Chunk) \
- RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
-#define RTL_CONTEXT_CHUNK(Context, Chunk) \
- RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \
- (PCONTEXT_EX)(Context + 1), \
- Chunk)
+/* ULONG_PTR
+ * ROUND_TO_PAGES(
+ * IN ULONG_PTR Size)
+ */
+#define ROUND_TO_PAGES(Size) \
+ (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
-BOOLEAN
-RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable)(
- IN ULONG Version);
+/* ULONG
+ * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
+ * IN PVOID Va,
+ * IN ULONG Size)
+ */
+#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
+ ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
+ + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
-BOOLEAN
-RTLVERLIB_DDI(RtlIsServicePackVersionInstalled)(
- IN ULONG Version);
+#define COMPUTE_PAGES_SPANNED(Va, Size) \
+ ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
-#ifndef RtlIsNtDdiVersionAvailable
-#define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
-#endif
+/*
+ * ULONG
+ * MmGetMdlByteCount(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlByteCount(_Mdl) \
+ ((_Mdl)->ByteCount)
-#ifndef RtlIsServicePackVersionInstalled
-#define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
-#endif
+/*
+ * ULONG
+ * MmGetMdlByteOffset(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlByteOffset(_Mdl) \
+ ((_Mdl)->ByteOffset)
-#define RtlInterlockedSetBits(Flags, Flag) \
- InterlockedOr((PLONG)(Flags), Flag)
+#define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
-#define RtlInterlockedAndBits(Flags, Flag) \
- InterlockedAnd((PLONG)(Flags), Flag)
+/*
+ * PPFN_NUMBER
+ * MmGetMdlPfnArray(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlPfnArray(_Mdl) \
+ ((PPFN_NUMBER) ((_Mdl) + 1))
-#define RtlInterlockedClearBits(Flags, Flag) \
- RtlInterlockedAndBits(Flags, ~(Flag))
+/*
+ * PVOID
+ * MmGetMdlVirtualAddress(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlVirtualAddress(_Mdl) \
+ ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
-#define RtlInterlockedXorBits(Flags, Flag) \
- InterlockedXor(Flags, Flag)
+#define MmGetProcedureAddress(Address) (Address)
-#define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
- (VOID) RtlInterlockedSetBits(Flags, Flag)
+/* PVOID MmGetSystemAddressForMdl(
+ * IN PMDL Mdl);
+ */
+#define MmGetSystemAddressForMdl(Mdl) \
+ (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
+ MDL_SOURCE_IS_NONPAGED_POOL)) ? \
+ ((Mdl)->MappedSystemVa) : \
+ (MmMapLockedPages((Mdl), KernelMode)))
-#define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
- (VOID) RtlInterlockedAndBits(Flags, Flag)
+/* PVOID
+ * MmGetSystemAddressForMdlSafe(
+ * IN PMDL Mdl,
+ * IN MM_PAGE_PRIORITY Priority)
+ */
+#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
+ (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
+ | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
+ (_Mdl)->MappedSystemVa : \
+ (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
+ KernelMode, MmCached, NULL, FALSE, (_Priority)))
-#define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
- RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
+/*
+ * VOID
+ * MmInitializeMdl(
+ * IN PMDL MemoryDescriptorList,
+ * IN PVOID BaseVa,
+ * IN SIZE_T Length)
+ */
+#define MmInitializeMdl(_MemoryDescriptorList, \
+ _BaseVa, \
+ _Length) \
+{ \
+ (_MemoryDescriptorList)->Next = (PMDL) NULL; \
+ (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
+ (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
+ (_MemoryDescriptorList)->MdlFlags = 0; \
+ (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
+ (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
+ (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
+}
+/*
+ * VOID
+ * MmPrepareMdlForReuse(
+ * IN PMDL Mdl)
+ */
+#define MmPrepareMdlForReuse(_Mdl) \
+{ \
+ if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
+ ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
+ MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
+ } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
+ ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
+ } \
+}
-/******************************************************************************
- * Kernel Functions *
- ******************************************************************************/
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTKERNELAPI
-VOID
+PVOID
NTAPI
-KeInitializeEvent(
- OUT PRKEVENT Event,
- IN EVENT_TYPE Type,
- IN BOOLEAN State);
+MmAllocateContiguousMemory(
+ IN SIZE_T NumberOfBytes,
+ IN PHYSICAL_ADDRESS HighestAcceptableAddress);
NTKERNELAPI
-VOID
+PVOID
NTAPI
-KeClearEvent(
- IN OUT PRKEVENT Event);
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
+MmAllocateContiguousMemorySpecifyCache(
+ IN SIZE_T NumberOfBytes,
+ IN PHYSICAL_ADDRESS LowestAcceptableAddress,
+ IN PHYSICAL_ADDRESS HighestAcceptableAddress,
+ IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
+ IN MEMORY_CACHING_TYPE CacheType);
-#if defined(_NTDDK_) || defined(_NTIFS_)
NTKERNELAPI
-VOID
+PMDL
NTAPI
-ProbeForRead(
- IN CONST VOID *Address, /* CONST is added */
- IN SIZE_T Length,
- IN ULONG Alignment);
-#endif /* defined(_NTDDK_) || defined(_NTIFS_) */
+MmAllocatePagesForMdl(
+ IN PHYSICAL_ADDRESS LowAddress,
+ IN PHYSICAL_ADDRESS HighAddress,
+ IN PHYSICAL_ADDRESS SkipBytes,
+ IN SIZE_T TotalBytes);
NTKERNELAPI
VOID
NTAPI
-ProbeForWrite(
- IN PVOID Address,
- IN SIZE_T Length,
- IN ULONG Alignment);
-
+MmBuildMdlForNonPagedPool(
+ IN OUT PMDLX MemoryDescriptorList);
-#if defined(SINGLE_GROUP_LEGACY_API)
+//DECLSPEC_DEPRECATED_DDK
+NTKERNELAPI
+PMDL
+NTAPI
+MmCreateMdl(
+ IN PMDL MemoryDescriptorList OPTIONAL,
+ IN PVOID Base,
+ IN SIZE_T Length);
NTKERNELAPI
VOID
NTAPI
-KeRevertToUserAffinityThread(VOID);
+MmFreeContiguousMemory(
+ IN PVOID BaseAddress);
NTKERNELAPI
VOID
NTAPI
-KeSetSystemAffinityThread(
- IN KAFFINITY Affinity);
+MmFreeContiguousMemorySpecifyCache(
+ IN PVOID BaseAddress,
+ IN SIZE_T NumberOfBytes,
+ IN MEMORY_CACHING_TYPE CacheType);
NTKERNELAPI
VOID
NTAPI
-KeSetTargetProcessorDpc(
- IN OUT PRKDPC Dpc,
- IN CCHAR Number);
+MmFreePagesFromMdl(
+ IN PMDLX MemoryDescriptorList);
NTKERNELAPI
-KAFFINITY
+PVOID
NTAPI
-KeQueryActiveProcessors(VOID);
-
-
-#endif /* defined(SINGLE_GROUP_LEGACY_API) */
-
-#if !defined(_M_AMD64)
-NTKERNELAPI
-ULONGLONG
-NTAPI
-KeQueryInterruptTime(VOID);
+MmGetSystemRoutineAddress(
+ IN PUNICODE_STRING SystemRoutineName);
NTKERNELAPI
-VOID
+LOGICAL
NTAPI
-KeQuerySystemTime(
- OUT PLARGE_INTEGER CurrentTime);
-#endif /* !_M_AMD64 */
+MmIsDriverVerifying(
+ IN struct _DRIVER_OBJECT *DriverObject);
-#if !defined(_X86_)
NTKERNELAPI
-KIRQL
+PVOID
NTAPI
-KeAcquireSpinLockRaiseToDpc(
- IN OUT PKSPIN_LOCK SpinLock);
-
-#define KeAcquireSpinLock(SpinLock, OldIrql) \
- *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
+MmLockPagableDataSection(
+ IN PVOID AddressWithinSection);
NTKERNELAPI
-VOID
+PVOID
NTAPI
-KeAcquireSpinLockAtDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock);
+MmMapIoSpace(
+ IN PHYSICAL_ADDRESS PhysicalAddress,
+ IN SIZE_T NumberOfBytes,
+ IN MEMORY_CACHING_TYPE CacheEnable);
NTKERNELAPI
-VOID
+PVOID
NTAPI
-KeReleaseSpinLock(
- IN OUT PKSPIN_LOCK SpinLock,
- IN KIRQL NewIrql);
+MmMapLockedPages(
+ IN PMDL MemoryDescriptorList,
+ IN KPROCESSOR_MODE AccessMode);
NTKERNELAPI
-VOID
+PVOID
NTAPI
-KeReleaseSpinLockFromDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock);
-#endif /* !_X86_ */
+MmMapLockedPagesSpecifyCache(
+ IN PMDLX MemoryDescriptorList,
+ IN KPROCESSOR_MODE AccessMode,
+ IN MEMORY_CACHING_TYPE CacheType,
+ IN PVOID BaseAddress OPTIONAL,
+ IN ULONG BugCheckOnFailure,
+ IN MM_PAGE_PRIORITY Priority);
-#if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
NTKERNELAPI
-VOID
+PVOID
NTAPI
-KeInitializeSpinLock(
- IN PKSPIN_LOCK SpinLock);
-#else
-FORCEINLINE
-VOID
-KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock)
-{
- /* Clear the lock */
- *SpinLock = 0;
-}
-#endif
+MmPageEntireDriver(
+ IN PVOID AddressWithinSection);
NTKERNELAPI
-DECLSPEC_NORETURN
VOID
NTAPI
-KeBugCheckEx(
- IN ULONG BugCheckCode,
- IN ULONG_PTR BugCheckParameter1,
- IN ULONG_PTR BugCheckParameter2,
- IN ULONG_PTR BugCheckParameter3,
- IN ULONG_PTR BugCheckParameter4);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeCancelTimer(
- IN OUT PKTIMER);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-KeDelayExecutionThread(
- IN KPROCESSOR_MODE WaitMode,
- IN BOOLEAN Alertable,
- IN PLARGE_INTEGER Interval);
+MmProbeAndLockPages(
+ IN OUT PMDL MemoryDescriptorList,
+ IN KPROCESSOR_MODE AccessMode,
+ IN LOCK_OPERATION Operation);
NTKERNELAPI
-BOOLEAN
+MM_SYSTEMSIZE
NTAPI
-KeDeregisterBugCheckCallback(
- IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
+MmQuerySystemSize(VOID);
NTKERNELAPI
VOID
NTAPI
-KeEnterCriticalRegion(VOID);
+MmResetDriverPaging(
+ IN PVOID AddressWithinSection);
NTKERNELAPI
-VOID
+SIZE_T
NTAPI
-KeInitializeDeviceQueue(
- OUT PKDEVICE_QUEUE DeviceQueue);
+MmSizeOfMdl(
+ IN PVOID Base,
+ IN SIZE_T Length);
NTKERNELAPI
VOID
NTAPI
-KeInitializeDpc(
- OUT PRKDPC Dpc,
- IN PKDEFERRED_ROUTINE DeferredRoutine,
- IN PVOID DeferredContext OPTIONAL);
+MmUnlockPagableImageSection(
+ IN PVOID ImageSectionHandle);
NTKERNELAPI
VOID
NTAPI
-KeInitializeMutex(
- OUT PRKMUTEX Mutex,
- IN ULONG Level);
+MmUnlockPages(
+ IN OUT PMDL MemoryDescriptorList);
NTKERNELAPI
VOID
NTAPI
-KeInitializeSemaphore(
- OUT PRKSEMAPHORE Semaphore,
- IN LONG Count,
- IN LONG Limit);
+MmUnmapIoSpace(
+ IN PVOID BaseAddress,
+ IN SIZE_T NumberOfBytes);
NTKERNELAPI
VOID
NTAPI
-KeInitializeTimer(
- OUT PKTIMER Timer);
+MmProbeAndLockProcessPages(
+ IN OUT PMDL MemoryDescriptorList,
+ IN PEPROCESS Process,
+ IN KPROCESSOR_MODE AccessMode,
+ IN LOCK_OPERATION Operation);
NTKERNELAPI
VOID
NTAPI
-KeInitializeTimerEx(
- OUT PKTIMER Timer,
- IN TIMER_TYPE Type);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeInsertByKeyDeviceQueue(
- IN OUT PKDEVICE_QUEUE DeviceQueue,
- IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,
- IN ULONG SortKey);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeInsertDeviceQueue(
- IN OUT PKDEVICE_QUEUE DeviceQueue,
- IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeInsertQueueDpc(
- IN OUT PRKDPC Dpc,
- IN PVOID SystemArgument1 OPTIONAL,
- IN PVOID SystemArgument2 OPTIONAL);
+MmUnmapLockedPages(
+ IN PVOID BaseAddress,
+ IN PMDL MemoryDescriptorList);
-NTKERNELAPI
-VOID
-NTAPI
-KeLeaveCriticalRegion(VOID);
-NTHALAPI
-LARGE_INTEGER
-NTAPI
-KeQueryPerformanceCounter(
- OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL);
-NTKERNELAPI
-KPRIORITY
-NTAPI
-KeQueryPriorityThread(
- IN PRKTHREAD Thread);
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-NTKERNELAPI
-ULONG
-NTAPI
-KeQueryTimeIncrement(VOID);
+#if (NTDDI_VERSION >= NTDDI_WINXP)
NTKERNELAPI
-LONG
+NTSTATUS
NTAPI
-KeReadStateEvent(
- IN PRKEVENT Event);
+MmAdvanceMdl(
+ IN OUT PMDL Mdl,
+ IN ULONG NumberOfBytes);
NTKERNELAPI
-LONG
+PVOID
NTAPI
-KeReadStateMutex(
- IN PRKMUTEX Mutex);
+MmAllocateMappingAddress(
+ IN SIZE_T NumberOfBytes,
+ IN ULONG PoolTag);
NTKERNELAPI
-LONG
+VOID
NTAPI
-KeReadStateSemaphore(
- IN PRKSEMAPHORE Semaphore);
+MmFreeMappingAddress(
+ IN PVOID BaseAddress,
+ IN ULONG PoolTag);
NTKERNELAPI
-BOOLEAN
+NTSTATUS
NTAPI
-KeReadStateTimer(
- IN PKTIMER Timer);
+MmIsVerifierEnabled(
+ OUT PULONG VerifierFlags);
NTKERNELAPI
-BOOLEAN
+PVOID
NTAPI
-KeRegisterBugCheckCallback(
- OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
- IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
- IN PVOID Buffer,
- IN ULONG Length,
- IN PUCHAR Component);
+MmMapLockedPagesWithReservedMapping(
+ IN PVOID MappingAddress,
+ IN ULONG PoolTag,
+ IN PMDL MemoryDescriptorList,
+ IN MEMORY_CACHING_TYPE CacheType);
NTKERNELAPI
-LONG
+NTSTATUS
NTAPI
-KeReleaseMutex(
- IN OUT PRKMUTEX Mutex,
- IN BOOLEAN Wait);
+MmProtectMdlSystemAddress(
+ IN PMDL MemoryDescriptorList,
+ IN ULONG NewProtect);
NTKERNELAPI
-LONG
+VOID
NTAPI
-KeReleaseSemaphore(
- IN OUT PRKSEMAPHORE Semaphore,
- IN KPRIORITY Increment,
- IN LONG Adjustment,
- IN BOOLEAN Wait);
+MmUnmapReservedMapping(
+ IN PVOID BaseAddress,
+ IN ULONG PoolTag,
+ IN PMDL MemoryDescriptorList);
-NTKERNELAPI
-PKDEVICE_QUEUE_ENTRY
-NTAPI
-KeRemoveByKeyDeviceQueue(
- IN OUT PKDEVICE_QUEUE DeviceQueue,
- IN ULONG SortKey);
+#endif
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
NTKERNELAPI
-PKDEVICE_QUEUE_ENTRY
+PMDL
NTAPI
-KeRemoveDeviceQueue(
- IN OUT PKDEVICE_QUEUE DeviceQueue);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeRemoveEntryDeviceQueue(
- IN OUT PKDEVICE_QUEUE DeviceQueue,
- IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeRemoveQueueDpc(
- IN OUT PRKDPC Dpc);
-
-NTKERNELAPI
-LONG
-NTAPI
-KeResetEvent(
- IN OUT PRKEVENT Event);
-
-NTKERNELAPI
-LONG
-NTAPI
-KeSetEvent(
- IN OUT PRKEVENT Event,
- IN KPRIORITY Increment,
- IN BOOLEAN Wait);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeSetImportanceDpc(
- IN OUT PRKDPC Dpc,
- IN KDPC_IMPORTANCE Importance);
-
-NTKERNELAPI
-KPRIORITY
-NTAPI
-KeSetPriorityThread(
- IN OUT PKTHREAD Thread,
- IN KPRIORITY Priority);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeSetTimer(
- IN OUT PKTIMER Timer,
- IN LARGE_INTEGER DueTime,
- IN PKDPC Dpc OPTIONAL);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeSetTimerEx(
- IN OUT PKTIMER Timer,
- IN LARGE_INTEGER DueTime,
- IN LONG Period OPTIONAL,
- IN PKDPC Dpc OPTIONAL);
-
-NTHALAPI
-VOID
-NTAPI
-KeStallExecutionProcessor(
- IN ULONG MicroSeconds);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeSynchronizeExecution(
- IN OUT PKINTERRUPT Interrupt,
- IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
- IN PVOID SynchronizeContext OPTIONAL);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-KeWaitForMultipleObjects(
- IN ULONG Count,
- IN PVOID Object[],
- IN WAIT_TYPE WaitType,
- IN KWAIT_REASON WaitReason,
- IN KPROCESSOR_MODE WaitMode,
- IN BOOLEAN Alertable,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL);
-
-#define KeWaitForMutexObject KeWaitForSingleObject
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-KeWaitForSingleObject(
- IN PVOID Object,
- IN KWAIT_REASON WaitReason,
- IN KPROCESSOR_MODE WaitMode,
- IN BOOLEAN Alertable,
- IN PLARGE_INTEGER Timeout OPTIONAL);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-
-_DECL_HAL_KE_IMPORT
-VOID
-FASTCALL
-KeAcquireInStackQueuedSpinLock(
- IN OUT PKSPIN_LOCK SpinLock,
- OUT PKLOCK_QUEUE_HANDLE LockHandle);
-
-NTKERNELAPI
-VOID
-FASTCALL
-KeAcquireInStackQueuedSpinLockAtDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock,
- OUT PKLOCK_QUEUE_HANDLE LockHandle);
-
-NTKERNELAPI
-KIRQL
-NTAPI
-KeAcquireInterruptSpinLock(
- IN OUT PKINTERRUPT Interrupt);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeAreApcsDisabled(VOID);
-
-NTKERNELAPI
-ULONG
-NTAPI
-KeGetRecommendedSharedDataAlignment(VOID);
-
-NTKERNELAPI
-ULONG
-NTAPI
-KeQueryRuntimeThread(
- IN PKTHREAD Thread,
- OUT PULONG UserTime);
-
-NTKERNELAPI
-VOID
-FASTCALL
-KeReleaseInStackQueuedSpinLockFromDpcLevel(
- IN PKLOCK_QUEUE_HANDLE LockHandle);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeReleaseInterruptSpinLock(
- IN OUT PKINTERRUPT Interrupt,
- IN KIRQL OldIrql);
-
-NTKERNELAPI
-PKDEVICE_QUEUE_ENTRY
-NTAPI
-KeRemoveByKeyDeviceQueueIfBusy(
- IN OUT PKDEVICE_QUEUE DeviceQueue,
- IN ULONG SortKey);
-
-_DECL_HAL_KE_IMPORT
-VOID
-FASTCALL
-KeReleaseInStackQueuedSpinLock(
- IN PKLOCK_QUEUE_HANDLE LockHandle);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeDeregisterBugCheckReasonCallback(
- IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeRegisterBugCheckReasonCallback(
- OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord,
- IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine,
- IN KBUGCHECK_CALLBACK_REASON Reason,
- IN PUCHAR Component);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
-NTKERNELAPI
-VOID
-NTAPI
-KeFlushQueuedDpcs(VOID);
-#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
-
-#if (NTDDI_VERSION >= NTDDI_WS03)
-
-NTKERNELAPI
-PVOID
-NTAPI
-KeRegisterNmiCallback(
- IN PNMI_CALLBACK CallbackRoutine,
- IN PVOID Context OPTIONAL);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-KeDeregisterNmiCallback(
- IN PVOID Handle);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeInitializeThreadedDpc(
- OUT PRKDPC Dpc,
- IN PKDEFERRED_ROUTINE DeferredRoutine,
- IN PVOID DeferredContext OPTIONAL);
-
-NTKERNELAPI
-ULONG_PTR
-NTAPI
-KeIpiGenericCall(
- IN PKIPI_BROADCAST_WORKER BroadcastFunction,
- IN ULONG_PTR Context);
-
-NTKERNELAPI
-KIRQL
-FASTCALL
-KeAcquireSpinLockForDpc(
- IN OUT PKSPIN_LOCK SpinLock);
-
-NTKERNELAPI
-VOID
-FASTCALL
-KeReleaseSpinLockForDpc(
- IN OUT PKSPIN_LOCK SpinLock,
- IN KIRQL OldIrql);
-
-NTKERNELAPI
-BOOLEAN
-FASTCALL
-KeTestSpinLock(
- IN PKSPIN_LOCK SpinLock);
-
-
-#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
-
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
-
-
-NTKERNELAPI
-BOOLEAN
-FASTCALL
-KeTryToAcquireSpinLockAtDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeAreAllApcsDisabled(VOID);
-
-NTKERNELAPI
-VOID
-FASTCALL
-KeAcquireGuardedMutex(
- IN OUT PKGUARDED_MUTEX GuardedMutex);
-
-NTKERNELAPI
-VOID
-FASTCALL
-KeAcquireGuardedMutexUnsafe(
- IN OUT PKGUARDED_MUTEX GuardedMutex);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeEnterGuardedRegion(VOID);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeLeaveGuardedRegion(VOID);
-
-NTKERNELAPI
-VOID
-FASTCALL
-KeInitializeGuardedMutex(
- OUT PKGUARDED_MUTEX GuardedMutex);
-
-NTKERNELAPI
-VOID
-FASTCALL
-KeReleaseGuardedMutexUnsafe(
- IN OUT PKGUARDED_MUTEX GuardedMutex);
-
-NTKERNELAPI
-VOID
-FASTCALL
-KeReleaseGuardedMutex(
- IN OUT PKGUARDED_MUTEX GuardedMutex);
-
-NTKERNELAPI
-BOOLEAN
-FASTCALL
-KeTryToAcquireGuardedMutex(
- IN OUT PKGUARDED_MUTEX GuardedMutex);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-NTKERNELAPI
-VOID
-FASTCALL
-KeAcquireInStackQueuedSpinLockForDpc(
- IN OUT PKSPIN_LOCK SpinLock,
- OUT PKLOCK_QUEUE_HANDLE LockHandle);
-
-NTKERNELAPI
-VOID
-FASTCALL
-KeReleaseInStackQueuedSpinLockForDpc(
- IN PKLOCK_QUEUE_HANDLE LockHandle);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-KeQueryDpcWatchdogInformation(
- OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation);
-
-#if defined(SINGLE_GROUP_LEGACY_API)
-
-NTKERNELAPI
-KAFFINITY
-NTAPI
-KeSetSystemAffinityThreadEx(
- IN KAFFINITY Affinity);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeRevertToUserAffinityThreadEx(
- IN KAFFINITY Affinity);
-
-NTKERNELAPI
-ULONG
-NTAPI
-KeQueryActiveProcessorCount(
- OUT PKAFFINITY ActiveProcessors OPTIONAL);
-
-NTKERNELAPI
-ULONG
-NTAPI
-KeQueryMaximumProcessorCount(VOID);
-#endif /* SINGLE_GROUP_LEGACY_API */
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-#if (NTDDI_VERSION >= NTDDI_WS08)
-
-PVOID
-KeRegisterProcessorChangeCallback(
- IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction,
- IN PVOID CallbackContext OPTIONAL,
- IN ULONG Flags);
-
-VOID
-KeDeregisterProcessorChangeCallback(
- IN PVOID CallbackHandle);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WS08) */
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-
-ULONG64
-NTAPI
-KeQueryTotalCycleTimeProcess(
- IN OUT PKPROCESS Process,
- OUT PULONG64 CycleTimeStamp);
-
-ULONG64
-NTAPI
-KeQueryTotalCycleTimeThread(
- IN OUT PKTHREAD Thread,
- OUT PULONG64 CycleTimeStamp);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-KeSetTargetProcessorDpcEx(
- IN OUT PKDPC Dpc,
- IN PPROCESSOR_NUMBER ProcNumber);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeSetSystemGroupAffinityThread(
- IN PGROUP_AFFINITY Affinity,
- OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeRevertToUserGroupAffinityThread(
- IN PGROUP_AFFINITY PreviousAffinity);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KeSetCoalescableTimer(
- IN OUT PKTIMER Timer,
- IN LARGE_INTEGER DueTime,
- IN ULONG Period,
- IN ULONG TolerableDelay,
- IN PKDPC Dpc OPTIONAL);
-
-NTKERNELAPI
-ULONGLONG
-NTAPI
-KeQueryUnbiasedInterruptTime(VOID);
-
-NTKERNELAPI
-ULONG
-NTAPI
-KeQueryActiveProcessorCountEx(
- IN USHORT GroupNumber);
-
-NTKERNELAPI
-ULONG
-NTAPI
-KeQueryMaximumProcessorCountEx(
- IN USHORT GroupNumber);
-
-NTKERNELAPI
-USHORT
-NTAPI
-KeQueryActiveGroupCount(VOID);
-
-NTKERNELAPI
-USHORT
-NTAPI
-KeQueryMaximumGroupCount(VOID);
-
-NTKERNELAPI
-KAFFINITY
-NTAPI
-KeQueryGroupAffinity(
- IN USHORT GroupNumber);
-
-NTKERNELAPI
-ULONG
-NTAPI
-KeGetCurrentProcessorNumberEx(
- OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeQueryNodeActiveAffinity(
- IN USHORT NodeNumber,
- OUT PGROUP_AFFINITY Affinity OPTIONAL,
- OUT PUSHORT Count OPTIONAL);
-
-NTKERNELAPI
-USHORT
-NTAPI
-KeQueryNodeMaximumProcessorCount(
- IN USHORT NodeNumber);
-
-NTKERNELAPI
-USHORT
-NTAPI
-KeQueryHighestNodeNumber(VOID);
-
-NTKERNELAPI
-USHORT
-NTAPI
-KeGetCurrentNodeNumber(VOID);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-KeQueryLogicalProcessorRelationship(
- IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL,
- IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
- OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL,
- IN OUT PULONG Length);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-KeSaveExtendedProcessorState(
- IN ULONG64 Mask,
- OUT PXSTATE_SAVE XStateSave);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeRestoreExtendedProcessorState(
- IN PXSTATE_SAVE XStateSave);
-
-NTSTATUS
-NTAPI
-KeGetProcessorNumberFromIndex(
- IN ULONG ProcIndex,
- OUT PPROCESSOR_NUMBER ProcNumber);
-
-ULONG
-NTAPI
-KeGetProcessorIndexFromNumber(
- IN PPROCESSOR_NUMBER ProcNumber);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-#if !defined(_IA64_)
-NTHALAPI
-VOID
-NTAPI
-KeFlushWriteBuffer(VOID);
-#endif
-
-/* VOID
- * KeInitializeCallbackRecord(
- * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
- */
-#define KeInitializeCallbackRecord(CallbackRecord) \
- CallbackRecord->State = BufferEmpty;
-
-#if DBG
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-#define PAGED_ASSERT( exp ) NT_ASSERT( exp )
-#else
-#define PAGED_ASSERT( exp ) ASSERT( exp )
-#endif
-
-#define PAGED_CODE() { \
- if (KeGetCurrentIrql() > APC_LEVEL) { \
- KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
- PAGED_ASSERT(FALSE); \
- } \
-}
-
-#else
-
-#define PAGED_CODE()
-
-#endif /* DBG */
-
-#define PAGED_CODE_LOCKED() NOP_FUNCTION;
-
-/******************************************************************************
- * Memory manager Functions *
- ******************************************************************************/
-/* Alignment Macros */
-#define ALIGN_DOWN_BY(size, align) \
- ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
-
-#define ALIGN_UP_BY(size, align) \
- (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
-
-#define ALIGN_DOWN_POINTER_BY(ptr, align) \
- ((PVOID)ALIGN_DOWN_BY(ptr, align))
-
-#define ALIGN_UP_POINTER_BY(ptr, align) \
- ((PVOID)ALIGN_UP_BY(ptr, align))
-
-#define ALIGN_DOWN(size, type) \
- ALIGN_DOWN_BY(size, sizeof(type))
-
-#define ALIGN_UP(size, type) \
- ALIGN_UP_BY(size, sizeof(type))
-
-#define ALIGN_DOWN_POINTER(ptr, type) \
- ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
-
-#define ALIGN_UP_POINTER(ptr, type) \
- ALIGN_UP_POINTER_BY(ptr, sizeof(type))
-
-#ifndef FIELD_OFFSET
-#define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
-#endif
-
-#ifndef FIELD_SIZE
-#define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
-#endif
-
-#define POOL_TAGGING 1
-
-#if DBG
-#define IF_DEBUG if (TRUE)
-#else
-#define IF_DEBUG if (FALSE)
-#endif /* DBG */
-
-/* ULONG
- * BYTE_OFFSET(
- * IN PVOID Va)
- */
-#define BYTE_OFFSET(Va) \
- ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
-
-/* ULONG
- * BYTES_TO_PAGES(
- * IN ULONG Size)
- */
-#define BYTES_TO_PAGES(Size) \
- (((Size) + PAGE_SIZE - 1) >> PAGE_SHIFT)
-
-/* PVOID
- * PAGE_ALIGN(
- * IN PVOID Va)
- */
-#define PAGE_ALIGN(Va) \
- ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
-
-/* ULONG_PTR
- * ROUND_TO_PAGES(
- * IN ULONG_PTR Size)
- */
-#define ROUND_TO_PAGES(Size) \
- (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
-
-/* ULONG
- * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
- * IN PVOID Va,
- * IN ULONG Size)
- */
-#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
- ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
- + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
-
-#define COMPUTE_PAGES_SPANNED(Va, Size) \
- ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
-
-/*
- * ULONG
- * MmGetMdlByteCount(
- * IN PMDL Mdl)
- */
-#define MmGetMdlByteCount(_Mdl) \
- ((_Mdl)->ByteCount)
-
-/*
- * ULONG
- * MmGetMdlByteOffset(
- * IN PMDL Mdl)
- */
-#define MmGetMdlByteOffset(_Mdl) \
- ((_Mdl)->ByteOffset)
-
-#define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
-
-/*
- * PPFN_NUMBER
- * MmGetMdlPfnArray(
- * IN PMDL Mdl)
- */
-#define MmGetMdlPfnArray(_Mdl) \
- ((PPFN_NUMBER) ((_Mdl) + 1))
-
-/*
- * PVOID
- * MmGetMdlVirtualAddress(
- * IN PMDL Mdl)
- */
-#define MmGetMdlVirtualAddress(_Mdl) \
- ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
-
-#define MmGetProcedureAddress(Address) (Address)
-
-/* PVOID MmGetSystemAddressForMdl(
- * IN PMDL Mdl);
- */
-#define MmGetSystemAddressForMdl(Mdl) \
- (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
- MDL_SOURCE_IS_NONPAGED_POOL)) ? \
- ((Mdl)->MappedSystemVa) : \
- (MmMapLockedPages((Mdl), KernelMode)))
-
-/* PVOID
- * MmGetSystemAddressForMdlSafe(
- * IN PMDL Mdl,
- * IN MM_PAGE_PRIORITY Priority)
- */
-#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
- (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
- | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
- (_Mdl)->MappedSystemVa : \
- (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
- KernelMode, MmCached, NULL, FALSE, (_Priority)))
-
-/*
- * VOID
- * MmInitializeMdl(
- * IN PMDL MemoryDescriptorList,
- * IN PVOID BaseVa,
- * IN SIZE_T Length)
- */
-#define MmInitializeMdl(_MemoryDescriptorList, \
- _BaseVa, \
- _Length) \
-{ \
- (_MemoryDescriptorList)->Next = (PMDL) NULL; \
- (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
- (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
- (_MemoryDescriptorList)->MdlFlags = 0; \
- (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
- (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
- (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
-}
-
-/*
- * VOID
- * MmPrepareMdlForReuse(
- * IN PMDL Mdl)
- */
-#define MmPrepareMdlForReuse(_Mdl) \
-{ \
- if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
- ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
- MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
- } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
- ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
- } \
-}
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmAllocateContiguousMemory(
- IN SIZE_T NumberOfBytes,
- IN PHYSICAL_ADDRESS HighestAcceptableAddress);
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmAllocateContiguousMemorySpecifyCache(
- IN SIZE_T NumberOfBytes,
- IN PHYSICAL_ADDRESS LowestAcceptableAddress,
- IN PHYSICAL_ADDRESS HighestAcceptableAddress,
- IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
- IN MEMORY_CACHING_TYPE CacheType);
-
-NTKERNELAPI
-PMDL
-NTAPI
-MmAllocatePagesForMdl(
- IN PHYSICAL_ADDRESS LowAddress,
- IN PHYSICAL_ADDRESS HighAddress,
- IN PHYSICAL_ADDRESS SkipBytes,
- IN SIZE_T TotalBytes);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmBuildMdlForNonPagedPool(
- IN OUT PMDLX MemoryDescriptorList);
-
-//DECLSPEC_DEPRECATED_DDK
-NTKERNELAPI
-PMDL
-NTAPI
-MmCreateMdl(
- IN PMDL MemoryDescriptorList OPTIONAL,
- IN PVOID Base,
- IN SIZE_T Length);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmFreeContiguousMemory(
- IN PVOID BaseAddress);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmFreeContiguousMemorySpecifyCache(
- IN PVOID BaseAddress,
- IN SIZE_T NumberOfBytes,
- IN MEMORY_CACHING_TYPE CacheType);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmFreePagesFromMdl(
- IN PMDLX MemoryDescriptorList);
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmGetSystemRoutineAddress(
- IN PUNICODE_STRING SystemRoutineName);
-
-NTKERNELAPI
-LOGICAL
-NTAPI
-MmIsDriverVerifying(
- IN struct _DRIVER_OBJECT *DriverObject);
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmLockPagableDataSection(
- IN PVOID AddressWithinSection);
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmMapIoSpace(
- IN PHYSICAL_ADDRESS PhysicalAddress,
- IN SIZE_T NumberOfBytes,
- IN MEMORY_CACHING_TYPE CacheEnable);
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmMapLockedPages(
- IN PMDL MemoryDescriptorList,
- IN KPROCESSOR_MODE AccessMode);
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmMapLockedPagesSpecifyCache(
- IN PMDLX MemoryDescriptorList,
- IN KPROCESSOR_MODE AccessMode,
- IN MEMORY_CACHING_TYPE CacheType,
- IN PVOID BaseAddress OPTIONAL,
- IN ULONG BugCheckOnFailure,
- IN MM_PAGE_PRIORITY Priority);
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmPageEntireDriver(
- IN PVOID AddressWithinSection);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmProbeAndLockPages(
- IN OUT PMDL MemoryDescriptorList,
- IN KPROCESSOR_MODE AccessMode,
- IN LOCK_OPERATION Operation);
-
-NTKERNELAPI
-MM_SYSTEMSIZE
-NTAPI
-MmQuerySystemSize(VOID);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmResetDriverPaging(
- IN PVOID AddressWithinSection);
-
-NTKERNELAPI
-SIZE_T
-NTAPI
-MmSizeOfMdl(
- IN PVOID Base,
- IN SIZE_T Length);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmUnlockPagableImageSection(
- IN PVOID ImageSectionHandle);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmUnlockPages(
- IN OUT PMDL MemoryDescriptorList);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmUnmapIoSpace(
- IN PVOID BaseAddress,
- IN SIZE_T NumberOfBytes);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmProbeAndLockProcessPages(
- IN OUT PMDL MemoryDescriptorList,
- IN PEPROCESS Process,
- IN KPROCESSOR_MODE AccessMode,
- IN LOCK_OPERATION Operation);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmUnmapLockedPages(
- IN PVOID BaseAddress,
- IN PMDL MemoryDescriptorList);
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmAllocateContiguousMemorySpecifyCacheNode(
- IN SIZE_T NumberOfBytes,
- IN PHYSICAL_ADDRESS LowestAcceptableAddress,
- IN PHYSICAL_ADDRESS HighestAcceptableAddress,
- IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
- IN MEMORY_CACHING_TYPE CacheType,
- IN NODE_REQUIREMENT PreferredNode);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmAdvanceMdl(
- IN OUT PMDL Mdl,
- IN ULONG NumberOfBytes);
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmAllocateMappingAddress(
- IN SIZE_T NumberOfBytes,
- IN ULONG PoolTag);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmFreeMappingAddress(
- IN PVOID BaseAddress,
- IN ULONG PoolTag);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmIsVerifierEnabled(
- OUT PULONG VerifierFlags);
-
-NTKERNELAPI
-PVOID
-NTAPI
-MmMapLockedPagesWithReservedMapping(
- IN PVOID MappingAddress,
- IN ULONG PoolTag,
- IN PMDL MemoryDescriptorList,
- IN MEMORY_CACHING_TYPE CacheType);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmProtectMdlSystemAddress(
- IN PMDL MemoryDescriptorList,
- IN ULONG NewProtect);
-
-NTKERNELAPI
-VOID
-NTAPI
-MmUnmapReservedMapping(
- IN PVOID BaseAddress,
- IN ULONG PoolTag,
- IN PMDL MemoryDescriptorList);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-MmAddVerifierThunks(
- IN PVOID ThunkBuffer,
- IN ULONG ThunkBufferSize);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-#if (NTDDI_VERSION >= NTDDI_WS03)
-NTKERNELAPI
-LOGICAL
-NTAPI
-MmIsIoSpaceActive(
- IN PHYSICAL_ADDRESS StartAddress,
- IN SIZE_T NumberOfBytes);
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
-NTKERNELAPI
-PMDL
-NTAPI
-MmAllocatePagesForMdlEx(
- IN PHYSICAL_ADDRESS LowAddress,
- IN PHYSICAL_ADDRESS HighAddress,
- IN PHYSICAL_ADDRESS SkipBytes,
- IN SIZE_T TotalBytes,
- IN MEMORY_CACHING_TYPE CacheType,
- IN ULONG Flags);
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-NTKERNELAPI
-LOGICAL
-NTAPI
-MmIsDriverVerifyingByAddress(
- IN PVOID AddressWithinSection);
-#endif
-
-/******************************************************************************
- * Security Manager Functions *
- ******************************************************************************/
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-SeAccessCheck(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
- IN BOOLEAN SubjectContextLocked,
- IN ACCESS_MASK DesiredAccess,
- IN ACCESS_MASK PreviouslyGrantedAccess,
- OUT PPRIVILEGE_SET *Privileges OPTIONAL,
- IN PGENERIC_MAPPING GenericMapping,
- IN KPROCESSOR_MODE AccessMode,
- OUT PACCESS_MASK GrantedAccess,
- OUT PNTSTATUS AccessStatus);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-SeAssignSecurity(
- IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
- IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL,
- OUT PSECURITY_DESCRIPTOR *NewDescriptor,
- IN BOOLEAN IsDirectoryObject,
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
- IN PGENERIC_MAPPING GenericMapping,
- IN POOL_TYPE PoolType);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-SeAssignSecurityEx(
- IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
- IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL,
- OUT PSECURITY_DESCRIPTOR *NewDescriptor,
- IN GUID *ObjectType OPTIONAL,
- IN BOOLEAN IsDirectoryObject,
- IN ULONG AutoInheritFlags,
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
- IN PGENERIC_MAPPING GenericMapping,
- IN POOL_TYPE PoolType);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-SeDeassignSecurity(
- IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor);
-
-NTKERNELAPI
-BOOLEAN
-NTAPI
-SeValidSecurityDescriptor(
- IN ULONG Length,
- IN PSECURITY_DESCRIPTOR SecurityDescriptor);
-
-NTKERNELAPI
-ULONG
-NTAPI
-SeObjectCreateSaclAccessBits(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor);
-
-NTKERNELAPI
-VOID
-NTAPI
-SeReleaseSubjectContext(
- IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
-
-NTKERNELAPI
-VOID
-NTAPI
-SeUnlockSubjectContext(
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
-
-NTKERNELAPI
-VOID
-NTAPI
-SeCaptureSubjectContext(
- OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
-
-NTKERNELAPI
-VOID
-NTAPI
-SeLockSubjectContext(
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
-
-NTSTATUS
-NTAPI
-SeSetAuditParameter(
- IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters,
- IN SE_ADT_PARAMETER_TYPE Type,
- IN ULONG Index,
- IN PVOID Data);
-
-NTSTATUS
-NTAPI
-SeReportSecurityEvent(
- IN ULONG Flags,
- IN PUNICODE_STRING SourceName,
- IN PSID UserSid OPTIONAL,
- IN PSE_ADT_PARAMETER_ARRAY AuditParameters);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-NTKERNELAPI
-ULONG
-NTAPI
-SeComputeAutoInheritByObjectType(
- IN PVOID ObjectType,
- IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
- IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL);
-
-#ifdef SE_NTFS_WORLD_CACHE
-VOID
-NTAPI
-SeGetWorldRights(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN PGENERIC_MAPPING GenericMapping,
- OUT PACCESS_MASK GrantedAccess);
-#endif /* SE_NTFS_WORLD_CACHE */
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-/******************************************************************************
- * Configuration Manager Functions *
- ******************************************************************************/
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-NTKERNELAPI
-NTSTATUS
-NTAPI
-CmRegisterCallback(
- IN PEX_CALLBACK_FUNCTION Function,
- IN PVOID Context OPTIONAL,
- OUT PLARGE_INTEGER Cookie);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-CmUnRegisterCallback(
- IN LARGE_INTEGER Cookie);
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-CmRegisterCallbackEx(
- PEX_CALLBACK_FUNCTION Function,
- PCUNICODE_STRING Altitude,
- PVOID Driver,
- PVOID Context,
- PLARGE_INTEGER Cookie,
- PVOID Reserved);
-
-NTKERNELAPI
-VOID
-NTAPI
-CmGetCallbackVersion(
- OUT PULONG Major OPTIONAL,
- OUT PULONG Minor OPTIONAL);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-CmSetCallbackObjectContext(
- IN OUT PVOID Object,
- IN PLARGE_INTEGER Cookie,
- IN PVOID NewContext,
- OUT PVOID *OldContext OPTIONAL);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-CmCallbackGetKeyObjectID(
- IN PLARGE_INTEGER Cookie,
- IN PVOID Object,
- OUT PULONG_PTR ObjectID OPTIONAL,
- OUT PCUNICODE_STRING *ObjectName OPTIONAL);
-
-NTKERNELAPI
-PVOID
-NTAPI
-CmGetBoundTransaction(
- IN PLARGE_INTEGER Cookie,
- IN PVOID Object);
-
-#endif // NTDDI_VERSION >= NTDDI_VISTA
-
-
-/******************************************************************************
- * I/O Manager Functions *
- ******************************************************************************/
-
-
-/*
- * NTSTATUS
- * IoAcquireRemoveLock(
- * IN PIO_REMOVE_LOCK RemoveLock,
- * IN OPTIONAL PVOID Tag)
- */
-#if DBG
-#define IoAcquireRemoveLock(RemoveLock, Tag) \
- IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
-#else
-#define IoAcquireRemoveLock(RemoveLock, Tag) \
- IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
-#endif
-
-/*
- * VOID
- * IoAdjustPagingPathCount(
- * IN PLONG Count,
- * IN BOOLEAN Increment)
- */
-#define IoAdjustPagingPathCount(_Count, \
- _Increment) \
-{ \
- if (_Increment) \
- { \
- InterlockedIncrement(_Count); \
- } \
- else \
- { \
- InterlockedDecrement(_Count); \
- } \
-}
-
-#if !defined(_M_AMD64)
-NTHALAPI
-VOID
-NTAPI
-READ_PORT_BUFFER_UCHAR(
- IN PUCHAR Port,
- IN PUCHAR Buffer,
- IN ULONG Count);
-
-NTHALAPI
-VOID
-NTAPI
-READ_PORT_BUFFER_ULONG(
- IN PULONG Port,
- IN PULONG Buffer,
- IN ULONG Count);
-
-NTHALAPI
-VOID
-NTAPI
-READ_PORT_BUFFER_USHORT(
- IN PUSHORT Port,
- IN PUSHORT Buffer,
- IN ULONG Count);
-
-NTHALAPI
-UCHAR
-NTAPI
-READ_PORT_UCHAR(
- IN PUCHAR Port);
-
-NTHALAPI
-ULONG
-NTAPI
-READ_PORT_ULONG(
- IN PULONG Port);
-
-NTHALAPI
-USHORT
-NTAPI
-READ_PORT_USHORT(
- IN PUSHORT Port);
-
-NTKERNELAPI
-VOID
-NTAPI
-READ_REGISTER_BUFFER_UCHAR(
- IN PUCHAR Register,
- IN PUCHAR Buffer,
- IN ULONG Count);
-
-NTKERNELAPI
-VOID
-NTAPI
-READ_REGISTER_BUFFER_ULONG(
- IN PULONG Register,
- IN PULONG Buffer,
- IN ULONG Count);
-
-NTKERNELAPI
-VOID
-NTAPI
-READ_REGISTER_BUFFER_USHORT(
- IN PUSHORT Register,
- IN PUSHORT Buffer,
- IN ULONG Count);
-
-NTKERNELAPI
-UCHAR
-NTAPI
-READ_REGISTER_UCHAR(
- IN PUCHAR Register);
-
-NTKERNELAPI
-ULONG
-NTAPI
-READ_REGISTER_ULONG(
- IN PULONG Register);
-
-NTKERNELAPI
-USHORT
-NTAPI
-READ_REGISTER_USHORT(
- IN PUSHORT Register);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_BUFFER_UCHAR(
- IN PUCHAR Port,
- IN PUCHAR Buffer,
- IN ULONG Count);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_BUFFER_ULONG(
- IN PULONG Port,
- IN PULONG Buffer,
- IN ULONG Count);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_BUFFER_USHORT(
- IN PUSHORT Port,
- IN PUSHORT Buffer,
- IN ULONG Count);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_UCHAR(
- IN PUCHAR Port,
- IN UCHAR Value);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_ULONG(
- IN PULONG Port,
- IN ULONG Value);
-
-NTHALAPI
-VOID
-NTAPI
-WRITE_PORT_USHORT(
- IN PUSHORT Port,
- IN USHORT Value);
-
-NTKERNELAPI
-VOID
-NTAPI
-WRITE_REGISTER_BUFFER_UCHAR(
- IN PUCHAR Register,
- IN PUCHAR Buffer,
- IN ULONG Count);
-
-NTKERNELAPI
-VOID
-NTAPI
-WRITE_REGISTER_BUFFER_ULONG(
- IN PULONG Register,
- IN PULONG Buffer,
- IN ULONG Count);
-
-NTKERNELAPI
-VOID
-NTAPI
-WRITE_REGISTER_BUFFER_USHORT(
- IN PUSHORT Register,
- IN PUSHORT Buffer,
- IN ULONG Count);
-
-NTKERNELAPI
-VOID
-NTAPI
-WRITE_REGISTER_UCHAR(
- IN PUCHAR Register,
- IN UCHAR Value);
-
-NTKERNELAPI
-VOID
-NTAPI
-WRITE_REGISTER_ULONG(
- IN PULONG Register,
- IN ULONG Value);
-
-NTKERNELAPI
-VOID
-NTAPI
-WRITE_REGISTER_USHORT(
- IN PUSHORT Register,
- IN USHORT Value);
-
-#else
-
-FORCEINLINE
-VOID
-READ_PORT_BUFFER_UCHAR(
- IN PUCHAR Port,
- IN PUCHAR Buffer,
- IN ULONG Count)
-{
- __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
-
-FORCEINLINE
-VOID
-READ_PORT_BUFFER_ULONG(
- IN PULONG Port,
- IN PULONG Buffer,
- IN ULONG Count)
-{
- __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
-
-FORCEINLINE
-VOID
-READ_PORT_BUFFER_USHORT(
- IN PUSHORT Port,
- IN PUSHORT Buffer,
- IN ULONG Count)
-{
- __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
-
-FORCEINLINE
-UCHAR
-READ_PORT_UCHAR(
- IN PUCHAR Port)
-{
- return __inbyte((USHORT)(ULONG_PTR)Port);
-}
-
-FORCEINLINE
-ULONG
-READ_PORT_ULONG(
- IN PULONG Port)
-{
- return __indword((USHORT)(ULONG_PTR)Port);
-}
-
-FORCEINLINE
-USHORT
-READ_PORT_USHORT(
- IN PUSHORT Port)
-{
- return __inword((USHORT)(ULONG_PTR)Port);
-}
-
-FORCEINLINE
-VOID
-READ_REGISTER_BUFFER_UCHAR(
- IN PUCHAR Register,
- IN PUCHAR Buffer,
- IN ULONG Count)
-{
- __movsb(Register, Buffer, Count);
-}
-
-FORCEINLINE
-VOID
-READ_REGISTER_BUFFER_ULONG(
- IN PULONG Register,
- IN PULONG Buffer,
- IN ULONG Count)
-{
- __movsd(Register, Buffer, Count);
-}
-
-FORCEINLINE
-VOID
-READ_REGISTER_BUFFER_USHORT(
- IN PUSHORT Register,
- IN PUSHORT Buffer,
- IN ULONG Count)
-{
- __movsw(Register, Buffer, Count);
-}
-
-FORCEINLINE
-UCHAR
-READ_REGISTER_UCHAR(
- IN volatile UCHAR *Register)
-{
- return *Register;
-}
-
-FORCEINLINE
-ULONG
-READ_REGISTER_ULONG(
- IN volatile ULONG *Register)
-{
- return *Register;
-}
-
-FORCEINLINE
-USHORT
-READ_REGISTER_USHORT(
- IN volatile USHORT *Register)
-{
- return *Register;
-}
-
-FORCEINLINE
-VOID
-WRITE_PORT_BUFFER_UCHAR(
- IN PUCHAR Port,
- IN PUCHAR Buffer,
- IN ULONG Count)
-{
- __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
-
-FORCEINLINE
-VOID
-WRITE_PORT_BUFFER_ULONG(
- IN PULONG Port,
- IN PULONG Buffer,
- IN ULONG Count)
-{
- __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
-
-FORCEINLINE
-VOID
-WRITE_PORT_BUFFER_USHORT(
- IN PUSHORT Port,
- IN PUSHORT Buffer,
- IN ULONG Count)
-{
- __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
-}
-
-FORCEINLINE
-VOID
-WRITE_PORT_UCHAR(
- IN PUCHAR Port,
- IN UCHAR Value)
-{
- __outbyte((USHORT)(ULONG_PTR)Port, Value);
-}
-
-FORCEINLINE
-VOID
-WRITE_PORT_ULONG(
- IN PULONG Port,
- IN ULONG Value)
-{
- __outdword((USHORT)(ULONG_PTR)Port, Value);
-}
-
-FORCEINLINE
-VOID
-WRITE_PORT_USHORT(
- IN PUSHORT Port,
- IN USHORT Value)
-{
- __outword((USHORT)(ULONG_PTR)Port, Value);
-}
-
-FORCEINLINE
-VOID
-WRITE_REGISTER_BUFFER_UCHAR(
- IN PUCHAR Register,
- IN PUCHAR Buffer,
- IN ULONG Count)
-{
- LONG Synch;
- __movsb(Register, Buffer, Count);
- InterlockedOr(&Synch, 1);
-}
-
-FORCEINLINE
-VOID
-WRITE_REGISTER_BUFFER_ULONG(
- IN PULONG Register,
- IN PULONG Buffer,
- IN ULONG Count)
-{
- LONG Synch;
- __movsd(Register, Buffer, Count);
- InterlockedOr(&Synch, 1);
-}
-
-FORCEINLINE
-VOID
-WRITE_REGISTER_BUFFER_USHORT(
- IN PUSHORT Register,
- IN PUSHORT Buffer,
- IN ULONG Count)
-{
- LONG Synch;
- __movsw(Register, Buffer, Count);
- InterlockedOr(&Synch, 1);
-}
-
-FORCEINLINE
-VOID
-WRITE_REGISTER_UCHAR(
- IN volatile UCHAR *Register,
- IN UCHAR Value)
-{
- LONG Synch;
- *Register = Value;
- InterlockedOr(&Synch, 1);
-}
-
-FORCEINLINE
-VOID
-WRITE_REGISTER_ULONG(
- IN volatile ULONG *Register,
- IN ULONG Value)
-{
- LONG Synch;
- *Register = Value;
- InterlockedOr(&Synch, 1);
-}
-
-FORCEINLINE
-VOID
-WRITE_REGISTER_USHORT(
- IN volatile USHORT *Register,
- IN USHORT Value)
-{
- LONG Sync;
- *Register = Value;
- InterlockedOr(&Sync, 1);
-}
+MmAllocatePagesForMdlEx(
+ IN PHYSICAL_ADDRESS LowAddress,
+ IN PHYSICAL_ADDRESS HighAddress,
+ IN PHYSICAL_ADDRESS SkipBytes,
+ IN SIZE_T TotalBytes,
+ IN MEMORY_CACHING_TYPE CacheType,
+ IN ULONG Flags);
#endif
-#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
- (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+#if (NTDDI_VERSION >= NTDDI_VISTA)
-#define DMA_MACROS_DEFINED
+NTKERNELAPI
+LOGICAL
+NTAPI
+MmIsDriverVerifyingByAddress(
+ IN PVOID AddressWithinSection);
+#endif
-FORCEINLINE
-NTSTATUS
-IoAllocateAdapterChannel(
- IN PDMA_ADAPTER DmaAdapter,
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG NumberOfMapRegisters,
- IN PDRIVER_CONTROL ExecutionRoutine,
- IN PVOID Context)
-{
- PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
- AllocateAdapterChannel =
- *(DmaAdapter)->DmaOperations->AllocateAdapterChannel;
- ASSERT(AllocateAdapterChannel);
- return AllocateAdapterChannel(DmaAdapter,
- DeviceObject,
- NumberOfMapRegisters,
- ExecutionRoutine,
- Context );
-}
+/******************************************************************************
+ * Security Manager Functions *
+ ******************************************************************************/
-FORCEINLINE
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+NTKERNELAPI
BOOLEAN
NTAPI
-IoFlushAdapterBuffers(
- IN PDMA_ADAPTER DmaAdapter,
- IN PMDL Mdl,
- IN PVOID MapRegisterBase,
- IN PVOID CurrentVa,
- IN ULONG Length,
- IN BOOLEAN WriteToDevice)
-{
- PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
- FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers;
- ASSERT(FlushAdapterBuffers);
- return FlushAdapterBuffers(DmaAdapter,
- Mdl,
- MapRegisterBase,
- CurrentVa,
- Length,
- WriteToDevice);
-}
+SeAccessCheck(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
+ IN BOOLEAN SubjectContextLocked,
+ IN ACCESS_MASK DesiredAccess,
+ IN ACCESS_MASK PreviouslyGrantedAccess,
+ OUT PPRIVILEGE_SET *Privileges OPTIONAL,
+ IN PGENERIC_MAPPING GenericMapping,
+ IN KPROCESSOR_MODE AccessMode,
+ OUT PACCESS_MASK GrantedAccess,
+ OUT PNTSTATUS AccessStatus);
-FORCEINLINE
-VOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-IoFreeAdapterChannel(
- IN PDMA_ADAPTER DmaAdapter)
-{
- PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
- FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel;
- ASSERT(FreeAdapterChannel);
- FreeAdapterChannel(DmaAdapter);
-}
+SeAssignSecurity(
+ IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
+ IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL,
+ OUT PSECURITY_DESCRIPTOR *NewDescriptor,
+ IN BOOLEAN IsDirectoryObject,
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
+ IN PGENERIC_MAPPING GenericMapping,
+ IN POOL_TYPE PoolType);
-FORCEINLINE
-VOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-IoFreeMapRegisters(
- IN PDMA_ADAPTER DmaAdapter,
- IN PVOID MapRegisterBase,
- IN ULONG NumberOfMapRegisters)
-{
- PFREE_MAP_REGISTERS FreeMapRegisters;
- FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters;
- ASSERT(FreeMapRegisters);
- FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters);
-}
+SeAssignSecurityEx(
+ IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
+ IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL,
+ OUT PSECURITY_DESCRIPTOR *NewDescriptor,
+ IN GUID *ObjectType OPTIONAL,
+ IN BOOLEAN IsDirectoryObject,
+ IN ULONG AutoInheritFlags,
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
+ IN PGENERIC_MAPPING GenericMapping,
+ IN POOL_TYPE PoolType);
-FORCEINLINE
-PHYSICAL_ADDRESS
+NTKERNELAPI
+NTSTATUS
NTAPI
-IoMapTransfer(
- IN PDMA_ADAPTER DmaAdapter,
- IN PMDL Mdl,
- IN PVOID MapRegisterBase,
- IN PVOID CurrentVa,
- IN OUT PULONG Length,
- IN BOOLEAN WriteToDevice)
-{
- PMAP_TRANSFER MapTransfer;
+SeDeassignSecurity(
+ IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor);
- MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer;
- ASSERT(MapTransfer);
- return MapTransfer(DmaAdapter,
- Mdl,
- MapRegisterBase,
- CurrentVa,
- Length,
- WriteToDevice);
-}
-#endif
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeValidSecurityDescriptor(
+ IN ULONG Length,
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor);
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTKERNELAPI
+ULONG
+NTAPI
+SeObjectCreateSaclAccessBits(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor);
NTKERNELAPI
VOID
NTAPI
-IoAcquireCancelSpinLock(
- OUT PKIRQL Irql);
+SeReleaseSubjectContext(
+ IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-IoAcquireRemoveLockEx(
- IN PIO_REMOVE_LOCK RemoveLock,
- IN PVOID Tag OPTIONAL,
- IN PCSTR File,
- IN ULONG Line,
- IN ULONG RemlockSize);
+SeUnlockSubjectContext(
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeCaptureSubjectContext(
+ OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
NTKERNELAPI
+VOID
+NTAPI
+SeLockSubjectContext(
+ IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+
NTSTATUS
NTAPI
-IoAllocateDriverObjectExtension(
- IN PDRIVER_OBJECT DriverObject,
- IN PVOID ClientIdentificationAddress,
- IN ULONG DriverObjectExtensionSize,
- OUT PVOID *DriverObjectExtension);
+SeSetAuditParameter(
+ IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters,
+ IN SE_ADT_PARAMETER_TYPE Type,
+ IN ULONG Index,
+ IN PVOID Data);
+
+NTSTATUS
+NTAPI
+SeReportSecurityEvent(
+ IN ULONG Flags,
+ IN PUNICODE_STRING SourceName,
+ IN PSID UserSid OPTIONAL,
+ IN PSE_ADT_PARAMETER_ARRAY AuditParameters);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
NTKERNELAPI
-PVOID
+ULONG
NTAPI
-IoAllocateErrorLogEntry(
- IN PVOID IoObject,
- IN UCHAR EntrySize);
+SeComputeAutoInheritByObjectType(
+ IN PVOID ObjectType,
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
+ IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL);
+
+#ifdef SE_NTFS_WORLD_CACHE
+VOID
+NTAPI
+SeGetWorldRights(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN PGENERIC_MAPPING GenericMapping,
+ OUT PACCESS_MASK GrantedAccess);
+#endif /* SE_NTFS_WORLD_CACHE */
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+/******************************************************************************
+ * Configuration Manager Functions *
+ ******************************************************************************/
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+CmRegisterCallback(
+ IN PEX_CALLBACK_FUNCTION Function,
+ IN PVOID Context OPTIONAL,
+ OUT PLARGE_INTEGER Cookie);
NTKERNELAPI
-PIRP
+NTSTATUS
NTAPI
-IoAllocateIrp(
- IN CCHAR StackSize,
- IN BOOLEAN ChargeQuota);
+CmUnRegisterCallback(
+ IN LARGE_INTEGER Cookie);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
NTKERNELAPI
-PMDL
+NTSTATUS
NTAPI
-IoAllocateMdl(
- IN PVOID VirtualAddress OPTIONAL,
- IN ULONG Length,
- IN BOOLEAN SecondaryBuffer,
- IN BOOLEAN ChargeQuota,
- IN OUT PIRP Irp OPTIONAL);
+CmRegisterCallbackEx(
+ PEX_CALLBACK_FUNCTION Function,
+ PCUNICODE_STRING Altitude,
+ PVOID Driver,
+ PVOID Context,
+ PLARGE_INTEGER Cookie,
+ PVOID Reserved);
NTKERNELAPI
-PIO_WORKITEM
+VOID
NTAPI
-IoAllocateWorkItem(
- IN PDEVICE_OBJECT DeviceObject);
+CmGetCallbackVersion(
+ OUT PULONG Major OPTIONAL,
+ OUT PULONG Minor OPTIONAL);
NTKERNELAPI
NTSTATUS
NTAPI
-IoAttachDevice(
- IN PDEVICE_OBJECT SourceDevice,
- IN PUNICODE_STRING TargetDevice,
- OUT PDEVICE_OBJECT *AttachedDevice);
+CmSetCallbackObjectContext(
+ IN OUT PVOID Object,
+ IN PLARGE_INTEGER Cookie,
+ IN PVOID NewContext,
+ OUT PVOID *OldContext OPTIONAL);
NTKERNELAPI
-PDEVICE_OBJECT
+NTSTATUS
NTAPI
-IoAttachDeviceToDeviceStack(
- IN PDEVICE_OBJECT SourceDevice,
- IN PDEVICE_OBJECT TargetDevice);
+CmCallbackGetKeyObjectID(
+ IN PLARGE_INTEGER Cookie,
+ IN PVOID Object,
+ OUT PULONG_PTR ObjectID OPTIONAL,
+ OUT PCUNICODE_STRING *ObjectName OPTIONAL);
NTKERNELAPI
-PIRP
+PVOID
NTAPI
-IoBuildAsynchronousFsdRequest(
- IN ULONG MajorFunction,
- IN PDEVICE_OBJECT DeviceObject,
- IN OUT PVOID Buffer OPTIONAL,
- IN ULONG Length OPTIONAL,
- IN PLARGE_INTEGER StartingOffset OPTIONAL,
- IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL);
+CmGetBoundTransaction(
+ IN PLARGE_INTEGER Cookie,
+ IN PVOID Object);
-NTKERNELAPI
-PIRP
+#endif // NTDDI_VERSION >= NTDDI_VISTA
+
+
+/******************************************************************************
+ * I/O Manager Functions *
+ ******************************************************************************/
+
+#if !defined(_M_AMD64)
+NTHALAPI
+VOID
NTAPI
-IoBuildDeviceIoControlRequest(
- IN ULONG IoControlCode,
- IN PDEVICE_OBJECT DeviceObject,
- IN PVOID InputBuffer OPTIONAL,
- IN ULONG InputBufferLength,
- OUT PVOID OutputBuffer OPTIONAL,
- IN ULONG OutputBufferLength,
- IN BOOLEAN InternalDeviceIoControl,
- IN PKEVENT Event,
- OUT PIO_STATUS_BLOCK IoStatusBlock);
+READ_PORT_BUFFER_UCHAR(
+ IN PUCHAR Port,
+ IN PUCHAR Buffer,
+ IN ULONG Count);
-NTKERNELAPI
+NTHALAPI
VOID
NTAPI
-IoBuildPartialMdl(
- IN PMDL SourceMdl,
- IN OUT PMDL TargetMdl,
- IN PVOID VirtualAddress,
- IN ULONG Length);
+READ_PORT_BUFFER_ULONG(
+ IN PULONG Port,
+ IN PULONG Buffer,
+ IN ULONG Count);
-NTKERNELAPI
-PIRP
+NTHALAPI
+VOID
NTAPI
-IoBuildSynchronousFsdRequest(
- IN ULONG MajorFunction,
- IN PDEVICE_OBJECT DeviceObject,
- IN OUT PVOID Buffer OPTIONAL,
- IN ULONG Length OPTIONAL,
- IN PLARGE_INTEGER StartingOffset OPTIONAL,
- IN PKEVENT Event,
- OUT PIO_STATUS_BLOCK IoStatusBlock);
+READ_PORT_BUFFER_USHORT(
+ IN PUSHORT Port,
+ IN PUSHORT Buffer,
+ IN ULONG Count);
-NTKERNELAPI
-NTSTATUS
-FASTCALL
-IofCallDriver(
- IN PDEVICE_OBJECT DeviceObject,
- IN OUT PIRP Irp);
-#define IoCallDriver IofCallDriver
+NTHALAPI
+UCHAR
+NTAPI
+READ_PORT_UCHAR(
+ IN PUCHAR Port);
-NTKERNELAPI
-VOID
-FASTCALL
-IofCompleteRequest(
- IN PIRP Irp,
- IN CCHAR PriorityBoost);
-#define IoCompleteRequest IofCompleteRequest
+NTHALAPI
+ULONG
+NTAPI
+READ_PORT_ULONG(
+ IN PULONG Port);
-NTKERNELAPI
-BOOLEAN
+NTHALAPI
+USHORT
NTAPI
-IoCancelIrp(
- IN PIRP Irp);
+READ_PORT_USHORT(
+ IN PUSHORT Port);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-IoCheckShareAccess(
- IN ACCESS_MASK DesiredAccess,
- IN ULONG DesiredShareAccess,
- IN OUT PFILE_OBJECT FileObject,
- IN OUT PSHARE_ACCESS ShareAccess,
- IN BOOLEAN Update);
+READ_REGISTER_BUFFER_UCHAR(
+ IN PUCHAR Register,
+ IN PUCHAR Buffer,
+ IN ULONG Count);
NTKERNELAPI
VOID
-FASTCALL
-IofCompleteRequest(
- IN PIRP Irp,
- IN CCHAR PriorityBoost);
+NTAPI
+READ_REGISTER_BUFFER_ULONG(
+ IN PULONG Register,
+ IN PULONG Buffer,
+ IN ULONG Count);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-IoConnectInterrupt(
- OUT PKINTERRUPT *InterruptObject,
- IN PKSERVICE_ROUTINE ServiceRoutine,
- IN PVOID ServiceContext OPTIONAL,
- IN PKSPIN_LOCK SpinLock OPTIONAL,
- IN ULONG Vector,
- IN KIRQL Irql,
- IN KIRQL SynchronizeIrql,
- IN KINTERRUPT_MODE InterruptMode,
- IN BOOLEAN ShareVector,
- IN KAFFINITY ProcessorEnableMask,
- IN BOOLEAN FloatingSave);
+READ_REGISTER_BUFFER_USHORT(
+ IN PUSHORT Register,
+ IN PUSHORT Buffer,
+ IN ULONG Count);
NTKERNELAPI
-NTSTATUS
+UCHAR
NTAPI
-IoCreateDevice(
- IN PDRIVER_OBJECT DriverObject,
- IN ULONG DeviceExtensionSize,
- IN PUNICODE_STRING DeviceName OPTIONAL,
- IN DEVICE_TYPE DeviceType,
- IN ULONG DeviceCharacteristics,
- IN BOOLEAN Exclusive,
- OUT PDEVICE_OBJECT *DeviceObject);
+READ_REGISTER_UCHAR(
+ IN PUCHAR Register);
NTKERNELAPI
-NTSTATUS
+ULONG
NTAPI
-IoCreateFile(
- OUT PHANDLE FileHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PLARGE_INTEGER AllocationSize OPTIONAL,
- IN ULONG FileAttributes,
- IN ULONG ShareAccess,
- IN ULONG Disposition,
- IN ULONG CreateOptions,
- IN PVOID EaBuffer OPTIONAL,
- IN ULONG EaLength,
- IN CREATE_FILE_TYPE CreateFileType,
- IN PVOID InternalParameters OPTIONAL,
- IN ULONG Options);
+READ_REGISTER_ULONG(
+ IN PULONG Register);
NTKERNELAPI
-PKEVENT
+USHORT
NTAPI
-IoCreateNotificationEvent(
- IN PUNICODE_STRING EventName,
- OUT PHANDLE EventHandle);
+READ_REGISTER_USHORT(
+ IN PUSHORT Register);
-NTKERNELAPI
-NTSTATUS
+NTHALAPI
+VOID
NTAPI
-IoCreateSymbolicLink(
- IN PUNICODE_STRING SymbolicLinkName,
- IN PUNICODE_STRING DeviceName);
+WRITE_PORT_BUFFER_UCHAR(
+ IN PUCHAR Port,
+ IN PUCHAR Buffer,
+ IN ULONG Count);
-NTKERNELAPI
-PKEVENT
+NTHALAPI
+VOID
NTAPI
-IoCreateSynchronizationEvent(
- IN PUNICODE_STRING EventName,
- OUT PHANDLE EventHandle);
+WRITE_PORT_BUFFER_ULONG(
+ IN PULONG Port,
+ IN PULONG Buffer,
+ IN ULONG Count);
-NTKERNELAPI
-NTSTATUS
+NTHALAPI
+VOID
NTAPI
-IoCreateUnprotectedSymbolicLink(
- IN PUNICODE_STRING SymbolicLinkName,
- IN PUNICODE_STRING DeviceName);
+WRITE_PORT_BUFFER_USHORT(
+ IN PUSHORT Port,
+ IN PUSHORT Buffer,
+ IN ULONG Count);
-NTKERNELAPI
+NTHALAPI
VOID
NTAPI
-IoDeleteDevice(
- IN PDEVICE_OBJECT DeviceObject);
+WRITE_PORT_UCHAR(
+ IN PUCHAR Port,
+ IN UCHAR Value);
-NTKERNELAPI
-NTSTATUS
+NTHALAPI
+VOID
NTAPI
-IoDeleteSymbolicLink(
- IN PUNICODE_STRING SymbolicLinkName);
+WRITE_PORT_ULONG(
+ IN PULONG Port,
+ IN ULONG Value);
+
+NTHALAPI
+VOID
+NTAPI
+WRITE_PORT_USHORT(
+ IN PUSHORT Port,
+ IN USHORT Value);
NTKERNELAPI
VOID
NTAPI
-IoDetachDevice(
- IN OUT PDEVICE_OBJECT TargetDevice);
+WRITE_REGISTER_BUFFER_UCHAR(
+ IN PUCHAR Register,
+ IN PUCHAR Buffer,
+ IN ULONG Count);
NTKERNELAPI
VOID
NTAPI
-IoDisconnectInterrupt(
- IN PKINTERRUPT InterruptObject);
+WRITE_REGISTER_BUFFER_ULONG(
+ IN PULONG Register,
+ IN PULONG Buffer,
+ IN ULONG Count);
NTKERNELAPI
VOID
NTAPI
-IoFreeIrp(
- IN PIRP Irp);
+WRITE_REGISTER_BUFFER_USHORT(
+ IN PUSHORT Register,
+ IN PUSHORT Buffer,
+ IN ULONG Count);
NTKERNELAPI
VOID
NTAPI
-IoFreeMdl(
- IN PMDL Mdl);
+WRITE_REGISTER_UCHAR(
+ IN PUCHAR Register,
+ IN UCHAR Value);
NTKERNELAPI
VOID
NTAPI
-IoFreeWorkItem(
- IN PIO_WORKITEM IoWorkItem);
+WRITE_REGISTER_ULONG(
+ IN PULONG Register,
+ IN ULONG Value);
NTKERNELAPI
-PDEVICE_OBJECT
+VOID
NTAPI
-IoGetAttachedDevice(
- IN PDEVICE_OBJECT DeviceObject);
+WRITE_REGISTER_USHORT(
+ IN PUSHORT Register,
+ IN USHORT Value);
-NTKERNELAPI
-PDEVICE_OBJECT
-NTAPI
-IoGetAttachedDeviceReference(
- IN PDEVICE_OBJECT DeviceObject);
+#else
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoGetBootDiskInformation(
- IN OUT PBOOTDISK_INFORMATION BootDiskInformation,
- IN ULONG Size);
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_UCHAR(
+ IN PUCHAR Port,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoGetDeviceInterfaceAlias(
- IN PUNICODE_STRING SymbolicLinkName,
- IN CONST GUID *AliasInterfaceClassGuid,
- OUT PUNICODE_STRING AliasSymbolicLinkName);
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_ULONG(
+ IN PULONG Port,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
-NTKERNELAPI
-PEPROCESS
-NTAPI
-IoGetCurrentProcess(VOID);
+FORCEINLINE
+VOID
+READ_PORT_BUFFER_USHORT(
+ IN PUSHORT Port,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoGetDeviceInterfaces(
- IN CONST GUID *InterfaceClassGuid,
- IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
- IN ULONG Flags,
- OUT PWSTR *SymbolicLinkList);
+FORCEINLINE
+UCHAR
+READ_PORT_UCHAR(
+ IN PUCHAR Port)
+{
+ return __inbyte((USHORT)(ULONG_PTR)Port);
+}
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoGetDeviceObjectPointer(
- IN PUNICODE_STRING ObjectName,
- IN ACCESS_MASK DesiredAccess,
- OUT PFILE_OBJECT *FileObject,
- OUT PDEVICE_OBJECT *DeviceObject);
+FORCEINLINE
+ULONG
+READ_PORT_ULONG(
+ IN PULONG Port)
+{
+ return __indword((USHORT)(ULONG_PTR)Port);
+}
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoGetDeviceProperty(
- IN PDEVICE_OBJECT DeviceObject,
- IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
- IN ULONG BufferLength,
- OUT PVOID PropertyBuffer,
- OUT PULONG ResultLength);
+FORCEINLINE
+USHORT
+READ_PORT_USHORT(
+ IN PUSHORT Port)
+{
+ return __inword((USHORT)(ULONG_PTR)Port);
+}
-NTKERNELAPI
-PDMA_ADAPTER
-NTAPI
-IoGetDmaAdapter(
- IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
- IN PDEVICE_DESCRIPTION DeviceDescription,
- IN OUT PULONG NumberOfMapRegisters);
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_UCHAR(
+ IN PUCHAR Register,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ __movsb(Register, Buffer, Count);
+}
-NTKERNELAPI
-PVOID
-NTAPI
-IoGetDriverObjectExtension(
- IN PDRIVER_OBJECT DriverObject,
- IN PVOID ClientIdentificationAddress);
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_ULONG(
+ IN PULONG Register,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ __movsd(Register, Buffer, Count);
+}
-NTKERNELAPI
-PVOID
-NTAPI
-IoGetInitialStack(VOID);
+FORCEINLINE
+VOID
+READ_REGISTER_BUFFER_USHORT(
+ IN PUSHORT Register,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ __movsw(Register, Buffer, Count);
+}
-NTKERNELAPI
-PDEVICE_OBJECT
-NTAPI
-IoGetRelatedDeviceObject(
- IN PFILE_OBJECT FileObject);
+FORCEINLINE
+UCHAR
+READ_REGISTER_UCHAR(
+ IN volatile UCHAR *Register)
+{
+ return *Register;
+}
-NTKERNELAPI
+FORCEINLINE
+ULONG
+READ_REGISTER_ULONG(
+ IN volatile ULONG *Register)
+{
+ return *Register;
+}
+
+FORCEINLINE
+USHORT
+READ_REGISTER_USHORT(
+ IN volatile USHORT *Register)
+{
+ return *Register;
+}
+
+FORCEINLINE
VOID
-NTAPI
-IoQueueWorkItem(
- IN PIO_WORKITEM IoWorkItem,
- IN PIO_WORKITEM_ROUTINE WorkerRoutine,
- IN WORK_QUEUE_TYPE QueueType,
- IN PVOID Context OPTIONAL);
+WRITE_PORT_BUFFER_UCHAR(
+ IN PUCHAR Port,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_ULONG(
+ IN PULONG Port,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_BUFFER_USHORT(
+ IN PUSHORT Port,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_UCHAR(
+ IN PUCHAR Port,
+ IN UCHAR Value)
+{
+ __outbyte((USHORT)(ULONG_PTR)Port, Value);
+}
+
+FORCEINLINE
+VOID
+WRITE_PORT_ULONG(
+ IN PULONG Port,
+ IN ULONG Value)
+{
+ __outdword((USHORT)(ULONG_PTR)Port, Value);
+}
-NTKERNELAPI
+FORCEINLINE
VOID
-NTAPI
-IoInitializeIrp(
- IN OUT PIRP Irp,
- IN USHORT PacketSize,
- IN CCHAR StackSize);
+WRITE_PORT_USHORT(
+ IN PUSHORT Port,
+ IN USHORT Value)
+{
+ __outword((USHORT)(ULONG_PTR)Port, Value);
+}
-NTKERNELAPI
+FORCEINLINE
VOID
-NTAPI
-IoInitializeRemoveLockEx(
- IN PIO_REMOVE_LOCK Lock,
- IN ULONG AllocateTag,
- IN ULONG MaxLockedMinutes,
- IN ULONG HighWatermark,
- IN ULONG RemlockSize);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoInitializeTimer(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIO_TIMER_ROUTINE TimerRoutine,
- IN PVOID Context OPTIONAL);
+WRITE_REGISTER_BUFFER_UCHAR(
+ IN PUCHAR Register,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ LONG Synch;
+ __movsb(Register, Buffer, Count);
+ InterlockedOr(&Synch, 1);
+}
-NTKERNELAPI
+FORCEINLINE
VOID
-NTAPI
-IoInvalidateDeviceRelations(
- IN PDEVICE_OBJECT DeviceObject,
- IN DEVICE_RELATION_TYPE Type);
+WRITE_REGISTER_BUFFER_ULONG(
+ IN PULONG Register,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ LONG Synch;
+ __movsd(Register, Buffer, Count);
+ InterlockedOr(&Synch, 1);
+}
-NTKERNELAPI
+FORCEINLINE
VOID
-NTAPI
-IoInvalidateDeviceState(
- IN PDEVICE_OBJECT PhysicalDeviceObject);
+WRITE_REGISTER_BUFFER_USHORT(
+ IN PUSHORT Register,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ LONG Synch;
+ __movsw(Register, Buffer, Count);
+ InterlockedOr(&Synch, 1);
+}
-NTKERNELAPI
-BOOLEAN
-NTAPI
-IoIsWdmVersionAvailable(
- IN UCHAR MajorVersion,
- IN UCHAR MinorVersion);
+FORCEINLINE
+VOID
+WRITE_REGISTER_UCHAR(
+ IN volatile UCHAR *Register,
+ IN UCHAR Value)
+{
+ LONG Synch;
+ *Register = Value;
+ InterlockedOr(&Synch, 1);
+}
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoOpenDeviceInterfaceRegistryKey(
- IN PUNICODE_STRING SymbolicLinkName,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE DeviceInterfaceKey);
+FORCEINLINE
+VOID
+WRITE_REGISTER_ULONG(
+ IN volatile ULONG *Register,
+ IN ULONG Value)
+{
+ LONG Synch;
+ *Register = Value;
+ InterlockedOr(&Synch, 1);
+}
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoOpenDeviceRegistryKey(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG DevInstKeyType,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE DevInstRegKey);
+FORCEINLINE
+VOID
+WRITE_REGISTER_USHORT(
+ IN volatile USHORT *Register,
+ IN USHORT Value)
+{
+ LONG Sync;
+ *Register = Value;
+ InterlockedOr(&Sync, 1);
+}
+#endif
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoRegisterDeviceInterface(
- IN PDEVICE_OBJECT PhysicalDeviceObject,
- IN CONST GUID *InterfaceClassGuid,
- IN PUNICODE_STRING ReferenceString OPTIONAL,
- OUT PUNICODE_STRING SymbolicLinkName);
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
+ (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoRegisterPlugPlayNotification(
- IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
- IN ULONG EventCategoryFlags,
- IN PVOID EventCategoryData OPTIONAL,
- IN PDRIVER_OBJECT DriverObject,
- IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine,
- IN OUT PVOID Context OPTIONAL,
- OUT PVOID *NotificationEntry);
+#define DMA_MACROS_DEFINED
-NTKERNELAPI
+FORCEINLINE
NTSTATUS
-NTAPI
-IoRegisterShutdownNotification(
- IN PDEVICE_OBJECT DeviceObject);
-
-NTKERNELAPI
-VOID
-NTAPI
-IoReleaseCancelSpinLock(
- IN KIRQL Irql);
+IoAllocateAdapterChannel(
+ IN PDMA_ADAPTER DmaAdapter,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG NumberOfMapRegisters,
+ IN PDRIVER_CONTROL ExecutionRoutine,
+ IN PVOID Context)
+{
+ PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
+ AllocateAdapterChannel =
+ *(DmaAdapter)->DmaOperations->AllocateAdapterChannel;
+ ASSERT(AllocateAdapterChannel);
+ return AllocateAdapterChannel(DmaAdapter,
+ DeviceObject,
+ NumberOfMapRegisters,
+ ExecutionRoutine,
+ Context );
+}
-NTKERNELAPI
-VOID
+FORCEINLINE
+BOOLEAN
NTAPI
-IoReleaseRemoveLockAndWaitEx(
- IN PIO_REMOVE_LOCK RemoveLock,
- IN PVOID Tag OPTIONAL,
- IN ULONG RemlockSize);
+IoFlushAdapterBuffers(
+ IN PDMA_ADAPTER DmaAdapter,
+ IN PMDL Mdl,
+ IN PVOID MapRegisterBase,
+ IN PVOID CurrentVa,
+ IN ULONG Length,
+ IN BOOLEAN WriteToDevice)
+{
+ PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
+ FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers;
+ ASSERT(FlushAdapterBuffers);
+ return FlushAdapterBuffers(DmaAdapter,
+ Mdl,
+ MapRegisterBase,
+ CurrentVa,
+ Length,
+ WriteToDevice);
+}
-NTKERNELAPI
+FORCEINLINE
VOID
NTAPI
-IoReleaseRemoveLockEx(
- IN PIO_REMOVE_LOCK RemoveLock,
- IN PVOID Tag OPTIONAL,
- IN ULONG RemlockSize);
+IoFreeAdapterChannel(
+ IN PDMA_ADAPTER DmaAdapter)
+{
+ PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
+ FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel;
+ ASSERT(FreeAdapterChannel);
+ FreeAdapterChannel(DmaAdapter);
+}
-NTKERNELAPI
+FORCEINLINE
VOID
NTAPI
-IoRemoveShareAccess(
- IN PFILE_OBJECT FileObject,
- IN OUT PSHARE_ACCESS ShareAccess);
+IoFreeMapRegisters(
+ IN PDMA_ADAPTER DmaAdapter,
+ IN PVOID MapRegisterBase,
+ IN ULONG NumberOfMapRegisters)
+{
+ PFREE_MAP_REGISTERS FreeMapRegisters;
+ FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters;
+ ASSERT(FreeMapRegisters);
+ FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters);
+}
-NTKERNELAPI
-NTSTATUS
+FORCEINLINE
+PHYSICAL_ADDRESS
NTAPI
-IoReportTargetDeviceChange(
- IN PDEVICE_OBJECT PhysicalDeviceObject,
- IN PVOID NotificationStructure);
+IoMapTransfer(
+ IN PDMA_ADAPTER DmaAdapter,
+ IN PMDL Mdl,
+ IN PVOID MapRegisterBase,
+ IN PVOID CurrentVa,
+ IN OUT PULONG Length,
+ IN BOOLEAN WriteToDevice)
+{
+ PMAP_TRANSFER MapTransfer;
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoReportTargetDeviceChangeAsynchronous(
- IN PDEVICE_OBJECT PhysicalDeviceObject,
- IN PVOID NotificationStructure,
- IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL,
- IN PVOID Context OPTIONAL);
+ MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer;
+ ASSERT(MapTransfer);
+ return MapTransfer(DmaAdapter,
+ Mdl,
+ MapRegisterBase,
+ CurrentVa,
+ Length,
+ WriteToDevice);
+}
+#endif
-NTKERNELAPI
-VOID
-NTAPI
-IoRequestDeviceEject(
- IN PDEVICE_OBJECT PhysicalDeviceObject);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTKERNELAPI
VOID
NTAPI
-IoReuseIrp(
- IN OUT PIRP Irp,
- IN NTSTATUS Status);
+IoAcquireCancelSpinLock(
+ OUT PKIRQL Irql);
NTKERNELAPI
NTSTATUS
NTAPI
-IoSetDeviceInterfaceState(
- IN PUNICODE_STRING SymbolicLinkName,
- IN BOOLEAN Enable);
+IoAcquireRemoveLockEx(
+ IN PIO_REMOVE_LOCK RemoveLock,
+ IN PVOID Tag OPTIONAL,
+ IN PCSTR File,
+ IN ULONG Line,
+ IN ULONG RemlockSize);
+#endif
-NTKERNELAPI
-VOID
-NTAPI
-IoSetShareAccess(
- IN ACCESS_MASK DesiredAccess,
- IN ULONG DesiredShareAccess,
- IN OUT PFILE_OBJECT FileObject,
- OUT PSHARE_ACCESS ShareAccess);
+/*
+ * NTSTATUS
+ * IoAcquireRemoveLock(
+ * IN PIO_REMOVE_LOCK RemoveLock,
+ * IN OPTIONAL PVOID Tag)
+ */
+#if DBG
+#define IoAcquireRemoveLock(RemoveLock, Tag) \
+ IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
+#else
+#define IoAcquireRemoveLock(RemoveLock, Tag) \
+ IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
+#endif
-NTKERNELAPI
-VOID
-NTAPI
-IoStartNextPacket(
- IN PDEVICE_OBJECT DeviceObject,
- IN BOOLEAN Cancelable);
+/*
+ * VOID
+ * IoAdjustPagingPathCount(
+ * IN PLONG Count,
+ * IN BOOLEAN Increment)
+ */
+#define IoAdjustPagingPathCount(_Count, \
+ _Increment) \
+{ \
+ if (_Increment) \
+ { \
+ InterlockedIncrement(_Count); \
+ } \
+ else \
+ { \
+ InterlockedDecrement(_Count); \
+ } \
+}
-NTKERNELAPI
-VOID
-NTAPI
-IoStartNextPacketByKey(
- IN PDEVICE_OBJECT DeviceObject,
- IN BOOLEAN Cancelable,
- IN ULONG Key);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTKERNELAPI
-VOID
+NTSTATUS
NTAPI
-IoStartPacket(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PULONG Key OPTIONAL,
- IN PDRIVER_CANCEL CancelFunction OPTIONAL);
+IoAllocateDriverObjectExtension(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PVOID ClientIdentificationAddress,
+ IN ULONG DriverObjectExtensionSize,
+ OUT PVOID *DriverObjectExtension);
NTKERNELAPI
-VOID
+PVOID
NTAPI
-IoStartTimer(
- IN PDEVICE_OBJECT DeviceObject);
+IoAllocateErrorLogEntry(
+ IN PVOID IoObject,
+ IN UCHAR EntrySize);
NTKERNELAPI
-VOID
+PIRP
NTAPI
-IoStopTimer(
- IN PDEVICE_OBJECT DeviceObject);
+IoAllocateIrp(
+ IN CCHAR StackSize,
+ IN BOOLEAN ChargeQuota);
NTKERNELAPI
-NTSTATUS
+PMDL
NTAPI
-IoUnregisterPlugPlayNotification(
- IN PVOID NotificationEntry);
+IoAllocateMdl(
+ IN PVOID VirtualAddress OPTIONAL,
+ IN ULONG Length,
+ IN BOOLEAN SecondaryBuffer,
+ IN BOOLEAN ChargeQuota,
+ IN OUT PIRP Irp OPTIONAL);
NTKERNELAPI
-VOID
+PIO_WORKITEM
NTAPI
-IoUnregisterShutdownNotification(
+IoAllocateWorkItem(
IN PDEVICE_OBJECT DeviceObject);
-NTKERNELAPI
-VOID
-NTAPI
-IoUpdateShareAccess(
- IN PFILE_OBJECT FileObject,
- IN OUT PSHARE_ACCESS ShareAccess);
-
NTKERNELAPI
NTSTATUS
NTAPI
-IoWMIAllocateInstanceIds(
- IN GUID *Guid,
- IN ULONG InstanceCount,
- OUT ULONG *FirstInstanceId);
+IoAttachDevice(
+ IN PDEVICE_OBJECT SourceDevice,
+ IN PUNICODE_STRING TargetDevice,
+ OUT PDEVICE_OBJECT *AttachedDevice);
NTKERNELAPI
-NTSTATUS
+PDEVICE_OBJECT
NTAPI
-IoWMIQuerySingleInstanceMultiple(
- IN PVOID *DataBlockObjectList,
- IN PUNICODE_STRING InstanceNames,
- IN ULONG ObjectCount,
- IN OUT ULONG *InOutBufferSize,
- OUT PVOID OutBuffer);
+IoAttachDeviceToDeviceStack(
+ IN PDEVICE_OBJECT SourceDevice,
+ IN PDEVICE_OBJECT TargetDevice);
NTKERNELAPI
-NTSTATUS
+PIRP
NTAPI
-IoWMIRegistrationControl(
+IoBuildAsynchronousFsdRequest(
+ IN ULONG MajorFunction,
IN PDEVICE_OBJECT DeviceObject,
- IN ULONG Action);
-
-NTKERNELAPI
-NTSTATUS
-NTAPI
-IoWMISuggestInstanceName(
- IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
- IN PUNICODE_STRING SymbolicLinkName OPTIONAL,
- IN BOOLEAN CombineNames,
- OUT PUNICODE_STRING SuggestedInstanceName);
+ IN OUT PVOID Buffer OPTIONAL,
+ IN ULONG Length OPTIONAL,
+ IN PLARGE_INTEGER StartingOffset OPTIONAL,
+ IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL);
NTKERNELAPI
-NTSTATUS
+PIRP
NTAPI
-IoWMIWriteEvent(
- IN OUT PVOID WnodeEventItem);
+IoBuildDeviceIoControlRequest(
+ IN ULONG IoControlCode,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PVOID InputBuffer OPTIONAL,
+ IN ULONG InputBufferLength,
+ OUT PVOID OutputBuffer OPTIONAL,
+ IN ULONG OutputBufferLength,
+ IN BOOLEAN InternalDeviceIoControl,
+ IN PKEVENT Event,
+ OUT PIO_STATUS_BLOCK IoStatusBlock);
NTKERNELAPI
VOID
NTAPI
-IoWriteErrorLogEntry(
- IN PVOID ElEntry);
+IoBuildPartialMdl(
+ IN PMDL SourceMdl,
+ IN OUT PMDL TargetMdl,
+ IN PVOID VirtualAddress,
+ IN ULONG Length);
NTKERNELAPI
PIRP
NTAPI
-IoGetTopLevelIrp(VOID);
+IoBuildSynchronousFsdRequest(
+ IN ULONG MajorFunction,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN OUT PVOID Buffer OPTIONAL,
+ IN ULONG Length OPTIONAL,
+ IN PLARGE_INTEGER StartingOffset OPTIONAL,
+ IN PKEVENT Event,
+ OUT PIO_STATUS_BLOCK IoStatusBlock);
NTKERNELAPI
NTSTATUS
-NTAPI
-IoRegisterLastChanceShutdownNotification(
- IN PDEVICE_OBJECT DeviceObject);
+FASTCALL
+IofCallDriver(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN OUT PIRP Irp);
+#define IoCallDriver IofCallDriver
NTKERNELAPI
VOID
-NTAPI
-IoSetTopLevelIrp(
- IN PIRP Irp OPTIONAL);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
+FASTCALL
+IofCompleteRequest(
+ IN PIRP Irp,
+ IN CCHAR PriorityBoost);
+#define IoCompleteRequest IofCompleteRequest
-#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoCancelIrp(
+ IN PIRP Irp);
NTKERNELAPI
NTSTATUS
NTAPI
-IoCsqInitialize(
- IN PIO_CSQ Csq,
- IN PIO_CSQ_INSERT_IRP CsqInsertIrp,
- IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
- IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
- IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
- IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
- IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
+IoCheckShareAccess(
+ IN ACCESS_MASK DesiredAccess,
+ IN ULONG DesiredShareAccess,
+ IN OUT PFILE_OBJECT FileObject,
+ IN OUT PSHARE_ACCESS ShareAccess,
+ IN BOOLEAN Update);
NTKERNELAPI
VOID
-NTAPI
-IoCsqInsertIrp(
- IN PIO_CSQ Csq,
- IN PIRP Irp,
- IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL);
+FASTCALL
+IofCompleteRequest(
+ IN PIRP Irp,
+ IN CCHAR PriorityBoost);
NTKERNELAPI
-PIRP
+NTSTATUS
NTAPI
-IoCsqRemoveIrp(
- IN PIO_CSQ Csq,
- IN PIO_CSQ_IRP_CONTEXT Context);
+IoConnectInterrupt(
+ OUT PKINTERRUPT *InterruptObject,
+ IN PKSERVICE_ROUTINE ServiceRoutine,
+ IN PVOID ServiceContext OPTIONAL,
+ IN PKSPIN_LOCK SpinLock OPTIONAL,
+ IN ULONG Vector,
+ IN KIRQL Irql,
+ IN KIRQL SynchronizeIrql,
+ IN KINTERRUPT_MODE InterruptMode,
+ IN BOOLEAN ShareVector,
+ IN KAFFINITY ProcessorEnableMask,
+ IN BOOLEAN FloatingSave);
NTKERNELAPI
-PIRP
+NTSTATUS
NTAPI
-IoCsqRemoveNextIrp(
- IN PIO_CSQ Csq,
- IN PVOID PeekContext OPTIONAL);
+IoCreateDevice(
+ IN PDRIVER_OBJECT DriverObject,
+ IN ULONG DeviceExtensionSize,
+ IN PUNICODE_STRING DeviceName OPTIONAL,
+ IN DEVICE_TYPE DeviceType,
+ IN ULONG DeviceCharacteristics,
+ IN BOOLEAN Exclusive,
+ OUT PDEVICE_OBJECT *DeviceObject);
NTKERNELAPI
-BOOLEAN
+NTSTATUS
NTAPI
-IoForwardIrpSynchronously(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp);
-
-#define IoForwardAndCatchIrp IoForwardIrpSynchronously
+IoCreateFile(
+ OUT PHANDLE FileHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PLARGE_INTEGER AllocationSize OPTIONAL,
+ IN ULONG FileAttributes,
+ IN ULONG ShareAccess,
+ IN ULONG Disposition,
+ IN ULONG CreateOptions,
+ IN PVOID EaBuffer OPTIONAL,
+ IN ULONG EaLength,
+ IN CREATE_FILE_TYPE CreateFileType,
+ IN PVOID InternalParameters OPTIONAL,
+ IN ULONG Options);
NTKERNELAPI
-VOID
+PKEVENT
NTAPI
-IoFreeErrorLogEntry(
- PVOID ElEntry);
+IoCreateNotificationEvent(
+ IN PUNICODE_STRING EventName,
+ OUT PHANDLE EventHandle);
NTKERNELAPI
NTSTATUS
NTAPI
-IoSetCompletionRoutineEx(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PIO_COMPLETION_ROUTINE CompletionRoutine,
- IN PVOID Context,
- IN BOOLEAN InvokeOnSuccess,
- IN BOOLEAN InvokeOnError,
- IN BOOLEAN InvokeOnCancel);
+IoCreateSymbolicLink(
+ IN PUNICODE_STRING SymbolicLinkName,
+ IN PUNICODE_STRING DeviceName);
-VOID
+NTKERNELAPI
+PKEVENT
NTAPI
-IoSetStartIoAttributes(
- IN PDEVICE_OBJECT DeviceObject,
- IN BOOLEAN DeferredStartIo,
- IN BOOLEAN NonCancelable);
+IoCreateSynchronizationEvent(
+ IN PUNICODE_STRING EventName,
+ OUT PHANDLE EventHandle);
NTKERNELAPI
NTSTATUS
NTAPI
-IoWMIDeviceObjectToInstanceName(
- IN PVOID DataBlockObject,
- IN PDEVICE_OBJECT DeviceObject,
- OUT PUNICODE_STRING InstanceName);
+IoCreateUnprotectedSymbolicLink(
+ IN PUNICODE_STRING SymbolicLinkName,
+ IN PUNICODE_STRING DeviceName);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-IoWMIExecuteMethod(
- IN PVOID DataBlockObject,
- IN PUNICODE_STRING InstanceName,
- IN ULONG MethodId,
- IN ULONG InBufferSize,
- IN OUT PULONG OutBufferSize,
- IN OUT PUCHAR InOutBuffer);
+IoDeleteDevice(
+ IN PDEVICE_OBJECT DeviceObject);
NTKERNELAPI
NTSTATUS
NTAPI
-IoWMIHandleToInstanceName(
- IN PVOID DataBlockObject,
- IN HANDLE FileHandle,
- OUT PUNICODE_STRING InstanceName);
+IoDeleteSymbolicLink(
+ IN PUNICODE_STRING SymbolicLinkName);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-IoWMIOpenBlock(
- IN GUID *DataBlockGuid,
- IN ULONG DesiredAccess,
- OUT PVOID *DataBlockObject);
+IoDetachDevice(
+ IN OUT PDEVICE_OBJECT TargetDevice);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-IoWMIQueryAllData(
- IN PVOID DataBlockObject,
- IN OUT ULONG *InOutBufferSize,
- OUT PVOID OutBuffer);
+IoDisconnectInterrupt(
+ IN PKINTERRUPT InterruptObject);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-IoWMIQueryAllDataMultiple(
- IN PVOID *DataBlockObjectList,
- IN ULONG ObjectCount,
- IN OUT ULONG *InOutBufferSize,
- OUT PVOID OutBuffer);
+IoFreeIrp(
+ IN PIRP Irp);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-IoWMIQuerySingleInstance(
- IN PVOID DataBlockObject,
- IN PUNICODE_STRING InstanceName,
- IN OUT ULONG *InOutBufferSize,
- OUT PVOID OutBuffer);
+IoFreeMdl(
+ IN PMDL Mdl);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-IoWMISetNotificationCallback(
- IN OUT PVOID Object,
- IN WMI_NOTIFICATION_CALLBACK Callback,
- IN PVOID Context OPTIONAL);
+IoFreeWorkItem(
+ IN PIO_WORKITEM IoWorkItem);
NTKERNELAPI
-NTSTATUS
+PDEVICE_OBJECT
NTAPI
-IoWMISetSingleInstance(
- IN PVOID DataBlockObject,
- IN PUNICODE_STRING InstanceName,
- IN ULONG Version,
- IN ULONG ValueBufferSize,
- IN PVOID ValueBuffer);
+IoGetAttachedDevice(
+ IN PDEVICE_OBJECT DeviceObject);
NTKERNELAPI
-NTSTATUS
+PDEVICE_OBJECT
NTAPI
-IoWMISetSingleItem(
- IN PVOID DataBlockObject,
- IN PUNICODE_STRING InstanceName,
- IN ULONG DataItemId,
- IN ULONG Version,
- IN ULONG ValueBufferSize,
- IN PVOID ValueBuffer);
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+IoGetAttachedDeviceReference(
+ IN PDEVICE_OBJECT DeviceObject);
-#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
NTKERNELAPI
NTSTATUS
NTAPI
-IoValidateDeviceIoControlAccess(
- IN PIRP Irp,
- IN ULONG RequiredAccess);
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WS03)
+IoGetBootDiskInformation(
+ IN OUT PBOOTDISK_INFORMATION BootDiskInformation,
+ IN ULONG Size);
NTKERNELAPI
NTSTATUS
NTAPI
-IoCsqInitializeEx(
- IN PIO_CSQ Csq,
- IN PIO_CSQ_INSERT_IRP_EX CsqInsertIrp,
- IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
- IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
- IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
- IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
- IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
+IoGetDeviceInterfaceAlias(
+ IN PUNICODE_STRING SymbolicLinkName,
+ IN CONST GUID *AliasInterfaceClassGuid,
+ OUT PUNICODE_STRING AliasSymbolicLinkName);
NTKERNELAPI
-NTSTATUS
+PEPROCESS
NTAPI
-IoCsqInsertIrpEx(
- IN PIO_CSQ Csq,
- IN PIRP Irp,
- IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL,
- IN PVOID InsertContext OPTIONAL);
-#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
-
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+IoGetCurrentProcess(VOID);
NTKERNELAPI
NTSTATUS
NTAPI
-IoGetBootDiskInformationLite(
- OUT PBOOTDISK_INFORMATION_LITE *BootDiskInformation);
+IoGetDeviceInterfaces(
+ IN CONST GUID *InterfaceClassGuid,
+ IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
+ IN ULONG Flags,
+ OUT PWSTR *SymbolicLinkList);
NTKERNELAPI
NTSTATUS
NTAPI
-IoCheckShareAccessEx(
- IN ACCESS_MASK DesiredAccess,
- IN ULONG DesiredShareAccess,
- IN OUT PFILE_OBJECT FileObject,
- IN OUT PSHARE_ACCESS ShareAccess,
- IN BOOLEAN Update,
- IN PBOOLEAN WritePermission);
+IoGetDeviceObjectPointer(
+ IN PUNICODE_STRING ObjectName,
+ IN ACCESS_MASK DesiredAccess,
+ OUT PFILE_OBJECT *FileObject,
+ OUT PDEVICE_OBJECT *DeviceObject);
NTKERNELAPI
NTSTATUS
NTAPI
-IoConnectInterruptEx(
- IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters);
+IoGetDeviceProperty(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
+ IN ULONG BufferLength,
+ OUT PVOID PropertyBuffer,
+ OUT PULONG ResultLength);
NTKERNELAPI
-VOID
+PDMA_ADAPTER
NTAPI
-IoDisconnectInterruptEx(
- IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters);
+IoGetDmaAdapter(
+ IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
+ IN PDEVICE_DESCRIPTION DeviceDescription,
+ IN OUT PULONG NumberOfMapRegisters);
-LOGICAL
+NTKERNELAPI
+PVOID
NTAPI
-IoWithinStackLimits(
- IN ULONG_PTR RegionStart,
- IN SIZE_T RegionSize);
+IoGetDriverObjectExtension(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PVOID ClientIdentificationAddress);
NTKERNELAPI
-VOID
+PVOID
NTAPI
-IoSetShareAccessEx(
- IN ACCESS_MASK DesiredAccess,
- IN ULONG DesiredShareAccess,
- IN OUT PFILE_OBJECT FileObject,
- OUT PSHARE_ACCESS ShareAccess,
- IN PBOOLEAN WritePermission);
+IoGetInitialStack(VOID);
-ULONG
+NTKERNELAPI
+PDEVICE_OBJECT
NTAPI
-IoSizeofWorkItem(VOID);
+IoGetRelatedDeviceObject(
+ IN PFILE_OBJECT FileObject);
+NTKERNELAPI
VOID
NTAPI
-IoInitializeWorkItem(
- IN PVOID IoObject,
- IN PIO_WORKITEM IoWorkItem);
+IoQueueWorkItem(
+ IN PIO_WORKITEM IoWorkItem,
+ IN PIO_WORKITEM_ROUTINE WorkerRoutine,
+ IN WORK_QUEUE_TYPE QueueType,
+ IN PVOID Context OPTIONAL);
+NTKERNELAPI
VOID
NTAPI
-IoUninitializeWorkItem(
- IN PIO_WORKITEM IoWorkItem);
+IoInitializeIrp(
+ IN OUT PIRP Irp,
+ IN USHORT PacketSize,
+ IN CCHAR StackSize);
+NTKERNELAPI
VOID
NTAPI
-IoQueueWorkItemEx(
- IN PIO_WORKITEM IoWorkItem,
- IN PIO_WORKITEM_ROUTINE_EX WorkerRoutine,
- IN WORK_QUEUE_TYPE QueueType,
- IN PVOID Context OPTIONAL);
-
-IO_PRIORITY_HINT
-NTAPI
-IoGetIoPriorityHint(
- IN PIRP Irp);
+IoInitializeRemoveLockEx(
+ IN PIO_REMOVE_LOCK Lock,
+ IN ULONG AllocateTag,
+ IN ULONG MaxLockedMinutes,
+ IN ULONG HighWatermark,
+ IN ULONG RemlockSize);
+NTKERNELAPI
NTSTATUS
NTAPI
-IoSetIoPriorityHint(
- IN PIRP Irp,
- IN IO_PRIORITY_HINT PriorityHint);
+IoInitializeTimer(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIO_TIMER_ROUTINE TimerRoutine,
+ IN PVOID Context OPTIONAL);
-NTSTATUS
+NTKERNELAPI
+VOID
NTAPI
-IoAllocateSfioStreamIdentifier(
- IN PFILE_OBJECT FileObject,
- IN ULONG Length,
- IN PVOID Signature,
- OUT PVOID *StreamIdentifier);
+IoInvalidateDeviceRelations(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN DEVICE_RELATION_TYPE Type);
-PVOID
+NTKERNELAPI
+VOID
NTAPI
-IoGetSfioStreamIdentifier(
- IN PFILE_OBJECT FileObject,
- IN PVOID Signature);
+IoInvalidateDeviceState(
+ IN PDEVICE_OBJECT PhysicalDeviceObject);
-NTSTATUS
+NTKERNELAPI
+BOOLEAN
NTAPI
-IoFreeSfioStreamIdentifier(
- IN PFILE_OBJECT FileObject,
- IN PVOID Signature);
+IoIsWdmVersionAvailable(
+ IN UCHAR MajorVersion,
+ IN UCHAR MinorVersion);
NTKERNELAPI
NTSTATUS
NTAPI
-IoRequestDeviceEjectEx(
- IN PDEVICE_OBJECT PhysicalDeviceObject,
- IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL,
- IN PVOID Context OPTIONAL,
- IN PDRIVER_OBJECT DriverObject OPTIONAL);
+IoOpenDeviceInterfaceRegistryKey(
+ IN PUNICODE_STRING SymbolicLinkName,
+ IN ACCESS_MASK DesiredAccess,
+ OUT PHANDLE DeviceInterfaceKey);
NTKERNELAPI
NTSTATUS
NTAPI
-IoSetDevicePropertyData(
- IN PDEVICE_OBJECT Pdo,
- IN CONST DEVPROPKEY *PropertyKey,
- IN LCID Lcid,
- IN ULONG Flags,
- IN DEVPROPTYPE Type,
- IN ULONG Size,
- IN PVOID Data OPTIONAL);
+IoOpenDeviceRegistryKey(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG DevInstKeyType,
+ IN ACCESS_MASK DesiredAccess,
+ OUT PHANDLE DevInstRegKey);
NTKERNELAPI
NTSTATUS
NTAPI
-IoGetDevicePropertyData(
- PDEVICE_OBJECT Pdo,
- CONST DEVPROPKEY *PropertyKey,
- LCID Lcid,
- ULONG Flags,
- ULONG Size,
- PVOID Data,
- PULONG RequiredSize,
- PDEVPROPTYPE Type);
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-#define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
+IoRegisterDeviceInterface(
+ IN PDEVICE_OBJECT PhysicalDeviceObject,
+ IN CONST GUID *InterfaceClassGuid,
+ IN PUNICODE_STRING ReferenceString OPTIONAL,
+ OUT PUNICODE_STRING SymbolicLinkName);
-#if (NTDDI_VERSION >= NTDDI_WS08)
NTKERNELAPI
NTSTATUS
NTAPI
-IoReplacePartitionUnit(
- IN PDEVICE_OBJECT TargetPdo,
- IN PDEVICE_OBJECT SparePdo,
- IN ULONG Flags);
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+IoRegisterPlugPlayNotification(
+ IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
+ IN ULONG EventCategoryFlags,
+ IN PVOID EventCategoryData OPTIONAL,
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine,
+ IN OUT PVOID Context OPTIONAL,
+ OUT PVOID *NotificationEntry);
NTKERNELAPI
NTSTATUS
NTAPI
-IoGetAffinityInterrupt(
- IN PKINTERRUPT InterruptObject,
- OUT PGROUP_AFFINITY GroupAffinity);
+IoRegisterShutdownNotification(
+ IN PDEVICE_OBJECT DeviceObject);
-NTSTATUS
+NTKERNELAPI
+VOID
NTAPI
-IoGetContainerInformation(
- IN IO_CONTAINER_INFORMATION_CLASS InformationClass,
- IN PVOID ContainerObject OPTIONAL,
- IN OUT PVOID Buffer OPTIONAL,
- IN ULONG BufferLength);
+IoReleaseCancelSpinLock(
+ IN KIRQL Irql);
-NTSTATUS
+NTKERNELAPI
+VOID
NTAPI
-IoRegisterContainerNotification(
- IN IO_CONTAINER_NOTIFICATION_CLASS NotificationClass,
- IN PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction,
- IN PVOID NotificationInformation OPTIONAL,
- IN ULONG NotificationInformationLength,
- OUT PVOID CallbackRegistration);
+IoReleaseRemoveLockAndWaitEx(
+ IN PIO_REMOVE_LOCK RemoveLock,
+ IN PVOID Tag OPTIONAL,
+ IN ULONG RemlockSize);
+NTKERNELAPI
VOID
NTAPI
-IoUnregisterContainerNotification(
- IN PVOID CallbackRegistration);
+IoReleaseRemoveLockEx(
+ IN PIO_REMOVE_LOCK RemoveLock,
+ IN PVOID Tag OPTIONAL,
+ IN ULONG RemlockSize);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-IoUnregisterPlugPlayNotificationEx(
- IN PVOID NotificationEntry);
+IoRemoveShareAccess(
+ IN PFILE_OBJECT FileObject,
+ IN OUT PSHARE_ACCESS ShareAccess);
NTKERNELAPI
NTSTATUS
NTAPI
-IoGetDeviceNumaNode(
- IN PDEVICE_OBJECT Pdo,
- OUT PUSHORT NodeNumber);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+IoReportTargetDeviceChange(
+ IN PDEVICE_OBJECT PhysicalDeviceObject,
+ IN PVOID NotificationStructure);
-#if defined(_WIN64)
NTKERNELAPI
-ULONG
+NTSTATUS
NTAPI
-IoWMIDeviceObjectToProviderId(
- IN PDEVICE_OBJECT DeviceObject);
-#else
-#define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
-#endif
-
-/*
- * USHORT
- * IoSizeOfIrp(
- * IN CCHAR StackSize)
- */
-#define IoSizeOfIrp(_StackSize) \
- ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
-
-FORCEINLINE
-VOID
-IoSkipCurrentIrpStackLocation (
- IN OUT PIRP Irp)
-{
- ASSERT(Irp->CurrentLocation <= Irp->StackCount);
- Irp->CurrentLocation++;
- Irp->Tail.Overlay.CurrentStackLocation++;
-}
-
-FORCEINLINE
-VOID
-IoSetNextIrpStackLocation (
- IN OUT PIRP Irp)
-{
- ASSERT(Irp->CurrentLocation > 0);
- Irp->CurrentLocation--;
- Irp->Tail.Overlay.CurrentStackLocation--;
-}
-
-FORCEINLINE
-PIO_STACK_LOCATION
-IoGetNextIrpStackLocation(
- IN PIRP Irp)
-{
- ASSERT(Irp->CurrentLocation > 0);
- return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
-}
-
-FORCEINLINE
-VOID
-IoSetCompletionRoutine(
- IN PIRP Irp,
- IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL,
- IN PVOID Context OPTIONAL,
- IN BOOLEAN InvokeOnSuccess,
- IN BOOLEAN InvokeOnError,
- IN BOOLEAN InvokeOnCancel)
-{
- PIO_STACK_LOCATION irpSp;
- ASSERT( (InvokeOnSuccess || InvokeOnError || InvokeOnCancel) ? (CompletionRoutine != NULL) : TRUE );
- irpSp = IoGetNextIrpStackLocation(Irp);
- irpSp->CompletionRoutine = CompletionRoutine;
- irpSp->Context = Context;
- irpSp->Control = 0;
-
- if (InvokeOnSuccess) {
- irpSp->Control = SL_INVOKE_ON_SUCCESS;
- }
-
- if (InvokeOnError) {
- irpSp->Control |= SL_INVOKE_ON_ERROR;
- }
-
- if (InvokeOnCancel) {
- irpSp->Control |= SL_INVOKE_ON_CANCEL;
- }
-}
-
-/*
- * PDRIVER_CANCEL
- * IoSetCancelRoutine(
- * IN PIRP Irp,
- * IN PDRIVER_CANCEL CancelRoutine)
- */
-#define IoSetCancelRoutine(_Irp, \
- _CancelRoutine) \
- ((PDRIVER_CANCEL) (ULONG_PTR) InterlockedExchangePointer( \
- (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (ULONG_PTR) (_CancelRoutine)))
-
-/*
- * VOID
- * IoRequestDpc(
- * IN PDEVICE_OBJECT DeviceObject,
- * IN PIRP Irp,
- * IN PVOID Context);
- */
-#define IoRequestDpc(DeviceObject, Irp, Context)( \
- KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
-
-/*
- * VOID
- * IoReleaseRemoveLock(
- * IN PIO_REMOVE_LOCK RemoveLock,
- * IN PVOID Tag)
- */
-#define IoReleaseRemoveLock(_RemoveLock, \
- _Tag) \
- IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
-
-/*
- * VOID
- * IoReleaseRemoveLockAndWait(
- * IN PIO_REMOVE_LOCK RemoveLock,
- * IN PVOID Tag)
- */
-#define IoReleaseRemoveLockAndWait(_RemoveLock, \
- _Tag) \
- IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+IoReportTargetDeviceChangeAsynchronous(
+ IN PDEVICE_OBJECT PhysicalDeviceObject,
+ IN PVOID NotificationStructure,
+ IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL,
+ IN PVOID Context OPTIONAL);
-#if defined(_WIN64)
NTKERNELAPI
-BOOLEAN
-IoIs32bitProcess(
- IN PIRP Irp OPTIONAL);
-#endif
-
-#define PLUGPLAY_REGKEY_DEVICE 1
-#define PLUGPLAY_REGKEY_DRIVER 2
-#define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
-
-FORCEINLINE
-PIO_STACK_LOCATION
-IoGetCurrentIrpStackLocation(
- IN PIRP Irp)
-{
- ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
- return Irp->Tail.Overlay.CurrentStackLocation;
-}
-
-FORCEINLINE
-VOID
-IoMarkIrpPending(
- IN OUT PIRP Irp)
-{
- IoGetCurrentIrpStackLocation( (Irp) )->Control |= SL_PENDING_RETURNED;
-}
-
-/*
- * BOOLEAN
- * IoIsErrorUserInduced(
- * IN NTSTATUS Status);
- */
-#define IoIsErrorUserInduced(Status) \
- ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
- ((Status) == STATUS_IO_TIMEOUT) || \
- ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
- ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
- ((Status) == STATUS_VERIFY_REQUIRED) || \
- ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
- ((Status) == STATUS_WRONG_VOLUME)))
-
-/* VOID
- * IoInitializeRemoveLock(
- * IN PIO_REMOVE_LOCK Lock,
- * IN ULONG AllocateTag,
- * IN ULONG MaxLockedMinutes,
- * IN ULONG HighWatermark)
- */
-#define IoInitializeRemoveLock( \
- Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
- IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
- HighWatermark, sizeof(IO_REMOVE_LOCK))
-
-VOID
-FORCEINLINE
-IoInitializeDpcRequest(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIO_DPC_ROUTINE DpcRoutine)
-{
- KeInitializeDpc( &DeviceObject->Dpc,
- (PKDEFERRED_ROUTINE) DpcRoutine,
- DeviceObject );
-}
+VOID
+NTAPI
+IoRequestDeviceEject(
+ IN PDEVICE_OBJECT PhysicalDeviceObject);
-#define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
+NTKERNELAPI
+VOID
+NTAPI
+IoReuseIrp(
+ IN OUT PIRP Irp,
+ IN NTSTATUS Status);
-/*
- * ULONG
- * IoGetFunctionCodeFromCtlCode(
- * IN ULONG ControlCode)
- */
-#define IoGetFunctionCodeFromCtlCode(_ControlCode) \
- (((_ControlCode) >> 2) & 0x00000FFF)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetDeviceInterfaceState(
+ IN PUNICODE_STRING SymbolicLinkName,
+ IN BOOLEAN Enable);
-FORCEINLINE
+NTKERNELAPI
VOID
-IoCopyCurrentIrpStackLocationToNext(
- IN OUT PIRP Irp)
-{
- PIO_STACK_LOCATION irpSp;
- PIO_STACK_LOCATION nextIrpSp;
- irpSp = IoGetCurrentIrpStackLocation(Irp);
- nextIrpSp = IoGetNextIrpStackLocation(Irp);
- RtlCopyMemory( nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine));
- nextIrpSp->Control = 0;
-}
+NTAPI
+IoSetShareAccess(
+ IN ACCESS_MASK DesiredAccess,
+ IN ULONG DesiredShareAccess,
+ IN OUT PFILE_OBJECT FileObject,
+ OUT PSHARE_ACCESS ShareAccess);
NTKERNELAPI
VOID
NTAPI
-IoGetStackLimits(
- OUT PULONG_PTR LowLimit,
- OUT PULONG_PTR HighLimit);
+IoStartNextPacket(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN BOOLEAN Cancelable);
-FORCEINLINE
-ULONG_PTR
-IoGetRemainingStackSize(VOID)
-{
- ULONG_PTR End, Begin;
- ULONG_PTR Result;
+NTKERNELAPI
+VOID
+NTAPI
+IoStartNextPacketByKey(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN BOOLEAN Cancelable,
+ IN ULONG Key);
- IoGetStackLimits(&Begin, &End);
- Result = (ULONG_PTR)(&End) - Begin;
- return Result;
-}
+NTKERNELAPI
+VOID
+NTAPI
+IoStartPacket(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp,
+ IN PULONG Key OPTIONAL,
+ IN PDRIVER_CANCEL CancelFunction OPTIONAL);
-#if (NTDDI_VERSION >= NTDDI_WS03)
+NTKERNELAPI
VOID
-FORCEINLINE
-IoInitializeThreadedDpcRequest(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIO_DPC_ROUTINE DpcRoutine)
-{
- KeInitializeThreadedDpc(&DeviceObject->Dpc,
- (PKDEFERRED_ROUTINE) DpcRoutine,
- DeviceObject );
-}
-#endif
+NTAPI
+IoStartTimer(
+ IN PDEVICE_OBJECT DeviceObject);
-/******************************************************************************
- * Power Management Support Functions *
- ******************************************************************************/
+NTKERNELAPI
+VOID
+NTAPI
+IoStopTimer(
+ IN PDEVICE_OBJECT DeviceObject);
-#define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoUnregisterPlugPlayNotification(
+ IN PVOID NotificationEntry);
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+NTKERNELAPI
+VOID
+NTAPI
+IoUnregisterShutdownNotification(
+ IN PDEVICE_OBJECT DeviceObject);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-PoCallDriver(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN OUT struct _IRP *Irp);
+IoUpdateShareAccess(
+ IN PFILE_OBJECT FileObject,
+ IN OUT PSHARE_ACCESS ShareAccess);
NTKERNELAPI
-PULONG
+NTSTATUS
NTAPI
-PoRegisterDeviceForIdleDetection(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN ULONG ConservationIdleTime,
- IN ULONG PerformanceIdleTime,
- IN DEVICE_POWER_STATE State);
+IoWMIAllocateInstanceIds(
+ IN GUID *Guid,
+ IN ULONG InstanceCount,
+ OUT ULONG *FirstInstanceId);
NTKERNELAPI
-PVOID
+NTSTATUS
NTAPI
-PoRegisterSystemState(
- IN OUT PVOID StateHandle OPTIONAL,
- IN EXECUTION_STATE Flags);
+IoWMIQuerySingleInstanceMultiple(
+ IN PVOID *DataBlockObjectList,
+ IN PUNICODE_STRING InstanceNames,
+ IN ULONG ObjectCount,
+ IN OUT ULONG *InOutBufferSize,
+ OUT PVOID OutBuffer);
NTKERNELAPI
NTSTATUS
NTAPI
-PoRequestPowerIrp(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN UCHAR MinorFunction,
- IN POWER_STATE PowerState,
- IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL,
- IN PVOID Context OPTIONAL,
- OUT struct _IRP **Irp OPTIONAL);
+IoWMIRegistrationControl(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG Action);
NTKERNELAPI
-POWER_STATE
+NTSTATUS
NTAPI
-PoSetPowerState(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN POWER_STATE_TYPE Type,
- IN POWER_STATE State);
+IoWMISuggestInstanceName(
+ IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
+ IN PUNICODE_STRING SymbolicLinkName OPTIONAL,
+ IN BOOLEAN CombineNames,
+ OUT PUNICODE_STRING SuggestedInstanceName);
NTKERNELAPI
-VOID
+NTSTATUS
NTAPI
-PoSetSystemState(
- IN EXECUTION_STATE Flags);
+IoWMIWriteEvent(
+ IN OUT PVOID WnodeEventItem);
NTKERNELAPI
VOID
NTAPI
-PoStartNextPowerIrp(
- IN OUT struct _IRP *Irp);
+IoWriteErrorLogEntry(
+ IN PVOID ElEntry);
NTKERNELAPI
-VOID
+PIRP
NTAPI
-PoUnregisterSystemState(
- IN OUT PVOID StateHandle);
+IoGetTopLevelIrp(VOID);
NTKERNELAPI
NTSTATUS
NTAPI
-PoRequestShutdownEvent(
- OUT PVOID *Event);
+IoRegisterLastChanceShutdownNotification(
+ IN PDEVICE_OBJECT DeviceObject);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetTopLevelIrp(
+ IN PIRP Irp OPTIONAL);
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCsqInitialize(
+ IN PIO_CSQ Csq,
+ IN PIO_CSQ_INSERT_IRP CsqInsertIrp,
+ IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
+ IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
+ IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
+ IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
+ IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
NTKERNELAPI
VOID
NTAPI
-PoSetSystemWake(
- IN OUT struct _IRP *Irp);
+IoCsqInsertIrp(
+ IN PIO_CSQ Csq,
+ IN PIRP Irp,
+ IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL);
NTKERNELAPI
-BOOLEAN
+PIRP
NTAPI
-PoGetSystemWake(
- IN struct _IRP *Irp);
+IoCsqRemoveIrp(
+ IN PIO_CSQ Csq,
+ IN PIO_CSQ_IRP_CONTEXT Context);
NTKERNELAPI
-NTSTATUS
+PIRP
NTAPI
-PoRegisterPowerSettingCallback(
- IN PDEVICE_OBJECT DeviceObject OPTIONAL,
- IN LPCGUID SettingGuid,
- IN PPOWER_SETTING_CALLBACK Callback,
- IN PVOID Context OPTIONAL,
- OUT PVOID *Handle OPTIONAL);
+IoCsqRemoveNextIrp(
+ IN PIO_CSQ Csq,
+ IN PVOID PeekContext OPTIONAL);
NTKERNELAPI
-NTSTATUS
+BOOLEAN
NTAPI
-PoUnregisterPowerSettingCallback(
- IN OUT PVOID Handle);
+IoForwardIrpSynchronously(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp);
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+#define IoForwardAndCatchIrp IoForwardIrpSynchronously
-#if (NTDDI_VERSION >= NTDDI_VISTASP1)
NTKERNELAPI
VOID
NTAPI
-PoSetDeviceBusyEx(
- IN OUT PULONG IdlePointer);
-#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+IoFreeErrorLogEntry(
+ PVOID ElEntry);
NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetCompletionRoutineEx(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp,
+ IN PIO_COMPLETION_ROUTINE CompletionRoutine,
+ IN PVOID Context,
+ IN BOOLEAN InvokeOnSuccess,
+ IN BOOLEAN InvokeOnError,
+ IN BOOLEAN InvokeOnCancel);
+
VOID
NTAPI
-PoStartDeviceBusy(
- IN OUT PULONG IdlePointer);
+IoSetStartIoAttributes(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN BOOLEAN DeferredStartIo,
+ IN BOOLEAN NonCancelable);
NTKERNELAPI
-VOID
+NTSTATUS
NTAPI
-PoEndDeviceBusy(
- IN OUT PULONG IdlePointer);
+IoWMIDeviceObjectToInstanceName(
+ IN PVOID DataBlockObject,
+ IN PDEVICE_OBJECT DeviceObject,
+ OUT PUNICODE_STRING InstanceName);
NTKERNELAPI
-BOOLEAN
+NTSTATUS
NTAPI
-PoQueryWatchdogTime(
- IN PDEVICE_OBJECT Pdo,
- OUT PULONG SecondsRemaining);
+IoWMIExecuteMethod(
+ IN PVOID DataBlockObject,
+ IN PUNICODE_STRING InstanceName,
+ IN ULONG MethodId,
+ IN ULONG InBufferSize,
+ IN OUT PULONG OutBufferSize,
+ IN OUT PUCHAR InOutBuffer);
NTKERNELAPI
-VOID
+NTSTATUS
NTAPI
-PoDeletePowerRequest(
- IN OUT PVOID PowerRequest);
+IoWMIHandleToInstanceName(
+ IN PVOID DataBlockObject,
+ IN HANDLE FileHandle,
+ OUT PUNICODE_STRING InstanceName);
NTKERNELAPI
NTSTATUS
NTAPI
-PoSetPowerRequest(
- IN OUT PVOID PowerRequest,
- IN POWER_REQUEST_TYPE Type);
+IoWMIOpenBlock(
+ IN GUID *DataBlockGuid,
+ IN ULONG DesiredAccess,
+ OUT PVOID *DataBlockObject);
NTKERNELAPI
NTSTATUS
NTAPI
-PoClearPowerRequest(
- IN OUT PVOID PowerRequest,
- IN POWER_REQUEST_TYPE Type);
+IoWMIQueryAllData(
+ IN PVOID DataBlockObject,
+ IN OUT ULONG *InOutBufferSize,
+ OUT PVOID OutBuffer);
NTKERNELAPI
NTSTATUS
NTAPI
-PoCreatePowerRequest(
- OUT PVOID *PowerRequest,
- IN PDEVICE_OBJECT DeviceObject,
- IN PCOUNTED_REASON_CONTEXT Context);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-/******************************************************************************
- * Executive Functions *
- ******************************************************************************/
-
-#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
-#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
-#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
-
-#define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
-#define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
-#define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
-#define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
-
-#define ExInitializeSListHead InitializeSListHead
+IoWMIQueryAllDataMultiple(
+ IN PVOID *DataBlockObjectList,
+ IN ULONG ObjectCount,
+ IN OUT ULONG *InOutBufferSize,
+ OUT PVOID OutBuffer);
-#if defined(_NTHAL_) && defined(_X86_)
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoWMIQuerySingleInstance(
+ IN PVOID DataBlockObject,
+ IN PUNICODE_STRING InstanceName,
+ IN OUT ULONG *InOutBufferSize,
+ OUT PVOID OutBuffer);
NTKERNELAPI
-VOID
-FASTCALL
-ExiAcquireFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
+NTSTATUS
+NTAPI
+IoWMISetNotificationCallback(
+ IN OUT PVOID Object,
+ IN WMI_NOTIFICATION_CALLBACK Callback,
+ IN PVOID Context OPTIONAL);
NTKERNELAPI
-VOID
-FASTCALL
-ExiReleaseFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
+NTSTATUS
+NTAPI
+IoWMISetSingleInstance(
+ IN PVOID DataBlockObject,
+ IN PUNICODE_STRING InstanceName,
+ IN ULONG Version,
+ IN ULONG ValueBufferSize,
+ IN PVOID ValueBuffer);
NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExiTryToAcquireFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
+NTSTATUS
+NTAPI
+IoWMISetSingleItem(
+ IN PVOID DataBlockObject,
+ IN PUNICODE_STRING InstanceName,
+ IN ULONG DataItemId,
+ IN ULONG Version,
+ IN ULONG ValueBufferSize,
+ IN PVOID ValueBuffer);
-#define ExAcquireFastMutex ExiAcquireFastMutex
-#define ExReleaseFastMutex ExiReleaseFastMutex
-#define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
+#endif
+#if defined(_WIN64)
+NTKERNELAPI
+ULONG
+NTAPI
+IoWMIDeviceObjectToProviderId(
+ IN PDEVICE_OBJECT DeviceObject);
#else
+#define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
+#endif
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+/*
+ * USHORT
+ * IoSizeOfIrp(
+ * IN CCHAR StackSize)
+ */
+#define IoSizeOfIrp(_StackSize) \
+ ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
-NTKERNELAPI
+FORCEINLINE
VOID
-FASTCALL
-ExAcquireFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
+IoSkipCurrentIrpStackLocation (
+ IN OUT PIRP Irp)
+{
+ ASSERT(Irp->CurrentLocation <= Irp->StackCount);
+ Irp->CurrentLocation++;
+ Irp->Tail.Overlay.CurrentStackLocation++;
+}
-NTKERNELAPI
+FORCEINLINE
VOID
-FASTCALL
-ExReleaseFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
-
-NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExTryToAcquireFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#endif /* defined(_NTHAL_) && defined(_X86_) */
-
-#if defined(_X86_)
-#define ExInterlockedAddUlong ExfInterlockedAddUlong
-#define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
-#define ExInterlockedInsertTailList ExfInterlockedInsertTailList
-#define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
-#define ExInterlockedPopEntryList ExfInterlockedPopEntryList
-#define ExInterlockedPushEntryList ExfInterlockedPushEntryList
-#endif /* defined(_X86_) */
-
-#if defined(_WIN64)
+IoSetNextIrpStackLocation (
+ IN OUT PIRP Irp)
+{
+ ASSERT(Irp->CurrentLocation > 0);
+ Irp->CurrentLocation--;
+ Irp->Tail.Overlay.CurrentStackLocation--;
+}
-#if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
- defined(_NTHAL_) || defined(_NTOSP_)
-NTKERNELAPI
-USHORT
-ExQueryDepthSList(IN PSLIST_HEADER ListHead);
-#else
FORCEINLINE
-USHORT
-ExQueryDepthSList(IN PSLIST_HEADER ListHead)
+PIO_STACK_LOCATION
+IoGetNextIrpStackLocation(
+ IN PIRP Irp)
{
- return (USHORT)(ListHead->Alignment & 0xffff);
+ ASSERT(Irp->CurrentLocation > 0);
+ return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
}
-#endif
-
-NTKERNELAPI
-PSLIST_ENTRY
-ExpInterlockedFlushSList(
- PSLIST_HEADER ListHead);
-
-NTKERNELAPI
-PSLIST_ENTRY
-ExpInterlockedPopEntrySList(
- PSLIST_HEADER ListHead);
-
-NTKERNELAPI
-PSLIST_ENTRY
-ExpInterlockedPushEntrySList(
- PSLIST_HEADER ListHead,
- PSLIST_ENTRY ListEntry);
-
-#define ExInterlockedFlushSList(Head) \
- ExpInterlockedFlushSList(Head)
-#define ExInterlockedPopEntrySList(Head, Lock) \
- ExpInterlockedPopEntrySList(Head)
-#define ExInterlockedPushEntrySList(Head, Entry, Lock) \
- ExpInterlockedPushEntrySList(Head, Entry)
-
-#else /* !defined(_WIN64) */
-#define ExQueryDepthSList(listhead) (listhead)->Depth
-
-NTKERNELAPI
-PSINGLE_LIST_ENTRY
-FASTCALL
-ExInterlockedFlushSList(
- IN OUT PSLIST_HEADER ListHead);
+FORCEINLINE
+VOID
+IoSetCompletionRoutine(
+ IN PIRP Irp,
+ IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL,
+ IN PVOID Context OPTIONAL,
+ IN BOOLEAN InvokeOnSuccess,
+ IN BOOLEAN InvokeOnError,
+ IN BOOLEAN InvokeOnCancel)
+{
+ PIO_STACK_LOCATION irpSp;
+ ASSERT( (InvokeOnSuccess || InvokeOnError || InvokeOnCancel) ? (CompletionRoutine != NULL) : TRUE );
+ irpSp = IoGetNextIrpStackLocation(Irp);
+ irpSp->CompletionRoutine = CompletionRoutine;
+ irpSp->Context = Context;
+ irpSp->Control = 0;
-#endif /* !defined(_WIN64) */
+ if (InvokeOnSuccess) {
+ irpSp->Control = SL_INVOKE_ON_SUCCESS;
+ }
-#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+ if (InvokeOnError) {
+ irpSp->Control |= SL_INVOKE_ON_ERROR;
+ }
-NTKERNELAPI
-PSINGLE_LIST_ENTRY
-FASTCALL
-ExInterlockedPopEntrySList(
- IN PSLIST_HEADER ListHead,
- IN PKSPIN_LOCK Lock);
+ if (InvokeOnCancel) {
+ irpSp->Control |= SL_INVOKE_ON_CANCEL;
+ }
+}
-NTKERNELAPI
-PSINGLE_LIST_ENTRY
-FASTCALL
-ExInterlockedPushEntrySList(
- IN PSLIST_HEADER ListHead,
- IN PSINGLE_LIST_ENTRY ListEntry,
- IN PKSPIN_LOCK Lock);
+/*
+ * PDRIVER_CANCEL
+ * IoSetCancelRoutine(
+ * IN PIRP Irp,
+ * IN PDRIVER_CANCEL CancelRoutine)
+ */
+#define IoSetCancelRoutine(_Irp, \
+ _CancelRoutine) \
+ ((PDRIVER_CANCEL) (ULONG_PTR) InterlockedExchangePointer( \
+ (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (ULONG_PTR) (_CancelRoutine)))
-NTKERNELAPI
-PVOID
-NTAPI
-ExAllocateFromPagedLookasideList(
- IN OUT PPAGED_LOOKASIDE_LIST Lookaside);
+/*
+ * VOID
+ * IoRequestDpc(
+ * IN PDEVICE_OBJECT DeviceObject,
+ * IN PIRP Irp,
+ * IN PVOID Context);
+ */
+#define IoRequestDpc(DeviceObject, Irp, Context)( \
+ KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
-NTKERNELAPI
-VOID
-NTAPI
-ExFreeToPagedLookasideList(
- IN OUT PPAGED_LOOKASIDE_LIST Lookaside,
- IN PVOID Entry);
+/*
+ * VOID
+ * IoReleaseRemoveLock(
+ * IN PIO_REMOVE_LOCK RemoveLock,
+ * IN PVOID Tag)
+ */
+#define IoReleaseRemoveLock(_RemoveLock, \
+ _Tag) \
+ IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
-#else /* !_WIN2K_COMPAT_SLIST_USAGE */
+/*
+ * VOID
+ * IoReleaseRemoveLockAndWait(
+ * IN PIO_REMOVE_LOCK RemoveLock,
+ * IN PVOID Tag)
+ */
+#define IoReleaseRemoveLockAndWait(_RemoveLock, \
+ _Tag) \
+ IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
-#if !defined(_WIN64)
-#define ExInterlockedPopEntrySList(_ListHead, _Lock) \
- InterlockedPopEntrySList(_ListHead)
-#define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
- InterlockedPushEntrySList(_ListHead, _ListEntry)
+#if defined(_WIN64)
+NTKERNELAPI
+BOOLEAN
+IoIs32bitProcess(
+ IN PIRP Irp OPTIONAL);
#endif
-static __inline
-PVOID
-ExAllocateFromPagedLookasideList(
- IN OUT PPAGED_LOOKASIDE_LIST Lookaside)
+#define PLUGPLAY_REGKEY_DEVICE 1
+#define PLUGPLAY_REGKEY_DRIVER 2
+#define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
+
+FORCEINLINE
+PIO_STACK_LOCATION
+IoGetCurrentIrpStackLocation(
+ IN PIRP Irp)
{
- PVOID Entry;
-
- Lookaside->L.TotalAllocates++;
- Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
- if (Entry == NULL) {
- Lookaside->L.AllocateMisses++;
- Entry = (Lookaside->L.Allocate)(Lookaside->L.Type,
- Lookaside->L.Size,
- Lookaside->L.Tag);
- }
- return Entry;
+ ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
+ return Irp->Tail.Overlay.CurrentStackLocation;
}
-static __inline
+FORCEINLINE
VOID
-ExFreeToPagedLookasideList(
- IN OUT PPAGED_LOOKASIDE_LIST Lookaside,
- IN PVOID Entry)
+IoMarkIrpPending(
+ IN OUT PIRP Irp)
{
- Lookaside->L.TotalFrees++;
- if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
- Lookaside->L.FreeMisses++;
- (Lookaside->L.Free)(Entry);
- } else {
- InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
- }
+ IoGetCurrentIrpStackLocation( (Irp) )->Control |= SL_PENDING_RETURNED;
}
-#endif /* _WIN2K_COMPAT_SLIST_USAGE */
-
-
-/* ERESOURCE_THREAD
- * ExGetCurrentResourceThread(
- * VOID);
+/*
+ * BOOLEAN
+ * IoIsErrorUserInduced(
+ * IN NTSTATUS Status);
*/
-#define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
-
-#define ExReleaseResource(R) (ExReleaseResourceLite(R))
+#define IoIsErrorUserInduced(Status) \
+ ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
+ ((Status) == STATUS_IO_TIMEOUT) || \
+ ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
+ ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
+ ((Status) == STATUS_VERIFY_REQUIRED) || \
+ ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
+ ((Status) == STATUS_WRONG_VOLUME)))
/* VOID
- * ExInitializeWorkItem(
- * IN PWORK_QUEUE_ITEM Item,
- * IN PWORKER_THREAD_ROUTINE Routine,
- * IN PVOID Context)
+ * IoInitializeRemoveLock(
+ * IN PIO_REMOVE_LOCK Lock,
+ * IN ULONG AllocateTag,
+ * IN ULONG MaxLockedMinutes,
+ * IN ULONG HighWatermark)
*/
-#define ExInitializeWorkItem(Item, Routine, Context) \
-{ \
- (Item)->WorkerRoutine = Routine; \
- (Item)->Parameter = Context; \
- (Item)->List.Flink = NULL; \
+#define IoInitializeRemoveLock( \
+ Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
+ IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
+ HighWatermark, sizeof(IO_REMOVE_LOCK))
+
+VOID
+FORCEINLINE
+IoInitializeDpcRequest(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIO_DPC_ROUTINE DpcRoutine)
+{
+ KeInitializeDpc( &DeviceObject->Dpc,
+ (PKDEFERRED_ROUTINE) DpcRoutine,
+ DeviceObject );
}
+#define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
+
+/*
+ * ULONG
+ * IoGetFunctionCodeFromCtlCode(
+ * IN ULONG ControlCode)
+ */
+#define IoGetFunctionCodeFromCtlCode(_ControlCode) \
+ (((_ControlCode) >> 2) & 0x00000FFF)
+
FORCEINLINE
VOID
-ExInitializeFastMutex(
- OUT PFAST_MUTEX FastMutex)
+IoCopyCurrentIrpStackLocationToNext(
+ IN OUT PIRP Irp)
{
- FastMutex->Count = FM_LOCK_BIT;
- FastMutex->Owner = NULL;
- FastMutex->Contention = 0;
- KeInitializeEvent(&FastMutex->Event, SynchronizationEvent, FALSE);
- return;
+ PIO_STACK_LOCATION irpSp;
+ PIO_STACK_LOCATION nextIrpSp;
+ irpSp = IoGetCurrentIrpStackLocation(Irp);
+ nextIrpSp = IoGetNextIrpStackLocation(Irp);
+ RtlCopyMemory( nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine));
+ nextIrpSp->Control = 0;
}
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
NTKERNELAPI
VOID
-FASTCALL
-ExAcquireFastMutexUnsafe(
- IN OUT PFAST_MUTEX FastMutex);
+NTAPI
+IoGetStackLimits(
+ OUT PULONG_PTR LowLimit,
+ OUT PULONG_PTR HighLimit);
-NTKERNELAPI
+FORCEINLINE
+ULONG_PTR
+IoGetRemainingStackSize(VOID)
+{
+ ULONG_PTR End, Begin;
+ ULONG_PTR Result;
+
+ IoGetStackLimits(&Begin, &End);
+ Result = (ULONG_PTR)(&End) - Begin;
+ return Result;
+}
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
VOID
-FASTCALL
-ExReleaseFastMutexUnsafe(
- IN OUT PFAST_MUTEX FastMutex);
+FORCEINLINE
+IoInitializeThreadedDpcRequest(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIO_DPC_ROUTINE DpcRoutine)
+{
+ KeInitializeThreadedDpc(&DeviceObject->Dpc,
+ (PKDEFERRED_ROUTINE) DpcRoutine,
+ DeviceObject );
+}
+#endif
-NTKERNELAPI
-BOOLEAN
-NTAPI
-ExAcquireResourceExclusiveLite(
- IN OUT PERESOURCE Resource,
- IN BOOLEAN Wait);
+/******************************************************************************
+ * Power Management Support Functions *
+ ******************************************************************************/
-NTKERNELAPI
-BOOLEAN
-NTAPI
-ExAcquireResourceSharedLite(
- IN OUT PERESOURCE Resource,
- IN BOOLEAN Wait);
+#define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
-NTKERNELAPI
-BOOLEAN
-NTAPI
-ExAcquireSharedStarveExclusive(
- IN OUT PERESOURCE Resource,
- IN BOOLEAN Wait);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTKERNELAPI
-BOOLEAN
+NTSTATUS
NTAPI
-ExAcquireSharedWaitForExclusive(
- IN OUT PERESOURCE Resource,
- IN BOOLEAN Wait);
+PoCallDriver(
+ IN struct _DEVICE_OBJECT *DeviceObject,
+ IN OUT struct _IRP *Irp);
NTKERNELAPI
-PVOID
+PULONG
NTAPI
-ExAllocatePool(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes);
+PoRegisterDeviceForIdleDetection(
+ IN struct _DEVICE_OBJECT *DeviceObject,
+ IN ULONG ConservationIdleTime,
+ IN ULONG PerformanceIdleTime,
+ IN DEVICE_POWER_STATE State);
NTKERNELAPI
PVOID
NTAPI
-ExAllocatePoolWithQuota(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes);
+PoRegisterSystemState(
+ IN OUT PVOID StateHandle OPTIONAL,
+ IN EXECUTION_STATE Flags);
NTKERNELAPI
-PVOID
+NTSTATUS
NTAPI
-ExAllocatePoolWithQuotaTag(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes,
- IN ULONG Tag);
-
-#ifndef POOL_TAGGING
-#define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
-#endif
+PoRequestPowerIrp(
+ IN struct _DEVICE_OBJECT *DeviceObject,
+ IN UCHAR MinorFunction,
+ IN POWER_STATE PowerState,
+ IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL,
+ IN PVOID Context OPTIONAL,
+ OUT struct _IRP **Irp OPTIONAL);
NTKERNELAPI
-PVOID
+POWER_STATE
NTAPI
-ExAllocatePoolWithTag(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes,
- IN ULONG Tag);
+PoSetPowerState(
+ IN struct _DEVICE_OBJECT *DeviceObject,
+ IN POWER_STATE_TYPE Type,
+ IN POWER_STATE State);
-#ifndef POOL_TAGGING
-#define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
-#endif
+NTKERNELAPI
+VOID
+NTAPI
+PoSetSystemState(
+ IN EXECUTION_STATE Flags);
NTKERNELAPI
-PVOID
+VOID
NTAPI
-ExAllocatePoolWithTagPriority(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes,
- IN ULONG Tag,
- IN EX_POOL_PRIORITY Priority);
+PoStartNextPowerIrp(
+ IN OUT struct _IRP *Irp);
NTKERNELAPI
VOID
NTAPI
-ExConvertExclusiveToSharedLite(
- IN OUT PERESOURCE Resource);
+PoUnregisterSystemState(
+ IN OUT PVOID StateHandle);
NTKERNELAPI
NTSTATUS
NTAPI
-ExCreateCallback(
- OUT PCALLBACK_OBJECT *CallbackObject,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN BOOLEAN Create,
- IN BOOLEAN AllowMultipleCallbacks);
+PoRequestShutdownEvent(
+ OUT PVOID *Event);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
NTKERNELAPI
VOID
NTAPI
-ExDeleteNPagedLookasideList(
- IN OUT PNPAGED_LOOKASIDE_LIST Lookaside);
+PoSetSystemWake(
+ IN OUT struct _IRP *Irp);
NTKERNELAPI
-VOID
+BOOLEAN
NTAPI
-ExDeletePagedLookasideList(
- IN PPAGED_LOOKASIDE_LIST Lookaside);
+PoGetSystemWake(
+ IN struct _IRP *Irp);
NTKERNELAPI
NTSTATUS
NTAPI
-ExDeleteResourceLite(
- IN OUT PERESOURCE Resource);
+PoRegisterPowerSettingCallback(
+ IN PDEVICE_OBJECT DeviceObject OPTIONAL,
+ IN LPCGUID SettingGuid,
+ IN PPOWER_SETTING_CALLBACK Callback,
+ IN PVOID Context OPTIONAL,
+ OUT PVOID *Handle OPTIONAL);
NTKERNELAPI
-VOID
+NTSTATUS
NTAPI
-ExFreePool(
- IN PVOID P);
+PoUnregisterPowerSettingCallback(
+ IN OUT PVOID Handle);
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
NTKERNELAPI
VOID
NTAPI
-ExFreePoolWithTag(
- IN PVOID P,
- IN ULONG Tag);
+PoSetDeviceBusyEx(
+ IN OUT PULONG IdlePointer);
+#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
NTKERNELAPI
-ULONG
+VOID
NTAPI
-ExGetExclusiveWaiterCount(
- IN PERESOURCE Resource);
+PoStartDeviceBusy(
+ IN OUT PULONG IdlePointer);
NTKERNELAPI
-KPROCESSOR_MODE
+VOID
NTAPI
-ExGetPreviousMode(VOID);
+PoEndDeviceBusy(
+ IN OUT PULONG IdlePointer);
NTKERNELAPI
-ULONG
+BOOLEAN
NTAPI
-ExGetSharedWaiterCount(
- IN PERESOURCE Resource);
+PoQueryWatchdogTime(
+ IN PDEVICE_OBJECT Pdo,
+ OUT PULONG SecondsRemaining);
NTKERNELAPI
VOID
NTAPI
-ExInitializeNPagedLookasideList(
- IN PNPAGED_LOOKASIDE_LIST Lookaside,
- IN PALLOCATE_FUNCTION Allocate OPTIONAL,
- IN PFREE_FUNCTION Free OPTIONAL,
- IN ULONG Flags,
- IN SIZE_T Size,
- IN ULONG Tag,
- IN USHORT Depth);
+PoDeletePowerRequest(
+ IN OUT PVOID PowerRequest);
NTKERNELAPI
-VOID
+NTSTATUS
NTAPI
-ExInitializePagedLookasideList(
- IN PPAGED_LOOKASIDE_LIST Lookaside,
- IN PALLOCATE_FUNCTION Allocate OPTIONAL,
- IN PFREE_FUNCTION Free OPTIONAL,
- IN ULONG Flags,
- IN SIZE_T Size,
- IN ULONG Tag,
- IN USHORT Depth);
+PoSetPowerRequest(
+ IN OUT PVOID PowerRequest,
+ IN POWER_REQUEST_TYPE Type);
NTKERNELAPI
NTSTATUS
NTAPI
-ExInitializeResourceLite(
- OUT PERESOURCE Resource);
+PoClearPowerRequest(
+ IN OUT PVOID PowerRequest,
+ IN POWER_REQUEST_TYPE Type);
NTKERNELAPI
-LARGE_INTEGER
+NTSTATUS
NTAPI
-ExInterlockedAddLargeInteger(
- IN PLARGE_INTEGER Addend,
- IN LARGE_INTEGER Increment,
- IN PKSPIN_LOCK Lock);
+PoCreatePowerRequest(
+ OUT PVOID *PowerRequest,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PCOUNTED_REASON_CONTEXT Context);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+/******************************************************************************
+ * Executive Functions *
+ ******************************************************************************/
+
+#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
+#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
+#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
+
+#define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
+#define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
+#define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
+#define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
+
+#define ExInitializeSListHead InitializeSListHead
+
+#if defined(_X86_)
+#if defined(_NTHAL_)
+#define ExAcquireFastMutex ExiAcquireFastMutex
+#define ExReleaseFastMutex ExiReleaseFastMutex
+#define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
+#endif
+#define ExInterlockedAddUlong ExfInterlockedAddUlong
+#define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
+#define ExInterlockedInsertTailList ExfInterlockedInsertTailList
+#define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
+#define ExInterlockedPopEntryList ExfInterlockedPopEntryList
+#define ExInterlockedPushEntryList ExfInterlockedPushEntryList
+#endif /* defined(_X86_) */
#if defined(_WIN64)
-#define ExInterlockedAddLargeStatistic(Addend, Increment) \
- (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
+
+#if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
+ defined(_NTHAL_) || defined(_NTOSP_)
+NTKERNELAPI
+USHORT
+ExQueryDepthSList(IN PSLIST_HEADER ListHead);
#else
-#define ExInterlockedAddLargeStatistic(Addend, Increment) \
- _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
+FORCEINLINE
+USHORT
+ExQueryDepthSList(IN PSLIST_HEADER ListHead)
+{
+ return (USHORT)(ListHead->Alignment & 0xffff);
+}
#endif
NTKERNELAPI
-ULONG
-FASTCALL
-ExInterlockedAddUlong(
- IN PULONG Addend,
- IN ULONG Increment,
- IN OUT PKSPIN_LOCK Lock);
+PSLIST_ENTRY
+ExpInterlockedFlushSList(
+ PSLIST_HEADER ListHead);
-#if defined(_AMD64_) || defined(_IA64_)
+NTKERNELAPI
+PSLIST_ENTRY
+ExpInterlockedPopEntrySList(
+ PSLIST_HEADER ListHead);
-#define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
- InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
+NTKERNELAPI
+PSLIST_ENTRY
+ExpInterlockedPushEntrySList(
+ PSLIST_HEADER ListHead,
+ PSLIST_ENTRY ListEntry);
-#elif defined(_X86_)
+#define ExInterlockedFlushSList(Head) \
+ ExpInterlockedFlushSList(Head)
+#define ExInterlockedPopEntrySList(Head, Lock) \
+ ExpInterlockedPopEntrySList(Head)
+#define ExInterlockedPushEntrySList(Head, Entry, Lock) \
+ ExpInterlockedPushEntrySList(Head, Entry)
+
+#else /* !defined(_WIN64) */
+
+#define ExQueryDepthSList(listhead) (listhead)->Depth
NTKERNELAPI
-LONGLONG
+PSINGLE_LIST_ENTRY
FASTCALL
-ExfInterlockedCompareExchange64(
- IN OUT LONGLONG volatile *Destination,
- IN PLONGLONG Exchange,
- IN PLONGLONG Comperand);
+ExInterlockedFlushSList(
+ IN OUT PSLIST_HEADER ListHead);
-#define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
- ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
+#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
-#else
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedPopEntrySList(
+ IN PSLIST_HEADER ListHead,
+ IN PKSPIN_LOCK Lock);
NTKERNELAPI
-LONGLONG
+PSINGLE_LIST_ENTRY
FASTCALL
-ExInterlockedCompareExchange64(
- IN OUT LONGLONG volatile *Destination,
- IN PLONGLONG Exchange,
- IN PLONGLONG Comparand,
+ExInterlockedPushEntrySList(
+ IN PSLIST_HEADER ListHead,
+ IN PSINGLE_LIST_ENTRY ListEntry,
IN PKSPIN_LOCK Lock);
+#else
+#define ExInterlockedPopEntrySList(_ListHead, _Lock) \
+ InterlockedPopEntrySList(_ListHead)
+#define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
+ InterlockedPushEntrySList(_ListHead, _ListEntry)
+#endif // _WIN2K_COMPAT_SLIST_USAGE
+
+#endif // !defined(_WIN64)
+
+/* ERESOURCE_THREAD
+ * ExGetCurrentResourceThread(
+ * VOID);
+ */
+#define ExGetCurrentResourceThread() ((ERESOURCE_THREAD)PsGetCurrentThread())
+
+#define ExReleaseResource(R) (ExReleaseResourceLite(R))
+
+/* VOID
+ * ExInitializeWorkItem(
+ * IN PWORK_QUEUE_ITEM Item,
+ * IN PWORKER_THREAD_ROUTINE Routine,
+ * IN PVOID Context)
+ */
+#define ExInitializeWorkItem(Item, Routine, Context) \
+{ \
+ (Item)->WorkerRoutine = Routine; \
+ (Item)->Parameter = Context; \
+ (Item)->List.Flink = NULL; \
+}
+
+FORCEINLINE
+VOID
+ExInitializeFastMutex(
+ OUT PFAST_MUTEX FastMutex)
+{
+ FastMutex->Count = FM_LOCK_BIT;
+ FastMutex->Owner = NULL;
+ FastMutex->Contention = 0;
+ KeInitializeEvent(&FastMutex->Event, SynchronizationEvent, FALSE);
+ return;
+}
-#endif /* defined(_AMD64_) || defined(_IA64_) */
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTKERNELAPI
-PLIST_ENTRY
+VOID
FASTCALL
-ExInterlockedInsertHeadList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PLIST_ENTRY ListEntry,
- IN OUT PKSPIN_LOCK Lock);
+ExAcquireFastMutex(
+ IN OUT PFAST_MUTEX FastMutex);
NTKERNELAPI
-PLIST_ENTRY
+VOID
FASTCALL
-ExInterlockedInsertTailList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PLIST_ENTRY ListEntry,
- IN OUT PKSPIN_LOCK Lock);
+ExReleaseFastMutex(
+ IN OUT PFAST_MUTEX FastMutex);
NTKERNELAPI
-PSINGLE_LIST_ENTRY
+BOOLEAN
FASTCALL
-ExInterlockedPopEntryList(
- IN OUT PSINGLE_LIST_ENTRY ListHead,
- IN OUT PKSPIN_LOCK Lock);
+ExTryToAcquireFastMutex(
+ IN OUT PFAST_MUTEX FastMutex);
NTKERNELAPI
-PSINGLE_LIST_ENTRY
+VOID
FASTCALL
-ExInterlockedPushEntryList(
- IN OUT PSINGLE_LIST_ENTRY ListHead,
- IN OUT PSINGLE_LIST_ENTRY ListEntry,
- IN OUT PKSPIN_LOCK Lock);
+ExAcquireFastMutexUnsafe(
+ IN OUT PFAST_MUTEX FastMutex);
NTKERNELAPI
-PLIST_ENTRY
+VOID
FASTCALL
-ExInterlockedRemoveHeadList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PKSPIN_LOCK Lock);
+ExReleaseFastMutexUnsafe(
+ IN OUT PFAST_MUTEX FastMutex);
NTKERNELAPI
BOOLEAN
NTAPI
-ExIsProcessorFeaturePresent(
- IN ULONG ProcessorFeature);
+ExAcquireResourceExclusiveLite(
+ IN OUT PERESOURCE Resource,
+ IN BOOLEAN Wait);
NTKERNELAPI
BOOLEAN
NTAPI
-ExIsResourceAcquiredExclusiveLite(
- IN PERESOURCE Resource);
+ExAcquireResourceSharedLite(
+ IN OUT PERESOURCE Resource,
+ IN BOOLEAN Wait);
NTKERNELAPI
-ULONG
+BOOLEAN
NTAPI
-ExIsResourceAcquiredSharedLite(
- IN PERESOURCE Resource);
-
-#define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
+ExAcquireSharedStarveExclusive(
+ IN OUT PERESOURCE Resource,
+ IN BOOLEAN Wait);
NTKERNELAPI
-VOID
+BOOLEAN
NTAPI
-ExLocalTimeToSystemTime(
- IN PLARGE_INTEGER LocalTime,
- OUT PLARGE_INTEGER SystemTime);
+ExAcquireSharedWaitForExclusive(
+ IN OUT PERESOURCE Resource,
+ IN BOOLEAN Wait);
NTKERNELAPI
-VOID
+PVOID
NTAPI
-ExNotifyCallback(
- IN PCALLBACK_OBJECT CallbackObject,
- IN PVOID Argument1 OPTIONAL,
- IN PVOID Argument2 OPTIONAL);
+ExAllocatePool(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes);
-NTKERNELAPI
-VOID
-NTAPI
-ExQueueWorkItem(
- IN OUT PWORK_QUEUE_ITEM WorkItem,
- IN WORK_QUEUE_TYPE QueueType);
+#ifdef POOL_TAGGING
+#define ExAllocatePool(p,n) ExAllocatePoolWithTag(p,n,' kdD')
+#endif /* POOL_TAGGING */
NTKERNELAPI
-DECLSPEC_NORETURN
-VOID
+PVOID
NTAPI
-ExRaiseStatus(
- IN NTSTATUS Status);
+ExAllocatePoolWithQuota(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes);
+
+#ifdef POOL_TAGGING
+#define ExAllocatePoolWithQuota(p,n) ExAllocatePoolWithQuotaTag(p,n,' kdD')
+#endif /* POOL_TAGGING */
NTKERNELAPI
PVOID
NTAPI
-ExRegisterCallback(
- IN PCALLBACK_OBJECT CallbackObject,
- IN PCALLBACK_FUNCTION CallbackFunction,
- IN PVOID CallbackContext OPTIONAL);
+ExAllocatePoolWithQuotaTag(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes,
+ IN ULONG Tag);
-NTKERNELAPI
-NTSTATUS
-NTAPI
-ExReinitializeResourceLite(
- IN OUT PERESOURCE Resource);
+#ifndef POOL_TAGGING
+#define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
+#endif
NTKERNELAPI
-VOID
+PVOID
NTAPI
-ExReleaseResourceForThreadLite(
- IN OUT PERESOURCE Resource,
- IN ERESOURCE_THREAD ResourceThreadId);
+ExAllocatePoolWithTag(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes,
+ IN ULONG Tag);
NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseResourceLite(
- IN OUT PERESOURCE Resource);
+PVOID
+NTAPI
+ExAllocatePoolWithTagPriority(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes,
+ IN ULONG Tag,
+ IN EX_POOL_PRIORITY Priority);
NTKERNELAPI
VOID
NTAPI
-ExSetResourceOwnerPointer(
- IN OUT PERESOURCE Resource,
- IN PVOID OwnerPointer);
+ExConvertExclusiveToSharedLite(
+ IN OUT PERESOURCE Resource);
NTKERNELAPI
-ULONG
+NTSTATUS
NTAPI
-ExSetTimerResolution(
- IN ULONG DesiredTime,
- IN BOOLEAN SetResolution);
+ExCreateCallback(
+ OUT PCALLBACK_OBJECT *CallbackObject,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ IN BOOLEAN Create,
+ IN BOOLEAN AllowMultipleCallbacks);
NTKERNELAPI
VOID
NTAPI
-ExSystemTimeToLocalTime(
- IN PLARGE_INTEGER SystemTime,
- OUT PLARGE_INTEGER LocalTime);
+ExDeleteNPagedLookasideList(
+ IN OUT PNPAGED_LOOKASIDE_LIST Lookaside);
NTKERNELAPI
VOID
NTAPI
-ExUnregisterCallback(
- IN OUT PVOID CbRegistration);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXP)
-
-NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExAcquireRundownProtection(
- IN OUT PEX_RUNDOWN_REF RunRef);
+ExDeletePagedLookasideList(
+ IN PPAGED_LOOKASIDE_LIST Lookaside);
NTKERNELAPI
-VOID
-FASTCALL
-ExInitializeRundownProtection(
- OUT PEX_RUNDOWN_REF RunRef);
+NTSTATUS
+NTAPI
+ExDeleteResourceLite(
+ IN OUT PERESOURCE Resource);
NTKERNELAPI
VOID
-FASTCALL
-ExReInitializeRundownProtection(
- IN OUT PEX_RUNDOWN_REF RunRef);
+NTAPI
+ExFreePool(
+ IN PVOID P);
-NTKERNELAPI
-VOID
-FASTCALL
-ExReleaseRundownProtection(
- IN OUT PEX_RUNDOWN_REF RunRef);
+#ifdef POOL_TAGGING
+#define ExFreePool(P) ExFreePoolWithTag(P, 0)
+#endif
NTKERNELAPI
VOID
-FASTCALL
-ExRundownCompleted(
- OUT PEX_RUNDOWN_REF RunRef);
+NTAPI
+ExFreePoolWithTag(
+ IN PVOID P,
+ IN ULONG Tag);
NTKERNELAPI
-BOOLEAN
+ULONG
NTAPI
-ExVerifySuite(
- IN SUITE_TYPE SuiteType);
+ExGetExclusiveWaiterCount(
+ IN PERESOURCE Resource);
NTKERNELAPI
-VOID
-FASTCALL
-ExWaitForRundownProtectionRelease(
- IN OUT PEX_RUNDOWN_REF RunRef);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
+KPROCESSOR_MODE
+NTAPI
+ExGetPreviousMode(VOID);
NTKERNELAPI
-BOOLEAN
-FASTCALL
-ExAcquireRundownProtectionEx(
- IN OUT PEX_RUNDOWN_REF RunRef,
- IN ULONG Count);
+ULONG
+NTAPI
+ExGetSharedWaiterCount(
+ IN PERESOURCE Resource);
NTKERNELAPI
VOID
-FASTCALL
-ExReleaseRundownProtectionEx(
- IN OUT PEX_RUNDOWN_REF RunRef,
- IN ULONG Count);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
-
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
-
-NTKERNELAPI
-PEX_RUNDOWN_REF_CACHE_AWARE
NTAPI
-ExAllocateCacheAwareRundownProtection(
- IN POOL_TYPE PoolType,
- IN ULONG PoolTag);
+ExInitializeNPagedLookasideList(
+ IN PNPAGED_LOOKASIDE_LIST Lookaside,
+ IN PALLOCATE_FUNCTION Allocate OPTIONAL,
+ IN PFREE_FUNCTION Free OPTIONAL,
+ IN ULONG Flags,
+ IN SIZE_T Size,
+ IN ULONG Tag,
+ IN USHORT Depth);
NTKERNELAPI
-SIZE_T
+VOID
NTAPI
-ExSizeOfRundownProtectionCacheAware(VOID);
+ExInitializePagedLookasideList(
+ IN PPAGED_LOOKASIDE_LIST Lookaside,
+ IN PALLOCATE_FUNCTION Allocate OPTIONAL,
+ IN PFREE_FUNCTION Free OPTIONAL,
+ IN ULONG Flags,
+ IN SIZE_T Size,
+ IN ULONG Tag,
+ IN USHORT Depth);
NTKERNELAPI
-PVOID
+NTSTATUS
NTAPI
-ExEnterCriticalRegionAndAcquireResourceShared(
- IN OUT PERESOURCE Resource);
+ExInitializeResourceLite(
+ OUT PERESOURCE Resource);
NTKERNELAPI
-PVOID
+LARGE_INTEGER
NTAPI
-ExEnterCriticalRegionAndAcquireResourceExclusive(
- IN OUT PERESOURCE Resource);
+ExInterlockedAddLargeInteger(
+ IN PLARGE_INTEGER Addend,
+ IN LARGE_INTEGER Increment,
+ IN PKSPIN_LOCK Lock);
-NTKERNELAPI
-PVOID
-NTAPI
-ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
- IN OUT PERESOURCE Resource);
+#if defined(_WIN64)
+#define ExInterlockedAddLargeStatistic(Addend, Increment) \
+ (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
+#else
+#define ExInterlockedAddLargeStatistic(Addend, Increment) \
+ _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
+#endif
NTKERNELAPI
-VOID
+ULONG
FASTCALL
-ExReleaseResourceAndLeaveCriticalRegion(
- IN OUT PERESOURCE Resource);
+ExInterlockedAddUlong(
+ IN PULONG Addend,
+ IN ULONG Increment,
+ IN OUT PKSPIN_LOCK Lock);
-NTKERNELAPI
-VOID
-NTAPI
-ExInitializeRundownProtectionCacheAware(
- OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
- IN SIZE_T RunRefSize);
+#if defined(_AMD64_) || defined(_IA64_)
-NTKERNELAPI
-VOID
-NTAPI
-ExFreeCacheAwareRundownProtection(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+#define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
+ InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
+
+#elif defined(_X86_)
NTKERNELAPI
-BOOLEAN
+LONGLONG
FASTCALL
-ExAcquireRundownProtectionCacheAware(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+ExfInterlockedCompareExchange64(
+ IN OUT LONGLONG volatile *Destination,
+ IN PLONGLONG Exchange,
+ IN PLONGLONG Comperand);
+
+#define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
+ ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
+
+#else
NTKERNELAPI
-VOID
+LONGLONG
FASTCALL
-ExReleaseRundownProtectionCacheAware(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+ExInterlockedCompareExchange64(
+ IN OUT LONGLONG volatile *Destination,
+ IN PLONGLONG Exchange,
+ IN PLONGLONG Comparand,
+ IN PKSPIN_LOCK Lock);
+
+#endif /* defined(_AMD64_) || defined(_IA64_) */
NTKERNELAPI
-BOOLEAN
+PLIST_ENTRY
FASTCALL
-ExAcquireRundownProtectionCacheAwareEx(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
- IN ULONG Count);
+ExInterlockedInsertHeadList(
+ IN OUT PLIST_ENTRY ListHead,
+ IN OUT PLIST_ENTRY ListEntry,
+ IN OUT PKSPIN_LOCK Lock);
NTKERNELAPI
-VOID
+PLIST_ENTRY
FASTCALL
-ExReleaseRundownProtectionCacheAwareEx(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef,
- IN ULONG Count);
+ExInterlockedInsertTailList(
+ IN OUT PLIST_ENTRY ListHead,
+ IN OUT PLIST_ENTRY ListEntry,
+ IN OUT PKSPIN_LOCK Lock);
NTKERNELAPI
-VOID
+PSINGLE_LIST_ENTRY
FASTCALL
-ExWaitForRundownProtectionReleaseCacheAware(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef);
+ExInterlockedPopEntryList(
+ IN OUT PSINGLE_LIST_ENTRY ListHead,
+ IN OUT PKSPIN_LOCK Lock);
NTKERNELAPI
-VOID
+PSINGLE_LIST_ENTRY
FASTCALL
-ExReInitializeRundownProtectionCacheAware(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
+ExInterlockedPushEntryList(
+ IN OUT PSINGLE_LIST_ENTRY ListHead,
+ IN OUT PSINGLE_LIST_ENTRY ListEntry,
+ IN OUT PKSPIN_LOCK Lock);
NTKERNELAPI
-VOID
+PLIST_ENTRY
FASTCALL
-ExRundownCompletedCacheAware(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+ExInterlockedRemoveHeadList(
+ IN OUT PLIST_ENTRY ListHead,
+ IN OUT PKSPIN_LOCK Lock);
NTKERNELAPI
-NTSTATUS
+BOOLEAN
NTAPI
-ExInitializeLookasideListEx(
- OUT PLOOKASIDE_LIST_EX Lookaside,
- IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL,
- IN PFREE_FUNCTION_EX Free OPTIONAL,
- IN POOL_TYPE PoolType,
- IN ULONG Flags,
- IN SIZE_T Size,
- IN ULONG Tag,
- IN USHORT Depth);
+ExIsProcessorFeaturePresent(
+ IN ULONG ProcessorFeature);
NTKERNELAPI
-VOID
+BOOLEAN
NTAPI
-ExDeleteLookasideListEx(
- IN OUT PLOOKASIDE_LIST_EX Lookaside);
+ExIsResourceAcquiredExclusiveLite(
+ IN PERESOURCE Resource);
NTKERNELAPI
-VOID
+ULONG
NTAPI
-ExFlushLookasideListEx(
- IN OUT PLOOKASIDE_LIST_EX Lookaside);
-
-FORCEINLINE
-PVOID
-ExAllocateFromLookasideListEx(
- IN OUT PLOOKASIDE_LIST_EX Lookaside)
-{
- PVOID Entry;
-
- Lookaside->L.TotalAllocates += 1;
- Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
- if (Entry == NULL) {
- Lookaside->L.AllocateMisses += 1;
- Entry = (Lookaside->L.AllocateEx)(Lookaside->L.Type,
- Lookaside->L.Size,
- Lookaside->L.Tag,
- Lookaside);
- }
- return Entry;
-}
-
-FORCEINLINE
-VOID
-ExFreeToLookasideListEx(
- IN OUT PLOOKASIDE_LIST_EX Lookaside,
- IN PVOID Entry)
-{
- Lookaside->L.TotalFrees += 1;
- if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
- Lookaside->L.FreeMisses += 1;
- (Lookaside->L.FreeEx)(Entry, Lookaside);
- } else {
- InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
- }
- return;
-}
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+ExIsResourceAcquiredSharedLite(
+ IN PERESOURCE Resource);
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
NTKERNELAPI
VOID
NTAPI
-ExSetResourceOwnerPointerEx(
- IN OUT PERESOURCE Resource,
- IN PVOID OwnerPointer,
- IN ULONG Flags);
-
-#define FLAG_OWNER_POINTER_IS_THREAD 0x1
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
-
-static __inline PVOID
-ExAllocateFromNPagedLookasideList(
- IN OUT PNPAGED_LOOKASIDE_LIST Lookaside)
-{
- PVOID Entry;
-
- Lookaside->L.TotalAllocates++;
-#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
- Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead,
- &Lookaside->Lock__ObsoleteButDoNotDelete);
-#else
- Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
-#endif
- if (Entry == NULL) {
- Lookaside->L.AllocateMisses++;
- Entry = (Lookaside->L.Allocate)(Lookaside->L.Type,
- Lookaside->L.Size,
- Lookaside->L.Tag);
- }
- return Entry;
-}
-
-static __inline VOID
-ExFreeToNPagedLookasideList(
- IN OUT PNPAGED_LOOKASIDE_LIST Lookaside,
- IN PVOID Entry)
-{
- Lookaside->L.TotalFrees++;
- if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
- Lookaside->L.FreeMisses++;
- (Lookaside->L.Free)(Entry);
- } else {
-#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
- ExInterlockedPushEntrySList(&Lookaside->L.ListHead,
- (PSLIST_ENTRY)Entry,
- &Lookaside->Lock__ObsoleteButDoNotDelete);
-#else
- InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
-#endif
- }
-}
-
-
-/******************************************************************************
- * Object Manager Functions *
- ******************************************************************************/
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
-NTKERNELAPI
-LONG_PTR
-FASTCALL
-ObfDereferenceObject(
- IN PVOID Object);
-#define ObDereferenceObject ObfDereferenceObject
+ExLocalTimeToSystemTime(
+ IN PLARGE_INTEGER LocalTime,
+ OUT PLARGE_INTEGER SystemTime);
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-ObGetObjectSecurity(
- IN PVOID Object,
- OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
- OUT PBOOLEAN MemoryAllocated);
+ExNotifyCallback(
+ IN PCALLBACK_OBJECT CallbackObject,
+ IN PVOID Argument1 OPTIONAL,
+ IN PVOID Argument2 OPTIONAL);
NTKERNELAPI
-LONG_PTR
-FASTCALL
-ObfReferenceObject(
- IN PVOID Object);
-#define ObReferenceObject ObfReferenceObject
+VOID
+NTAPI
+ExQueueWorkItem(
+ IN OUT PWORK_QUEUE_ITEM WorkItem,
+ IN WORK_QUEUE_TYPE QueueType);
NTKERNELAPI
-NTSTATUS
+DECLSPEC_NORETURN
+VOID
NTAPI
-ObReferenceObjectByHandle(
- IN HANDLE Handle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_TYPE ObjectType OPTIONAL,
- IN KPROCESSOR_MODE AccessMode,
- OUT PVOID *Object,
- OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL);
+ExRaiseStatus(
+ IN NTSTATUS Status);
+
+NTKERNELAPI
+PVOID
+NTAPI
+ExRegisterCallback(
+ IN PCALLBACK_OBJECT CallbackObject,
+ IN PCALLBACK_FUNCTION CallbackFunction,
+ IN PVOID CallbackContext OPTIONAL);
NTKERNELAPI
NTSTATUS
NTAPI
-ObReferenceObjectByPointer(
- IN PVOID Object,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_TYPE ObjectType OPTIONAL,
- IN KPROCESSOR_MODE AccessMode);
+ExReinitializeResourceLite(
+ IN OUT PERESOURCE Resource);
NTKERNELAPI
VOID
NTAPI
-ObReleaseObjectSecurity(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN BOOLEAN MemoryAllocated);
+ExReleaseResourceForThreadLite(
+ IN OUT PERESOURCE Resource,
+ IN ERESOURCE_THREAD ResourceThreadId);
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseResourceLite(
+ IN OUT PERESOURCE Resource);
-#if (NTDDI_VERSION >= NTDDI_VISTA)
NTKERNELAPI
VOID
NTAPI
-ObDereferenceObjectDeferDelete(
- IN PVOID Object);
-#endif
+ExSetResourceOwnerPointer(
+ IN OUT PERESOURCE Resource,
+ IN PVOID OwnerPointer);
-#if (NTDDI_VERSION >= NTDDI_VISTASP1)
NTKERNELAPI
-NTSTATUS
+ULONG
NTAPI
-ObRegisterCallbacks(
- IN POB_CALLBACK_REGISTRATION CallbackRegistration,
- OUT PVOID *RegistrationHandle);
+ExSetTimerResolution(
+ IN ULONG DesiredTime,
+ IN BOOLEAN SetResolution);
NTKERNELAPI
VOID
NTAPI
-ObUnRegisterCallbacks(
- IN PVOID RegistrationHandle);
+ExSystemTimeToLocalTime(
+ IN PLARGE_INTEGER SystemTime,
+ OUT PLARGE_INTEGER LocalTime);
NTKERNELAPI
-USHORT
+VOID
NTAPI
-ObGetFilterVersion(VOID);
+ExUnregisterCallback(
+ IN OUT PVOID CbRegistration);
-#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-#if (NTDDI_VERSION >= NTDDI_WIN7)
+#if (NTDDI_VERSION >= NTDDI_WINXP)
NTKERNELAPI
-NTSTATUS
-NTAPI
-ObReferenceObjectByHandleWithTag(
- IN HANDLE Handle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_TYPE ObjectType OPTIONAL,
- IN KPROCESSOR_MODE AccessMode,
- IN ULONG Tag,
- OUT PVOID *Object,
- OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL);
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtection(
+ IN OUT PEX_RUNDOWN_REF RunRef);
NTKERNELAPI
-LONG_PTR
+VOID
FASTCALL
-ObfReferenceObjectWithTag(
- IN PVOID Object,
- IN ULONG Tag);
+ExInitializeRundownProtection(
+ OUT PEX_RUNDOWN_REF RunRef);
NTKERNELAPI
-NTSTATUS
-NTAPI
-ObReferenceObjectByPointerWithTag(
- IN PVOID Object,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_TYPE ObjectType OPTIONAL,
- IN KPROCESSOR_MODE AccessMode,
- IN ULONG Tag);
+VOID
+FASTCALL
+ExReInitializeRundownProtection(
+ IN OUT PEX_RUNDOWN_REF RunRef);
NTKERNELAPI
-LONG_PTR
+VOID
FASTCALL
-ObfDereferenceObjectWithTag(
- IN PVOID Object,
- IN ULONG Tag);
+ExReleaseRundownProtection(
+ IN OUT PEX_RUNDOWN_REF RunRef);
NTKERNELAPI
VOID
-NTAPI
-ObDereferenceObjectDeferDeleteWithTag(
- IN PVOID Object,
- IN ULONG Tag);
+FASTCALL
+ExRundownCompleted(
+ OUT PEX_RUNDOWN_REF RunRef);
-#define ObDereferenceObject ObfDereferenceObject
-#define ObReferenceObject ObfReferenceObject
-#define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
-#define ObReferenceObjectWithTag ObfReferenceObjectWithTag
+NTKERNELAPI
+BOOLEAN
+NTAPI
+ExVerifySuite(
+ IN SUITE_TYPE SuiteType);
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+NTKERNELAPI
+VOID
+FASTCALL
+ExWaitForRundownProtectionRelease(
+ IN OUT PEX_RUNDOWN_REF RunRef);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-/******************************************************************************
- * Process Manager Functions *
- ******************************************************************************/
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
NTKERNELAPI
-NTSTATUS
-NTAPI
-PsWrapApcWow64Thread(
- IN OUT PVOID *ApcContext,
- IN OUT PVOID *ApcRoutine);
-
-/*
- * PEPROCESS
- * PsGetCurrentProcess(VOID)
- */
-#define PsGetCurrentProcess IoGetCurrentProcess
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionEx(
+ IN OUT PEX_RUNDOWN_REF RunRef,
+ IN ULONG Count);
-#if !defined(_PSGETCURRENTTHREAD_)
-#define _PSGETCURRENTTHREAD_
-FORCEINLINE
-PETHREAD
-NTAPI
-PsGetCurrentThread(VOID)
-{
- return (PETHREAD)KeGetCurrentThread();
-}
-#endif /* !_PSGETCURRENTTHREAD_ */
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseRundownProtectionEx(
+ IN OUT PEX_RUNDOWN_REF RunRef,
+ IN ULONG Count);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
NTKERNELAPI
-NTSTATUS
+PEX_RUNDOWN_REF_CACHE_AWARE
NTAPI
-PsCreateSystemThread(
- OUT PHANDLE ThreadHandle,
- IN ULONG DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN HANDLE ProcessHandle OPTIONAL,
- OUT PCLIENT_ID ClientId OPTIONAL,
- IN PKSTART_ROUTINE StartRoutine,
- IN PVOID StartContext OPTIONAL);
+ExAllocateCacheAwareRundownProtection(
+ IN POOL_TYPE PoolType,
+ IN ULONG PoolTag);
NTKERNELAPI
-NTSTATUS
+SIZE_T
NTAPI
-PsTerminateSystemThread(
- IN NTSTATUS ExitStatus);
-
-
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-/******************************************************************************
- * WMI Library Support Functions *
- ******************************************************************************/
+ExSizeOfRundownProtectionCacheAware(VOID);
-#ifdef RUN_WPP
-#if (NTDDI_VERSION >= NTDDI_WINXP)
NTKERNELAPI
-NTSTATUS
-__cdecl
-WmiTraceMessage(
- IN TRACEHANDLE LoggerHandle,
- IN ULONG MessageFlags,
- IN LPGUID MessageGuid,
- IN USHORT MessageNumber,
- IN ...);
-#endif
-#endif /* RUN_WPP */
-
- #if (NTDDI_VERSION >= NTDDI_WINXP)
+PVOID
+NTAPI
+ExEnterCriticalRegionAndAcquireResourceShared(
+ IN OUT PERESOURCE Resource);
NTKERNELAPI
-NTSTATUS
+PVOID
NTAPI
-WmiQueryTraceInformation(
- IN TRACE_INFORMATION_CLASS TraceInformationClass,
- OUT PVOID TraceInformation,
- IN ULONG TraceInformationLength,
- OUT PULONG RequiredLength OPTIONAL,
- IN PVOID Buffer OPTIONAL);
+ExEnterCriticalRegionAndAcquireResourceExclusive(
+ IN OUT PERESOURCE Resource);
-#if 0
-/* FIXME: Get va_list from where? */
NTKERNELAPI
-NTSTATUS
-__cdecl
-WmiTraceMessageVa(
- IN TRACEHANDLE LoggerHandle,
- IN ULONG MessageFlags,
- IN LPGUID MessageGuid,
- IN USHORT MessageNumber,
- IN va_list MessageArgList);
-#endif
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+PVOID
+NTAPI
+ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
+ IN OUT PERESOURCE Resource);
-#ifndef TRACE_INFORMATION_CLASS_DEFINE
+NTKERNELAPI
+VOID
+FASTCALL
+ExReleaseResourceAndLeaveCriticalRegion(
+ IN OUT PERESOURCE Resource);
-#if (NTDDI_VERSION >= NTDDI_WINXP)
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-WmiQueryTraceInformation(
- IN TRACE_INFORMATION_CLASS TraceInformationClass,
- OUT PVOID TraceInformation,
- IN ULONG TraceInformationLength,
- OUT PULONG RequiredLength OPTIONAL,
- IN PVOID Buffer OPTIONAL);
-#endif
-
-#define TRACE_INFORMATION_CLASS_DEFINE
-
-#endif /* TRACE_INFOPRMATION_CLASS_DEFINE */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+ExInitializeRundownProtectionCacheAware(
+ OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
+ IN SIZE_T RunRefSize);
-NTSTATUS
NTKERNELAPI
+VOID
NTAPI
-EtwRegister(
- IN LPCGUID ProviderId,
- IN PETWENABLECALLBACK EnableCallback OPTIONAL,
- IN PVOID CallbackContext OPTIONAL,
- OUT PREGHANDLE RegHandle);
+ExFreeCacheAwareRundownProtection(
+ IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
-NTSTATUS
NTKERNELAPI
-NTAPI
-EtwUnregister(
- IN REGHANDLE RegHandle);
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionCacheAware(
+ IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
-BOOLEAN
NTKERNELAPI
-NTAPI
-EtwEventEnabled(
- IN REGHANDLE RegHandle,
- IN PCEVENT_DESCRIPTOR EventDescriptor);
+VOID
+FASTCALL
+ExReleaseRundownProtectionCacheAware(
+ IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
-BOOLEAN
NTKERNELAPI
-NTAPI
-EtwProviderEnabled(
- IN REGHANDLE RegHandle,
- IN UCHAR Level,
- IN ULONGLONG Keyword);
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionCacheAwareEx(
+ IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
+ IN ULONG Count);
-NTSTATUS
NTKERNELAPI
-NTAPI
-EtwActivityIdControl(
- IN ULONG ControlCode,
- IN OUT LPGUID ActivityId);
+VOID
+FASTCALL
+ExReleaseRundownProtectionCacheAwareEx(
+ IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef,
+ IN ULONG Count);
-NTSTATUS
NTKERNELAPI
-NTAPI
-EtwWrite(
- IN REGHANDLE RegHandle,
- IN PCEVENT_DESCRIPTOR EventDescriptor,
- IN LPCGUID ActivityId OPTIONAL,
- IN ULONG UserDataCount,
- IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
+VOID
+FASTCALL
+ExWaitForRundownProtectionReleaseCacheAware(
+ IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef);
-NTSTATUS
NTKERNELAPI
-NTAPI
-EtwWriteTransfer(
- IN REGHANDLE RegHandle,
- IN PCEVENT_DESCRIPTOR EventDescriptor,
- IN LPCGUID ActivityId OPTIONAL,
- IN LPCGUID RelatedActivityId OPTIONAL,
- IN ULONG UserDataCount,
- IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
+VOID
+FASTCALL
+ExReInitializeRundownProtectionCacheAware(
+ IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
-NTSTATUS
NTKERNELAPI
-NTAPI
-EtwWriteString(
- IN REGHANDLE RegHandle,
- IN UCHAR Level,
- IN ULONGLONG Keyword,
- IN LPCGUID ActivityId OPTIONAL,
- IN PCWSTR String);
+VOID
+FASTCALL
+ExRundownCompletedCacheAware(
+ IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-NTSTATUS
NTKERNELAPI
+NTSTATUS
NTAPI
-EtwWriteEx(
- IN REGHANDLE RegHandle,
- IN PCEVENT_DESCRIPTOR EventDescriptor,
- IN ULONG64 Filter,
- IN ULONG Flags,
- IN LPCGUID ActivityId OPTIONAL,
- IN LPCGUID RelatedActivityId OPTIONAL,
- IN ULONG UserDataCount,
- IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
+ExInitializeLookasideListEx(
+ OUT PLOOKASIDE_LIST_EX Lookaside,
+ IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL,
+ IN PFREE_FUNCTION_EX Free OPTIONAL,
+ IN POOL_TYPE PoolType,
+ IN ULONG Flags,
+ IN SIZE_T Size,
+ IN ULONG Tag,
+ IN USHORT Depth);
#endif
+#if !defined(MIDL_PASS)
+static __inline PVOID
+ExAllocateFromNPagedLookasideList(
+ IN PNPAGED_LOOKASIDE_LIST Lookaside)
+{
+ PVOID Entry;
-/******************************************************************************
- * Kernel Debugger Functions *
- ******************************************************************************/
-
-#ifndef _DBGNT_
+ Lookaside->L.TotalAllocates += 1;
+ Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
+ if (Entry == NULL) {
+ Lookaside->L.AllocateMisses++;
+ Entry = (Lookaside->L.Allocate)(Lookaside->L.Type,
+ Lookaside->L.Size,
+ Lookaside->L.Tag);
+ }
+ return Entry;
+}
-ULONG
-__cdecl
-DbgPrint(
- IN PCSTR Format,
- IN ...);
+static __inline PVOID
+ExAllocateFromPagedLookasideList(
+ IN PPAGED_LOOKASIDE_LIST Lookaside)
+{
+ PVOID Entry;
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-NTSYSAPI
-ULONG
-__cdecl
-DbgPrintReturnControlC(
- IN PCCH Format,
- IN ...);
-#endif
+ Lookaside->L.TotalAllocates++;
+ Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
+ if (Entry == NULL) {
+ Lookaside->L.AllocateMisses++;
+ Entry = (Lookaside->L.Allocate)(Lookaside->L.Type,
+ Lookaside->L.Size,
+ Lookaside->L.Tag);
+ }
+ return Entry;
+}
-#if (NTDDI_VERSION >= NTDDI_WINXP)
+static __inline VOID
+ExFreeToNPagedLookasideList(
+ IN OUT PNPAGED_LOOKASIDE_LIST Lookaside,
+ IN PVOID Entry)
+{
+ Lookaside->L.TotalFrees++;
+ if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
+ Lookaside->L.FreeMisses++;
+ (Lookaside->L.Free)(Entry);
+ } else {
+ InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
+ }
+}
-NTSYSAPI
-ULONG
-__cdecl
-DbgPrintEx(
- IN ULONG ComponentId,
- IN ULONG Level,
- IN PCSTR Format,
- IN ...);
+static __inline VOID
+ExFreeToPagedLookasideList(
+ IN PPAGED_LOOKASIDE_LIST Lookaside,
+ IN PVOID Entry)
+{
+ Lookaside->L.TotalFrees++;
+ if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
+ Lookaside->L.FreeMisses++;
+ (Lookaside->L.Free)(Entry);
+ } else {
+ InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
+ }
+}
-#ifdef _VA_LIST_DEFINED
+#endif // !defined(MIDL_PASS)
-NTSYSAPI
-ULONG
-NTAPI
-vDbgPrintEx(
- IN ULONG ComponentId,
- IN ULONG Level,
- IN PCCH Format,
- IN va_list ap);
+/******************************************************************************
+ * Object Manager Functions *
+ ******************************************************************************/
-NTSYSAPI
-ULONG
-NTAPI
-vDbgPrintExWithPrefix(
- IN PCCH Prefix,
- IN ULONG ComponentId,
- IN ULONG Level,
- IN PCCH Format,
- IN va_list ap);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
-#endif /* _VA_LIST_DEFINED */
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfDereferenceObject(
+ IN PVOID Object);
+#define ObDereferenceObject ObfDereferenceObject
-NTSYSAPI
+NTKERNELAPI
NTSTATUS
NTAPI
-DbgQueryDebugFilterState(
- IN ULONG ComponentId,
- IN ULONG Level);
+ObGetObjectSecurity(
+ IN PVOID Object,
+ OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
+ OUT PBOOLEAN MemoryAllocated);
-NTSYSAPI
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfReferenceObject(
+ IN PVOID Object);
+#define ObReferenceObject ObfReferenceObject
+
+NTKERNELAPI
NTSTATUS
NTAPI
-DbgSetDebugFilterState(
- IN ULONG ComponentId,
- IN ULONG Level,
- IN BOOLEAN State);
-
-#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-
-#if (NTDDI_VERSION >= NTDDI_VISTA)
-
-typedef VOID
-(*PDEBUG_PRINT_CALLBACK)(
- IN PSTRING Output,
- IN ULONG ComponentId,
- IN ULONG Level);
+ObReferenceObjectByHandle(
+ IN HANDLE Handle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_TYPE ObjectType OPTIONAL,
+ IN KPROCESSOR_MODE AccessMode,
+ OUT PVOID *Object,
+ OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL);
-NTSYSAPI
+NTKERNELAPI
NTSTATUS
NTAPI
-DbgSetDebugPrintCallback(
- IN PDEBUG_PRINT_CALLBACK DebugPrintCallback,
- IN BOOLEAN Enable);
-
-#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
-
-#endif /* _DBGNT_ */
-
-#if DBG
-
-#define KdPrint(_x_) DbgPrint _x_
-#define KdPrintEx(_x_) DbgPrintEx _x_
-#define vKdPrintEx(_x_) vDbgPrintEx _x_
-#define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
-#define KdBreakPoint() DbgBreakPoint()
-#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
-
-#else /* !DBG */
-
-#define KdPrint(_x_)
-#define KdPrintEx(_x_)
-#define vKdPrintEx(_x_)
-#define vKdPrintExWithPrefix(_x_)
-#define KdBreakPoint()
-#define KdBreakPointWithStatus(s)
-
-#endif /* !DBG */
-
-#if defined(__GNUC__)
-
-extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent;
-extern NTKERNELAPI BOOLEAN KdDebuggerEnabled;
-#define KD_DEBUGGER_ENABLED KdDebuggerEnabled
-#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
-
-#elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
-
-extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent;
-extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled;
-#define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
-#define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
-
-#else
-
-extern BOOLEAN KdDebuggerNotPresent;
-extern BOOLEAN KdDebuggerEnabled;
-#define KD_DEBUGGER_ENABLED KdDebuggerEnabled
-#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
+ObReferenceObjectByPointer(
+ IN PVOID Object,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_TYPE ObjectType OPTIONAL,
+ IN KPROCESSOR_MODE AccessMode);
-#endif
+NTKERNELAPI
+VOID
+NTAPI
+ObReleaseObjectSecurity(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN BOOLEAN MemoryAllocated);
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+#if (NTDDI_VERSION >= NTDDI_VISTA)
NTKERNELAPI
-NTSTATUS
+VOID
NTAPI
-KdDisableDebugger(VOID);
+ObDereferenceObjectDeferDelete(
+ IN PVOID Object);
+#endif
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
NTKERNELAPI
NTSTATUS
NTAPI
-KdEnableDebugger(VOID);
+ObRegisterCallbacks(
+ IN POB_CALLBACK_REGISTRATION CallbackRegistration,
+ OUT PVOID *RegistrationHandle);
-#if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
-#define DbgBreakPoint __debugbreak
-#else
+NTKERNELAPI
VOID
NTAPI
-DbgBreakPoint(VOID);
-#endif
+ObUnRegisterCallbacks(
+ IN PVOID RegistrationHandle);
-NTSYSAPI
-VOID
+NTKERNELAPI
+USHORT
NTAPI
-DbgBreakPointWithStatus(
- IN ULONG Status);
+ObGetFilterVersion(VOID);
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
-#if (NTDDI_VERSION >= NTDDI_WS03)
-NTKERNELAPI
-BOOLEAN
-NTAPI
-KdRefreshDebuggerNotPresent(VOID);
-#endif
+#if (NTDDI_VERSION >= NTDDI_WIN7)
-#if (NTDDI_VERSION >= NTDDI_WS03SP1)
NTKERNELAPI
NTSTATUS
NTAPI
-KdChangeOption(
- IN KD_OPTION Option,
- IN ULONG InBufferBytes OPTIONAL,
- IN PVOID InBuffer,
- IN ULONG OutBufferBytes OPTIONAL,
- OUT PVOID OutBuffer,
- OUT PULONG OutBufferNeeded OPTIONAL);
-#endif
-/* Hardware Abstraction Layer Functions */
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+ObReferenceObjectByHandleWithTag(
+ IN HANDLE Handle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_TYPE ObjectType OPTIONAL,
+ IN KPROCESSOR_MODE AccessMode,
+ IN ULONG Tag,
+ OUT PVOID *Object,
+ OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL);
-#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfReferenceObjectWithTag(
+ IN PVOID Object,
+ IN ULONG Tag);
-FORCEINLINE
-PVOID
+NTKERNELAPI
+NTSTATUS
NTAPI
-HalAllocateCommonBuffer(
- IN PDMA_ADAPTER DmaAdapter,
- IN ULONG Length,
- OUT PPHYSICAL_ADDRESS LogicalAddress,
- IN BOOLEAN CacheEnabled)
-{
- PALLOCATE_COMMON_BUFFER allocateCommonBuffer;
- PVOID commonBuffer;
+ObReferenceObjectByPointerWithTag(
+ IN PVOID Object,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_TYPE ObjectType OPTIONAL,
+ IN KPROCESSOR_MODE AccessMode,
+ IN ULONG Tag);
- allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer;
- ASSERT( allocateCommonBuffer != NULL );
- commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled );
- return commonBuffer;
-}
+NTKERNELAPI
+LONG_PTR
+FASTCALL
+ObfDereferenceObjectWithTag(
+ IN PVOID Object,
+ IN ULONG Tag);
-FORCEINLINE
+NTKERNELAPI
VOID
NTAPI
-HalFreeCommonBuffer(
- IN PDMA_ADAPTER DmaAdapter,
- IN ULONG Length,
- IN PHYSICAL_ADDRESS LogicalAddress,
- IN PVOID VirtualAddress,
- IN BOOLEAN CacheEnabled)
-{
- PFREE_COMMON_BUFFER freeCommonBuffer;
+ObDereferenceObjectDeferDeleteWithTag(
+ IN PVOID Object,
+ IN ULONG Tag);
- freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer;
- ASSERT( freeCommonBuffer != NULL );
- freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled );
-}
+#define ObDereferenceObject ObfDereferenceObject
+#define ObReferenceObject ObfReferenceObject
+#define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
+#define ObReferenceObjectWithTag ObfReferenceObjectWithTag
-FORCEINLINE
-ULONG
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+
+/******************************************************************************
+ * Process Manager Functions *
+ ******************************************************************************/
+
+NTKERNELAPI
+NTSTATUS
NTAPI
-HalReadDmaCounter(
- IN PDMA_ADAPTER DmaAdapter)
-{
- PREAD_DMA_COUNTER readDmaCounter;
- ULONG counter;
+PsWrapApcWow64Thread(
+ IN OUT PVOID *ApcContext,
+ IN OUT PVOID *ApcRoutine);
- readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter;
- ASSERT( readDmaCounter != NULL );
- counter = readDmaCounter( DmaAdapter );
- return counter;
-}
+/*
+ * PEPROCESS
+ * PsGetCurrentProcess(VOID)
+ */
+#define PsGetCurrentProcess IoGetCurrentProcess
+#if !defined(_PSGETCURRENTTHREAD_)
+#define _PSGETCURRENTTHREAD_
FORCEINLINE
-ULONG
-HalGetDmaAlignment(
- IN PDMA_ADAPTER DmaAdapter)
+PETHREAD
+NTAPI
+PsGetCurrentThread(VOID)
{
- PGET_DMA_ALIGNMENT getDmaAlignment;
- ULONG alignment;
-
- getDmaAlignment = *(DmaAdapter)->DmaOperations->GetDmaAlignment;
- ASSERT( getDmaAlignment != NULL );
- alignment = getDmaAlignment( DmaAdapter );
- return alignment;
+ return (PETHREAD)KeGetCurrentThread();
}
+#endif /* !_PSGETCURRENTTHREAD_ */
-#endif /* USE_DMA_MACROS ... */
-#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-
-#ifndef _NTTMAPI_
-#define _NTTMAPI_
-
-#include <ktmtypes.h>
-
-#define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001)
-#define TRANSACTIONMANAGER_SET_INFORMATION (0x0002)
-#define TRANSACTIONMANAGER_RECOVER (0x0004)
-#define TRANSACTIONMANAGER_RENAME (0x0008)
-#define TRANSACTIONMANAGER_CREATE_RM (0x0010)
-#define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020)
-
-#define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
- TRANSACTIONMANAGER_QUERY_INFORMATION)
-
-#define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
- TRANSACTIONMANAGER_SET_INFORMATION |\
- TRANSACTIONMANAGER_RECOVER |\
- TRANSACTIONMANAGER_RENAME |\
- TRANSACTIONMANAGER_CREATE_RM)
-
-#define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
-
-#define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
- TRANSACTIONMANAGER_GENERIC_READ |\
- TRANSACTIONMANAGER_GENERIC_WRITE |\
- TRANSACTIONMANAGER_GENERIC_EXECUTE |\
- TRANSACTIONMANAGER_BIND_TRANSACTION)
-
-#define TRANSACTION_QUERY_INFORMATION (0x0001)
-#define TRANSACTION_SET_INFORMATION (0x0002)
-#define TRANSACTION_ENLIST (0x0004)
-#define TRANSACTION_COMMIT (0x0008)
-#define TRANSACTION_ROLLBACK (0x0010)
-#define TRANSACTION_PROPAGATE (0x0020)
-#define TRANSACTION_RIGHT_RESERVED1 (0x0040)
-
-#define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\
- TRANSACTION_QUERY_INFORMATION |\
- SYNCHRONIZE)
-
-#define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
- TRANSACTION_SET_INFORMATION |\
- TRANSACTION_COMMIT |\
- TRANSACTION_ENLIST |\
- TRANSACTION_ROLLBACK |\
- TRANSACTION_PROPAGATE |\
- SYNCHRONIZE)
-
-#define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
- TRANSACTION_COMMIT |\
- TRANSACTION_ROLLBACK |\
- SYNCHRONIZE)
-
-#define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
- TRANSACTION_GENERIC_READ |\
- TRANSACTION_GENERIC_WRITE |\
- TRANSACTION_GENERIC_EXECUTE)
-
-#define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\
- STANDARD_RIGHTS_WRITE |\
- TRANSACTION_SET_INFORMATION |\
- TRANSACTION_ENLIST |\
- TRANSACTION_ROLLBACK |\
- TRANSACTION_PROPAGATE |\
- SYNCHRONIZE)
-
-#define RESOURCEMANAGER_QUERY_INFORMATION (0x0001)
-#define RESOURCEMANAGER_SET_INFORMATION (0x0002)
-#define RESOURCEMANAGER_RECOVER (0x0004)
-#define RESOURCEMANAGER_ENLIST (0x0008)
-#define RESOURCEMANAGER_GET_NOTIFICATION (0x0010)
-#define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020)
-#define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040)
-
-#define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
- RESOURCEMANAGER_QUERY_INFORMATION |\
- SYNCHRONIZE)
-
-#define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
- RESOURCEMANAGER_SET_INFORMATION |\
- RESOURCEMANAGER_RECOVER |\
- RESOURCEMANAGER_ENLIST |\
- RESOURCEMANAGER_GET_NOTIFICATION |\
- RESOURCEMANAGER_REGISTER_PROTOCOL |\
- RESOURCEMANAGER_COMPLETE_PROPAGATION |\
- SYNCHRONIZE)
-
-#define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
- RESOURCEMANAGER_RECOVER |\
- RESOURCEMANAGER_ENLIST |\
- RESOURCEMANAGER_GET_NOTIFICATION |\
- RESOURCEMANAGER_COMPLETE_PROPAGATION |\
- SYNCHRONIZE)
-
-#define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
- RESOURCEMANAGER_GENERIC_READ |\
- RESOURCEMANAGER_GENERIC_WRITE |\
- RESOURCEMANAGER_GENERIC_EXECUTE)
-
-#define ENLISTMENT_QUERY_INFORMATION (0x0001)
-#define ENLISTMENT_SET_INFORMATION (0x0002)
-#define ENLISTMENT_RECOVER (0x0004)
-#define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008)
-#define ENLISTMENT_SUPERIOR_RIGHTS (0x0010)
-
-#define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\
- ENLISTMENT_QUERY_INFORMATION)
-
-#define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
- ENLISTMENT_SET_INFORMATION |\
- ENLISTMENT_RECOVER |\
- ENLISTMENT_SUBORDINATE_RIGHTS |\
- ENLISTMENT_SUPERIOR_RIGHTS)
-
-#define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
- ENLISTMENT_RECOVER |\
- ENLISTMENT_SUBORDINATE_RIGHTS |\
- ENLISTMENT_SUPERIOR_RIGHTS)
-
-#define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
- ENLISTMENT_GENERIC_READ |\
- ENLISTMENT_GENERIC_WRITE |\
- ENLISTMENT_GENERIC_EXECUTE)
-
-typedef enum _TRANSACTION_OUTCOME {
- TransactionOutcomeUndetermined = 1,
- TransactionOutcomeCommitted,
- TransactionOutcomeAborted,
-} TRANSACTION_OUTCOME;
-
-
-typedef enum _TRANSACTION_STATE {
- TransactionStateNormal = 1,
- TransactionStateIndoubt,
- TransactionStateCommittedNotify,
-} TRANSACTION_STATE;
-
-
-typedef struct _TRANSACTION_BASIC_INFORMATION {
- GUID TransactionId;
- ULONG State;
- ULONG Outcome;
-} TRANSACTION_BASIC_INFORMATION, *PTRANSACTION_BASIC_INFORMATION;
-
-typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION {
- GUID TmIdentity;
- LARGE_INTEGER VirtualClock;
-} TRANSACTIONMANAGER_BASIC_INFORMATION, *PTRANSACTIONMANAGER_BASIC_INFORMATION;
-
-typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION {
- GUID LogIdentity;
-} TRANSACTIONMANAGER_LOG_INFORMATION, *PTRANSACTIONMANAGER_LOG_INFORMATION;
-
-typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION {
- ULONG LogPathLength;
- WCHAR LogPath[1];
-} TRANSACTIONMANAGER_LOGPATH_INFORMATION, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION;
-
-typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION {
- ULONGLONG LastRecoveredLsn;
-} TRANSACTIONMANAGER_RECOVERY_INFORMATION, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION;
-
-typedef struct _TRANSACTION_PROPERTIES_INFORMATION {
- ULONG IsolationLevel;
- ULONG IsolationFlags;
- LARGE_INTEGER Timeout;
- ULONG Outcome;
- ULONG DescriptionLength;
- WCHAR Description[1];
-} TRANSACTION_PROPERTIES_INFORMATION, *PTRANSACTION_PROPERTIES_INFORMATION;
-
-typedef struct _TRANSACTION_BIND_INFORMATION {
- HANDLE TmHandle;
-} TRANSACTION_BIND_INFORMATION, *PTRANSACTION_BIND_INFORMATION;
-
-typedef struct _TRANSACTION_ENLISTMENT_PAIR {
- GUID EnlistmentId;
- GUID ResourceManagerId;
-} TRANSACTION_ENLISTMENT_PAIR, *PTRANSACTION_ENLISTMENT_PAIR;
-
-typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION {
- ULONG NumberOfEnlistments;
- TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1];
-} TRANSACTION_ENLISTMENTS_INFORMATION, *PTRANSACTION_ENLISTMENTS_INFORMATION;
-
-typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION {
- TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair;
-} TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION;
-
-typedef struct _RESOURCEMANAGER_BASIC_INFORMATION {
- GUID ResourceManagerId;
- ULONG DescriptionLength;
- WCHAR Description[1];
-} RESOURCEMANAGER_BASIC_INFORMATION, *PRESOURCEMANAGER_BASIC_INFORMATION;
-
-typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION {
- HANDLE IoCompletionPortHandle;
- ULONG_PTR CompletionKey;
-} RESOURCEMANAGER_COMPLETION_INFORMATION, *PRESOURCEMANAGER_COMPLETION_INFORMATION;
-
-typedef enum _KTMOBJECT_TYPE {
- KTMOBJECT_TRANSACTION,
- KTMOBJECT_TRANSACTION_MANAGER,
- KTMOBJECT_RESOURCE_MANAGER,
- KTMOBJECT_ENLISTMENT,
- KTMOBJECT_INVALID
-} KTMOBJECT_TYPE, *PKTMOBJECT_TYPE;
-
-typedef struct _KTMOBJECT_CURSOR {
- GUID LastQuery;
- ULONG ObjectIdCount;
- GUID ObjectIds[1];
-} KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR;
-typedef enum _TRANSACTION_INFORMATION_CLASS {
- TransactionBasicInformation,
- TransactionPropertiesInformation,
- TransactionEnlistmentInformation,
- TransactionSuperiorEnlistmentInformation
-} TRANSACTION_INFORMATION_CLASS;
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
-typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS {
- TransactionManagerBasicInformation,
- TransactionManagerLogInformation,
- TransactionManagerLogPathInformation,
- TransactionManagerRecoveryInformation = 4
-} TRANSACTIONMANAGER_INFORMATION_CLASS;
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsCreateSystemThread(
+ OUT PHANDLE ThreadHandle,
+ IN ULONG DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+ IN HANDLE ProcessHandle OPTIONAL,
+ OUT PCLIENT_ID ClientId OPTIONAL,
+ IN PKSTART_ROUTINE StartRoutine,
+ IN PVOID StartContext OPTIONAL);
-typedef enum _RESOURCEMANAGER_INFORMATION_CLASS {
- ResourceManagerBasicInformation,
- ResourceManagerCompletionInformation,
-} RESOURCEMANAGER_INFORMATION_CLASS;
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsTerminateSystemThread(
+ IN NTSTATUS ExitStatus);
-typedef struct _ENLISTMENT_BASIC_INFORMATION {
- GUID EnlistmentId;
- GUID TransactionId;
- GUID ResourceManagerId;
-} ENLISTMENT_BASIC_INFORMATION, *PENLISTMENT_BASIC_INFORMATION;
-typedef struct _ENLISTMENT_CRM_INFORMATION {
- GUID CrmTransactionManagerId;
- GUID CrmResourceManagerId;
- GUID CrmEnlistmentId;
-} ENLISTMENT_CRM_INFORMATION, *PENLISTMENT_CRM_INFORMATION;
+#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
-typedef enum _ENLISTMENT_INFORMATION_CLASS {
- EnlistmentBasicInformation,
- EnlistmentRecoveryInformation,
- EnlistmentCrmInformation
-} ENLISTMENT_INFORMATION_CLASS;
+/******************************************************************************
+ * WMI Library Support Functions *
+ ******************************************************************************/
-typedef struct _TRANSACTION_LIST_ENTRY {
-#if defined(__cplusplus)
- ::UOW UOW;
-#else
- UOW UOW;
+#ifdef RUN_WPP
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+NTKERNELAPI
+NTSTATUS
+__cdecl
+WmiTraceMessage(
+ IN TRACEHANDLE LoggerHandle,
+ IN ULONG MessageFlags,
+ IN LPGUID MessageGuid,
+ IN USHORT MessageNumber,
+ IN ...);
#endif
-} TRANSACTION_LIST_ENTRY, *PTRANSACTION_LIST_ENTRY;
+#endif /* RUN_WPP */
-typedef struct _TRANSACTION_LIST_INFORMATION {
- ULONG NumberOfTransactions;
- TRANSACTION_LIST_ENTRY TransactionInformation[1];
-} TRANSACTION_LIST_INFORMATION, *PTRANSACTION_LIST_INFORMATION;
+ #if (NTDDI_VERSION >= NTDDI_WINXP)
-typedef NTSTATUS
-(NTAPI *PFN_NT_CREATE_TRANSACTION)(
- OUT PHANDLE TransactionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN LPGUID Uow OPTIONAL,
- IN HANDLE TmHandle OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN ULONG IsolationLevel OPTIONAL,
- IN ULONG IsolationFlags OPTIONAL,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- IN PUNICODE_STRING Description OPTIONAL);
+NTKERNELAPI
+NTSTATUS
+NTAPI
+WmiQueryTraceInformation(
+ IN TRACE_INFORMATION_CLASS TraceInformationClass,
+ OUT PVOID TraceInformation,
+ IN ULONG TraceInformationLength,
+ OUT PULONG RequiredLength OPTIONAL,
+ IN PVOID Buffer OPTIONAL);
+
+#if 0
+/* FIXME: Get va_list from where? */
+NTKERNELAPI
+NTSTATUS
+__cdecl
+WmiTraceMessageVa(
+ IN TRACEHANDLE LoggerHandle,
+ IN ULONG MessageFlags,
+ IN LPGUID MessageGuid,
+ IN USHORT MessageNumber,
+ IN va_list MessageArgList);
+#endif
-typedef NTSTATUS
-(NTAPI *PFN_NT_OPEN_TRANSACTION)(
- OUT PHANDLE TransactionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN LPGUID Uow OPTIONAL,
- IN HANDLE TmHandle OPTIONAL);
+#endif
-typedef NTSTATUS
-(NTAPI *PFN_NT_QUERY_INFORMATION_TRANSACTION)(
- IN HANDLE TransactionHandle,
- IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
- OUT PVOID TransactionInformation,
- IN ULONG TransactionInformationLength,
- OUT PULONG ReturnLength OPTIONAL);
+/******************************************************************************
+ * Kernel Debugger Functions *
+ ******************************************************************************/
-typedef NTSTATUS
-(NTAPI *PFN_NT_SET_INFORMATION_TRANSACTION)(
- IN HANDLE TransactionHandle,
- IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
- IN PVOID TransactionInformation,
- IN ULONG TransactionInformationLength);
+#ifndef _DBGNT_
-typedef NTSTATUS
-(NTAPI *PFN_NT_COMMIT_TRANSACTION)(
- IN HANDLE TransactionHandle,
- IN BOOLEAN Wait);
+ULONG
+__cdecl
+DbgPrint(
+ IN PCSTR Format,
+ IN ...);
+#endif
-typedef NTSTATUS
-(NTAPI *PFN_NT_ROLLBACK_TRANSACTION)(
- IN HANDLE TransactionHandle,
- IN BOOLEAN Wait);
+#if DBG
-#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define KdPrint(_x_) DbgPrint _x_
+#define KdPrintEx(_x_) DbgPrintEx _x_
+#define vKdPrintEx(_x_) vDbgPrintEx _x_
+#define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
+#define KdBreakPoint() DbgBreakPoint()
+#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtCreateTransactionManager(
- OUT PHANDLE TmHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN PUNICODE_STRING LogFileName OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN ULONG CommitStrength OPTIONAL);
+#else /* !DBG */
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtOpenTransactionManager(
- OUT PHANDLE TmHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN PUNICODE_STRING LogFileName OPTIONAL,
- IN LPGUID TmIdentity OPTIONAL,
- IN ULONG OpenOptions OPTIONAL);
+#define KdPrint(_x_)
+#define KdPrintEx(_x_)
+#define vKdPrintEx(_x_)
+#define vKdPrintExWithPrefix(_x_)
+#define KdBreakPoint()
+#define KdBreakPointWithStatus(s)
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtRenameTransactionManager(
- IN PUNICODE_STRING LogFileName,
- IN LPGUID ExistingTransactionManagerGuid);
+#endif /* !DBG */
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtRollforwardTransactionManager(
- IN HANDLE TransactionManagerHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+#if defined(__GNUC__)
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtRecoverTransactionManager(
- IN HANDLE TransactionManagerHandle);
+extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent;
+extern NTKERNELAPI BOOLEAN KdDebuggerEnabled;
+#define KD_DEBUGGER_ENABLED KdDebuggerEnabled
+#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtQueryInformationTransactionManager(
- IN HANDLE TransactionManagerHandle,
- IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
- OUT PVOID TransactionManagerInformation,
- IN ULONG TransactionManagerInformationLength,
- OUT PULONG ReturnLength);
+#elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtSetInformationTransactionManager(
- IN HANDLE TmHandle OPTIONAL,
- IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
- IN PVOID TransactionManagerInformation,
- IN ULONG TransactionManagerInformationLength);
+extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent;
+extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled;
+#define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
+#define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtEnumerateTransactionObject(
- IN HANDLE RootObjectHandle OPTIONAL,
- IN KTMOBJECT_TYPE QueryType,
- IN OUT PKTMOBJECT_CURSOR ObjectCursor,
- IN ULONG ObjectCursorLength,
- OUT PULONG ReturnLength);
+#else
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtCreateTransaction(
- OUT PHANDLE TransactionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN LPGUID Uow OPTIONAL,
- IN HANDLE TmHandle OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN ULONG IsolationLevel OPTIONAL,
- IN ULONG IsolationFlags OPTIONAL,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- IN PUNICODE_STRING Description OPTIONAL);
+extern BOOLEAN KdDebuggerNotPresent;
+extern BOOLEAN KdDebuggerEnabled;
+#define KD_DEBUGGER_ENABLED KdDebuggerEnabled
+#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtOpenTransaction(
- OUT PHANDLE TransactionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN LPGUID Uow,
- IN HANDLE TmHandle OPTIONAL);
+#endif
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtQueryInformationTransaction(
- IN HANDLE TransactionHandle,
- IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
- OUT PVOID TransactionInformation,
- IN ULONG TransactionInformationLength,
- OUT PULONG ReturnLength OPTIONAL);
+#ifdef _VA_LIST_DEFINED
+#if (NTDDI_VERSION >= NTDDI_WINXP)
-NTSYSCALLAPI
-NTSTATUS
+NTSYSAPI
+ULONG
NTAPI
-NtSetInformationTransaction(
- IN HANDLE TransactionHandle,
- IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
- IN PVOID TransactionInformation,
- IN ULONG TransactionInformationLength);
+vDbgPrintEx(
+ IN ULONG ComponentId,
+ IN ULONG Level,
+ IN PCCH Format,
+ IN va_list ap);
-NTSYSCALLAPI
-NTSTATUS
+NTSYSAPI
+ULONG
NTAPI
-NtCommitTransaction(
- IN HANDLE TransactionHandle,
- IN BOOLEAN Wait);
+vDbgPrintExWithPrefix(
+ IN PCCH Prefix,
+ IN ULONG ComponentId,
+ IN ULONG Level,
+ IN PCCH Format,
+ IN va_list ap);
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtRollbackTransaction(
- IN HANDLE TransactionHandle,
- IN BOOLEAN Wait);
+#endif
+#endif // _VA_LIST_DEFINED
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtCreateEnlistment(
- OUT PHANDLE EnlistmentHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE ResourceManagerHandle,
- IN HANDLE TransactionHandle,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN NOTIFICATION_MASK NotificationMask,
- IN PVOID EnlistmentKey OPTIONAL);
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
-NTSYSCALLAPI
+NTKERNELAPI
NTSTATUS
NTAPI
-NtOpenEnlistment(
- OUT PHANDLE EnlistmentHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE ResourceManagerHandle,
- IN LPGUID EnlistmentGuid,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
+KdDisableDebugger(VOID);
-NTSYSCALLAPI
+NTKERNELAPI
NTSTATUS
NTAPI
-NtQueryInformationEnlistment(
- IN HANDLE EnlistmentHandle,
- IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
- OUT PVOID EnlistmentInformation,
- IN ULONG EnlistmentInformationLength,
- OUT PULONG ReturnLength);
+KdEnableDebugger(VOID);
-NTSYSCALLAPI
-NTSTATUS
+#if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
+#define DbgBreakPoint __debugbreak
+#else
+VOID
NTAPI
-NtSetInformationEnlistment(
- IN HANDLE EnlistmentHandle OPTIONAL,
- IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
- IN PVOID EnlistmentInformation,
- IN ULONG EnlistmentInformationLength);
+DbgBreakPoint(VOID);
+#endif
-NTSYSCALLAPI
-NTSTATUS
+NTSYSAPI
+VOID
NTAPI
-NtRecoverEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PVOID EnlistmentKey OPTIONAL);
+DbgBreakPointWithStatus(
+ IN ULONG Status);
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtPrePrepareEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+NTSYSAPI
+ULONG
+_cdecl
+DbgPrintReturnControlC(
+ IN PCCH Format,
+ IN ...);
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtPrepareEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+NTSYSAPI
+ULONG
+_cdecl
+DbgPrintEx(
+ IN ULONG ComponentId,
+ IN ULONG Level,
+ IN PCSTR Format,
+ IN ...);
-NTSYSCALLAPI
+NTSYSAPI
NTSTATUS
NTAPI
-NtCommitEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+DbgQueryDebugFilterState(
+ IN ULONG ComponentId,
+ IN ULONG Level);
-NTSYSCALLAPI
+NTSYSAPI
NTSTATUS
NTAPI
-NtRollbackEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+DbgSetDebugFilterState(
+ IN ULONG ComponentId,
+ IN ULONG Level,
+ IN BOOLEAN State);
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtPrePrepareComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+#endif
-NTSYSCALLAPI
-NTSTATUS
+#if (NTDDI_VERSION >= NTDDI_WS03)
+NTKERNELAPI
+BOOLEAN
NTAPI
-NtPrepareComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+KdRefreshDebuggerNotPresent(VOID);
+#endif
-NTSYSCALLAPI
+#if (NTDDI_VERSION >= NTDDI_WS03SP1)
+NTKERNELAPI
NTSTATUS
NTAPI
-NtCommitComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+KdChangeOption(
+ IN KD_OPTION Option,
+ IN ULONG InBufferBytes OPTIONAL,
+ IN PVOID InBuffer,
+ IN ULONG OutBufferBytes OPTIONAL,
+ OUT PVOID OutBuffer,
+ OUT PULONG OutBufferNeeded OPTIONAL);
+#endif
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtReadOnlyEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
-NTSYSCALLAPI
-NTSTATUS
+FORCEINLINE
+PVOID
NTAPI
-NtRollbackComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+HalAllocateCommonBuffer(
+ IN PDMA_ADAPTER DmaAdapter,
+ IN ULONG Length,
+ OUT PPHYSICAL_ADDRESS LogicalAddress,
+ IN BOOLEAN CacheEnabled)
+{
+ PALLOCATE_COMMON_BUFFER allocateCommonBuffer;
+ PVOID commonBuffer;
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtSinglePhaseReject(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
+ allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer;
+ ASSERT( allocateCommonBuffer != NULL );
+ commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled );
+ return commonBuffer;
+}
-NTSYSCALLAPI
-NTSTATUS
+FORCEINLINE
+VOID
NTAPI
-NtCreateResourceManager(
- OUT PHANDLE ResourceManagerHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE TmHandle,
- IN LPGUID RmGuid,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN PUNICODE_STRING Description OPTIONAL);
+HalFreeCommonBuffer(
+ IN PDMA_ADAPTER DmaAdapter,
+ IN ULONG Length,
+ IN PHYSICAL_ADDRESS LogicalAddress,
+ IN PVOID VirtualAddress,
+ IN BOOLEAN CacheEnabled)
+{
+ PFREE_COMMON_BUFFER freeCommonBuffer;
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtOpenResourceManager(
- OUT PHANDLE ResourceManagerHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE TmHandle,
- IN LPGUID ResourceManagerGuid OPTIONAL,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
+ freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer;
+ ASSERT( freeCommonBuffer != NULL );
+ freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled );
+}
-NTSYSCALLAPI
-NTSTATUS
+FORCEINLINE
+ULONG
NTAPI
-NtRecoverResourceManager(
- IN HANDLE ResourceManagerHandle);
+HalReadDmaCounter(
+ IN PDMA_ADAPTER DmaAdapter)
+{
+ PREAD_DMA_COUNTER readDmaCounter;
+ ULONG counter;
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtGetNotificationResourceManager(
- IN HANDLE ResourceManagerHandle,
- OUT PTRANSACTION_NOTIFICATION TransactionNotification,
- IN ULONG NotificationLength,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- OUT PULONG ReturnLength OPTIONAL,
- IN ULONG Asynchronous,
- IN ULONG_PTR AsynchronousContext OPTIONAL);
+ readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter;
+ ASSERT( readDmaCounter != NULL );
+ counter = readDmaCounter( DmaAdapter );
+ return counter;
+}
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtQueryInformationResourceManager(
- IN HANDLE ResourceManagerHandle,
- IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
- OUT PVOID ResourceManagerInformation,
- IN ULONG ResourceManagerInformationLength,
- OUT PULONG ReturnLength OPTIONAL);
+#endif
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtSetInformationResourceManager(
- IN HANDLE ResourceManagerHandle,
- IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
- IN PVOID ResourceManagerInformation,
- IN ULONG ResourceManagerInformationLength);
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtRegisterProtocolAddressInformation(
- IN HANDLE ResourceManager,
- IN PCRM_PROTOCOL_ID ProtocolId,
- IN ULONG ProtocolInformationSize,
- IN PVOID ProtocolInformation,
- IN ULONG CreateOptions OPTIONAL);
+#ifndef _NTTMAPI_
+#define _NTTMAPI_
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtPropagationComplete(
- IN HANDLE ResourceManagerHandle,
- IN ULONG RequestCookie,
- IN ULONG BufferLength,
- IN PVOID Buffer);
+#include <ktmtypes.h>
-NTSYSCALLAPI
-NTSTATUS
-NTAPI
-NtPropagationFailed(
- IN HANDLE ResourceManagerHandle,
- IN ULONG RequestCookie,
- IN NTSTATUS PropStatus);
+typedef enum _KTMOBJECT_TYPE {
+ KTMOBJECT_TRANSACTION,
+ KTMOBJECT_TRANSACTION_MANAGER,
+ KTMOBJECT_RESOURCE_MANAGER,
+ KTMOBJECT_ENLISTMENT,
+ KTMOBJECT_INVALID
+} KTMOBJECT_TYPE, *PKTMOBJECT_TYPE;
+
+typedef struct _KTMOBJECT_CURSOR {
+ GUID LastQuery;
+ ULONG ObjectIdCount;
+ GUID ObjectIds[1];
+} KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR;
+
+typedef enum _TRANSACTION_INFORMATION_CLASS {
+ TransactionBasicInformation,
+ TransactionPropertiesInformation,
+ TransactionEnlistmentInformation,
+ TransactionSuperiorEnlistmentInformation
+} TRANSACTION_INFORMATION_CLASS;
-#endif /* NTDDI_VERSION >= NTDDI_VISTA */
+typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS {
+ TransactionManagerBasicInformation,
+ TransactionManagerLogInformation,
+ TransactionManagerLogPathInformation,
+ TransactionManagerRecoveryInformation = 4
+} TRANSACTIONMANAGER_INFORMATION_CLASS;
+
+typedef enum _RESOURCEMANAGER_INFORMATION_CLASS {
+ ResourceManagerBasicInformation,
+ ResourceManagerCompletionInformation,
+} RESOURCEMANAGER_INFORMATION_CLASS;
+
+typedef enum _ENLISTMENT_INFORMATION_CLASS {
+ EnlistmentBasicInformation,
+ EnlistmentRecoveryInformation,
+ EnlistmentCrmInformation
+} ENLISTMENT_INFORMATION_CLASS;
#endif /* !_NTTMAPI_ */
/******************************************************************************
IN PVOID KeySetInformation,
IN ULONG KeySetInformationLength);
+#endif
+
+/******************************************************************************
+ * Unsorted *
+ ******************************************************************************/
+
+/* GUID Comparison */
+#ifndef __IID_ALIGNED__
+#define __IID_ALIGNED__
+#ifdef __cplusplus
+inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
+{
+ return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) &&
+ (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)) );
+}
+#else
+#define IsEqualGUIDAligned(guid1, guid2) \
+ ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
+ (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
+#endif /* __cplusplus */
+#endif /* !__IID_ALIGNED__ */
+
+typedef enum {
+ LT_DONT_CARE,
+ LT_LOWEST_LATENCY
+} LATENCY_TIME;
+
+#define MAXIMUM_SUSPEND_COUNT MAXCHAR
+
+#define MAXIMUM_FILENAME_LENGTH 256
+
+#define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
+
+#define OBJECT_TYPE_CREATE (0x0001)
+#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
+
+#define DIRECTORY_QUERY (0x0001)
+#define DIRECTORY_TRAVERSE (0x0002)
+#define DIRECTORY_CREATE_OBJECT (0x0004)
+#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
+#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
+
+#define EVENT_QUERY_STATE (0x0001)
+#define EVENT_MODIFY_STATE (0x0002)
+#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
+
+#define SEMAPHORE_QUERY_STATE (0x0001)
+#define SEMAPHORE_MODIFY_STATE (0x0002)
+#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
+
+#define SYMBOLIC_LINK_QUERY 0x0001
+#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
+
+#define DUPLICATE_CLOSE_SOURCE 0x00000001
+#define DUPLICATE_SAME_ACCESS 0x00000002
+#define DUPLICATE_SAME_ATTRIBUTES 0x00000004
+
+/* Global debug flag */
+extern ULONG NtGlobalFlag;
+
+/* Service Start Types */
+#define SERVICE_BOOT_START 0x00000000
+#define SERVICE_SYSTEM_START 0x00000001
+#define SERVICE_AUTO_START 0x00000002
+#define SERVICE_DEMAND_START 0x00000003
+#define SERVICE_DISABLED 0x00000004
+
+#ifndef _TRACEHANDLE_DEFINED
+#define _TRACEHANDLE_DEFINED
+typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
+#endif
-#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
#ifdef __cplusplus