#pragma once
+#ifndef _WDMDDK_
+#define _WDMDDK_
+
/* Dependencies */
#define NT_INCLUDED
#include <excpt.h>
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 _BUS_HANDLER *PBUS_HANDLER;
typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
typedef struct _ETHREAD *PETHREAD;
******************************************************************************/
typedef UCHAR KIRQL, *PKIRQL;
-typedef UCHAR KPROCESSOR_MODE;
+typedef CCHAR KPROCESSOR_MODE;
typedef LONG KPRIORITY;
+typedef ULONG EXECUTION_STATE;
+
typedef enum _MODE {
KernelMode,
UserMode,
#define PF_COMPARE_EXCHANGE128 14
#define PF_COMPARE64_EXCHANGE128 15
#define PF_CHANNELS_ENABLED 16
+#define PF_XSAVE_ENABLED 17
#define MAXIMUM_SUPPORTED_EXTENSION 512
#define MAXIMUM_WAIT_OBJECTS 64
ULONG Period;
} KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
+typedef BOOLEAN
+(DDKAPI *PKSYNCHRONIZE_ROUTINE)(
+ IN PVOID SynchronizeContext);
+
+typedef enum _POOL_TYPE {
+ NonPagedPool,
+ PagedPool,
+ NonPagedPoolMustSucceed,
+ DontUseThisType,
+ NonPagedPoolCacheAligned,
+ PagedPoolCacheAligned,
+ NonPagedPoolCacheAlignedMustS,
+ MaxPoolType,
+ NonPagedPoolSession = 32,
+ PagedPoolSession,
+ NonPagedPoolMustSucceedSession,
+ DontUseThisTypeSession,
+ NonPagedPoolCacheAlignedSession,
+ PagedPoolCacheAlignedSession,
+ NonPagedPoolCacheAlignedMustSSession
+} POOL_TYPE;
+
typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
{
StandardDesign,
* Kernel Functions *
******************************************************************************/
-#if (NTDDI_VERSION >= NTDDI_WIN2K) && defined(SINGLE_GROUP_LEGACY_API)
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeEvent(
+ OUT PRKEVENT Event,
+ IN EVENT_TYPE Type,
+ IN BOOLEAN State);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeClearEvent(
+ IN OUT PRKEVENT Event);
+
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+
+#if defined(SINGLE_GROUP_LEGACY_API)
+NTKERNELAPI
+VOID
+NTAPI
+KeRevertToUserAffinityThread(VOID);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetSystemAffinityThread(
+ IN KAFFINITY Affinity);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeSetTargetProcessorDpc(
+ IN PRKDPC Dpc,
+ IN CCHAR Number);
+
NTKERNELAPI
KAFFINITY
-KeQueryActiveProcessors (
+NTAPI
+KeQueryActiveProcessors(
VOID);
#endif
#if !defined(_M_AMD64)
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
-
NTKERNELAPI
ULONGLONG
NTAPI
NTAPI
KeQuerySystemTime(
OUT PLARGE_INTEGER CurrentTime);
-
-#endif
-
-#endif // !_M_AMD64
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K)
+#endif /* !_M_AMD64 */
NTKERNELAPI
DECLSPEC_NORETURN
#if (NTDDI_VERSION >= NTDDI_WINXP)
+// _DECL_HAL_KE_IMPORT
VOID
FASTCALL
KeAcquireInStackQueuedSpinLock (
#endif
+#if defined(_X86_)
NTKERNELAPI
NTSTATUS
NTAPI
NTAPI
KeRestoreFloatingPointState(
IN PKFLOATING_SAVE FloatSave);
+#endif
#if defined(_IA64_)
FORCEINLINE
KeFlushWriteBuffer(VOID);
#endif
-NTKERNELAPI
-VOID
-NTAPI
-KeClearEvent(
- IN OUT PRKEVENT Event);
-
-#if (NTDDI_VERSION >= NTDDI_WIN2K) && defined(SINGLE_GROUP_LEGACY_API)
-
-NTKERNELAPI
-VOID
-NTAPI
-KeRevertToUserAffinityThread(VOID);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeSetSystemAffinityThread(
- IN KAFFINITY Affinity);
-
-NTKERNELAPI
-VOID
-NTAPI
-KeSetTargetProcessorDpc(
- IN PRKDPC Dpc,
- IN CCHAR Number);
-
-#endif
-
/*
* VOID
* KeFlushIoBuffers(
VOID);
#endif
-NTKERNELAPI
-VOID
-NTAPI
-KeInitializeEvent(
- OUT PRKEVENT Event,
- IN EVENT_TYPE Type,
- IN BOOLEAN State);
-
/*
* VOID
* KeInitializeCallbackRecord(
#define MEM_LARGE_PAGES 0x20000000
#define MEM_4MB_PAGES 0x80000000
-#define SEC_RESERVE 0x4000000
+#define SEC_RESERVE 0x4000000
+#define SEC_COMMIT 0x8000000
#define SEC_LARGE_PAGES 0x80000000
/* Section map options */
ULONG ByteCount;
ULONG ByteOffset;
} MDL, *PMDL;
+typedef MDL *PMDLX;
typedef enum _MEMORY_CACHING_TYPE_ORIG {
MmFrameBufferCached = 2
VOID
NTAPI
MmBuildMdlForNonPagedPool(
- IN OUT PMDL MemoryDescriptorList);
+ IN OUT PMDLX MemoryDescriptorList);
+//DECLSPEC_DEPRECATED_DDK
NTKERNELAPI
PMDL
NTAPI
LOGICAL
NTAPI
MmIsDriverVerifying(
- IN PDRIVER_OBJECT DriverObject);
+ IN struct _DRIVER_OBJECT *DriverObject);
NTKERNELAPI
PVOID
VOID
NTAPI
MmProbeAndLockPages(
- IN OUT PMDLX MemoryDescriptorList,
+ IN OUT PMDL MemoryDescriptorList,
IN KPROCESSOR_MODE AccessMode,
IN LOCK_OPERATION Operation);
VOID
NTAPI
MmUnlockPages(
- IN OUT PMDLX MemoryDescriptorList);
+ IN OUT PMDL MemoryDescriptorList);
NTKERNELAPI
VOID
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
IN PMDL MemoryDescriptorList,
IN MEMORY_CACHING_TYPE CacheType);
-NTKERNELAPI
-VOID
-NTAPI
-MmProbeAndLockProcessPages(
- IN OUT PMDL MemoryDescriptorList,
- IN PEPROCESS Process,
- IN KPROCESSOR_MODE AccessMode,
- IN LOCK_OPERATION Operation);
-
NTKERNELAPI
NTSTATUS
NTAPI
MmProtectMdlSystemAddress(
- IN PMDLX MemoryDescriptorList,
+ IN PMDL MemoryDescriptorList,
IN ULONG NewProtect);
NTKERNELAPI
MmUnmapReservedMapping(
IN PVOID BaseAddress,
IN ULONG PoolTag,
- IN PMDLX MemoryDescriptorList);
+ IN PMDL MemoryDescriptorList);
#endif
PowerDeviceMaximum
} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
+typedef union _POWER_STATE {
+ SYSTEM_POWER_STATE SystemState;
+ DEVICE_POWER_STATE DeviceState;
+} POWER_STATE, *PPOWER_STATE;
+
+typedef enum _POWER_STATE_TYPE {
+ SystemPowerState = 0,
+ DevicePowerState
+} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
+
+typedef VOID
+(DDKAPI *PREQUEST_POWER_COMPLETE)(
+ IN struct _DEVICE_OBJECT *DeviceObject,
+ IN UCHAR MinorFunction,
+ IN POWER_STATE PowerState,
+ IN PVOID Context,
+ IN struct _IO_STATUS_BLOCK *IoStatus);
+
/******************************************************************************
* Power Management Support Functions *
******************************************************************************/
NTSTATUS
NTAPI
PoCallDriver(
- IN PDEVICE_OBJECT DeviceObject,
- IN OUT PIRP Irp);
+ IN struct _DEVICE_OBJECT *DeviceObject,
+ IN OUT struct _IRP *Irp);
NTKERNELAPI
PULONG
NTAPI
PoRegisterDeviceForIdleDetection(
- IN PDEVICE_OBJECT DeviceObject,
+ IN struct _DEVICE_OBJECT *DeviceObject,
IN ULONG ConservationIdleTime,
IN ULONG PerformanceIdleTime,
IN DEVICE_POWER_STATE State);
NTSTATUS
NTAPI
PoRequestPowerIrp(
- IN PDEVICE_OBJECT DeviceObject,
+ IN struct _DEVICE_OBJECT *DeviceObject,
IN UCHAR MinorFunction,
IN POWER_STATE PowerState,
IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL,
IN PVOID Context OPTIONAL,
- OUT PIRP *Irp OPTIONAL);
+ OUT struct _IRP **Irp OPTIONAL);
NTKERNELAPI
POWER_STATE
NTAPI
PoSetPowerState(
- IN PDEVICE_OBJECT DeviceObject,
+ IN struct _DEVICE_OBJECT *DeviceObject,
IN POWER_STATE_TYPE Type,
IN POWER_STATE State);
VOID
NTAPI
PoStartNextPowerIrp(
- IN OUT PIRP Irp);
+ IN OUT struct _IRP *Irp);
NTKERNELAPI
VOID
ULONG Length;
} Port;
struct {
+#if defined(NT_PROCESSOR_GROUPS)
+ USHORT Level;
+ USHORT Group;
+#else
ULONG Level;
+#endif
ULONG Vector;
KAFFINITY Affinity;
} Interrupt;
struct {
__GNU_EXTENSION union {
struct {
+#if defined(NT_PROCESSOR_GROUPS)
+ USHORT Group;
+#else
USHORT Reserved;
+#endif
USHORT MessageCount;
ULONG Vector;
KAFFINITY Affinity;
} Raw;
struct {
+#if defined(NT_PROCESSOR_GROUPS)
+ USHORT Level;
+ USHORT Group;
+#else
ULONG Level;
+#endif
ULONG Vector;
KAFFINITY Affinity;
} Translated;
- };
+ } DUMMYUNIONNAME;
} MessageInterrupt;
#endif
struct {
#define IO_REPARSE 0x0
#define IO_REMOUNT 0x1
-typedef union _POWER_STATE {
- SYSTEM_POWER_STATE SystemState;
- DEVICE_POWER_STATE DeviceState;
-} POWER_STATE, *PPOWER_STATE;
-
-typedef enum _POWER_STATE_TYPE {
- SystemPowerState = 0,
- DevicePowerState
-} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
-
typedef struct _IO_STATUS_BLOCK {
_ANONYMOUS_UNION union {
NTSTATUS Status;
ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
-typedef VOID
-(DDKAPI *PREQUEST_POWER_COMPLETE)(
- IN PDEVICE_OBJECT DeviceObject,
- IN UCHAR MinorFunction,
- IN POWER_STATE PowerState,
- IN PVOID Context,
- IN PIO_STATUS_BLOCK IoStatus);
-
typedef struct _PCI_SLOT_NUMBER {
union {
struct {
IN struct _DEVICE_OBJECT *DeviceObject,
IN PVOID Context);
-typedef BOOLEAN
-(DDKAPI *PKSYNCHRONIZE_ROUTINE)(
- IN PVOID SynchronizeContext);
-
typedef struct _IO_SECURITY_CONTEXT {
PSECURITY_QUALITY_OF_SERVICE SecurityQos;
PACCESS_STATE AccessState;
FORCEINLINE
BOOLEAN
+NTAPI
IoFlushAdapterBuffers(
IN PDMA_ADAPTER DmaAdapter,
IN PMDL Mdl,
FORCEINLINE
VOID
+NTAPI
IoFreeAdapterChannel(
IN PDMA_ADAPTER DmaAdapter)
{
FORCEINLINE
VOID
+NTAPI
IoFreeMapRegisters(
IN PDMA_ADAPTER DmaAdapter,
IN PVOID MapRegisterBase,
FORCEINLINE
PHYSICAL_ADDRESS
+NTAPI
IoMapTransfer(
IN PDMA_ADAPTER DmaAdapter,
IN PMDL Mdl,
#define PORT_MAXIMUM_MESSAGE_LENGTH 256
#endif
-typedef enum _POOL_TYPE {
- NonPagedPool,
- PagedPool,
- NonPagedPoolMustSucceed,
- DontUseThisType,
- NonPagedPoolCacheAligned,
- PagedPoolCacheAligned,
- NonPagedPoolCacheAlignedMustS,
- MaxPoolType,
- NonPagedPoolSession = 32,
- PagedPoolSession,
- NonPagedPoolMustSucceedSession,
- DontUseThisTypeSession,
- NonPagedPoolCacheAlignedSession,
- PagedPoolCacheAlignedSession,
- NonPagedPoolCacheAlignedMustSSession
-} POOL_TYPE;
-
typedef enum _SUITE_TYPE {
SmallBusiness,
Enterprise,
* Executive Functions *
******************************************************************************/
+#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
+#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
+#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
+
#define ExInitializeSListHead InitializeSListHead
#if defined(_X86_)
LT_LOWEST_LATENCY
} LATENCY_TIME;
-
-typedef ULONG EXECUTION_STATE;
-
/* Constants */
#define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
#define ZwCurrentProcess() NtCurrentProcess()
extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
+#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
+FORCEINLINE
+PVOID
+NTAPI
+HalAllocateCommonBuffer(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN ULONG Length,
+ OUT PPHYSICAL_ADDRESS LogicalAddress,
+ IN BOOLEAN CacheEnabled)
+{
+ PALLOCATE_COMMON_BUFFER allocateCommonBuffer;
+ PVOID commonBuffer;
+
+ allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer;
+ ASSERT( allocateCommonBuffer != NULL );
+ commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled );
+ return commonBuffer;
+}
+
+FORCEINLINE
+VOID
+NTAPI
+HalFreeCommonBuffer(
+ IN PDMA_ADAPTER DmaAdapter,
+ IN ULONG Length,
+ IN PHYSICAL_ADDRESS LogicalAddress,
+ IN PVOID VirtualAddress,
+ IN BOOLEAN CacheEnabled)
+{
+ PFREE_COMMON_BUFFER freeCommonBuffer;
+
+ freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer;
+ ASSERT( freeCommonBuffer != NULL );
+ freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled );
+}
+
+FORCEINLINE
+ULONG
+NTAPI
+HalReadDmaCounter(
+ IN PDMA_ADAPTER DmaAdapter)
+{
+ PREAD_DMA_COUNTER readDmaCounter;
+ ULONG counter;
+
+ readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter;
+ ASSERT( readDmaCounter != NULL );
+ counter = readDmaCounter( DmaAdapter );
+ return counter;
+}
+
+#endif
+
#ifdef __cplusplus
}
#endif
+
+#endif /* !_WDMDDK_ */