⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 driverb_syn.h

📁 基于DDK的驱动间同步调用测试示例程序,DriverA是目标驱动,DriverB是主驱动,test是MFC测试示例
💻 H
📖 第 1 页 / 共 2 页
字号:
    IN  PDRIVERB_SYN_DEVICE_EXTENSION    DeviceExtension
    );

BOOLEAN DriverB_SynAcquireRemoveLock(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION    DeviceExtension
    );

VOID DriverB_SynReleaseRemoveLock(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION    DeviceExtension
    );

VOID DriverB_SynWaitForSafeRemove(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION    DeviceExtension
    );

NTSTATUS DriverB_SynSubmitIrpSync(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

VOID DriverB_SynStallQueues(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION DeviceExtension
    );

VOID DriverB_SynRestartQueues(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION DeviceExtension
    );

VOID DriverB_SynFlushQueues(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION   DeviceExtension,
    IN  PFILE_OBJECT            FileObject
    );

///////////////////////////////////////////////////////////////////////////////////////////////////
// Pnp 
///////////////////////////////////////////////////////////////////////////////////////////////////

// define this PnP IRP.  This IRP is only defined in ntddk.h normally
#if !defined(IRP_MN_QUERY_LEGACY_BUS_INFORMATION)
#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION     0x18
#endif // IRP_MN_QUERY_LEGACY_BUS_INFORMATION

NTSTATUS DriverB_SynStartDevice(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION    DeviceExtension,
    IN  PIRP                            Irp
    );

NTSTATUS DriverB_SynFreeResources(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION DeviceExtension
    );

NTSTATUS DriverB_SynGetDeviceCapabilities(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION    DeviceExtension
    );

///////////////////////////////////////////////////////////////////////////////////////////////////
// Power
///////////////////////////////////////////////////////////////////////////////////////////////////

typedef struct _DRIVERB_SYN_POWER_IRP_CONTEXT
{
    PKEVENT         Event;
    NTSTATUS        Status;
} DRIVERB_SYN_POWER_IRP_CONTEXT, *PDRIVERB_SYN_POWER_IRP_CONTEXT;


#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

NTSTATUS DriverB_SynSystemPowerDispatch(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION        DeviceExtension,
    IN  PIRP                        Irp
    );

NTSTATUS DriverB_SynSystemPowerCompletionRoutine(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp,
    IN  PVOID           Context
    );

NTSTATUS DriverB_SynDeviceQueryPowerCompletionRoutine(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp,
    IN  PVOID           Context
    );

NTSTATUS DriverB_SynDeviceSetPowerCompletionRoutine(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp,
    IN  PVOID           Context
    );

VOID DriverB_SynDevicePowerCompleteCallback(
    IN  PDEVICE_OBJECT      DeviceObject,
    IN  UCHAR               MinorFunction,
    IN  POWER_STATE         PowerState,
    IN  PVOID               Context,
    IN  PIO_STATUS_BLOCK    IoStatus
    );

#ifdef __cplusplus
}
#endif // __cplusplus

NTSTATUS DriverB_SynGetDevicePowerState(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION        DeviceExtension,
    IN  SYSTEM_POWER_STATE              SystemState,
    OUT PDEVICE_POWER_STATE             DeviceState
    );

VOID DriverB_SynPowerDownPreparation(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION        DeviceExtension,
    IN  PIO_WORKITEM_ROUTINE                Callback
    );

VOID DriverB_SynPowerDownPrepCallback(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PVOID           Context
    );

VOID DriverB_SynPowerD0PrepCallback(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PVOID           Context
    );

VOID DriverB_SynPowerUpCallback(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PVOID           Context
    );

VOID DriverB_SynRequestDevicePowerIrpCallback(
    IN  PDEVICE_OBJECT      DeviceObject,
    IN  UCHAR               MinorFunction,
    IN  POWER_STATE         PowerState,
    IN  PVOID               Context,
    IN  PIO_STATUS_BLOCK    IoStatus
    );

NTSTATUS DriverB_SynRequestDevicePowerIrp(
    IN  PDRIVERB_SYN_DEVICE_EXTENSION        DeviceExtension,
    IN  DEVICE_POWER_STATE             DeviceState
    );


///////////////////////////////////////////////////////////////////////////////////////////////////
// Registry
///////////////////////////////////////////////////////////////////////////////////////////////////

PVOID DriverB_SynRegQueryValueKey(
    IN  HANDLE  RegKeyHandle,
    IN  PWSTR   SubKeyName,
    IN  PWSTR   ValueName,
    OUT PULONG  Length
    );

VOID DriverB_SynRegEnumerateKeys(
    IN  HANDLE RegKeyHandle
    );

VOID DriverB_SynRegEnumerateValueKeys(
    IN  HANDLE  RegKeyHandle
    );

///////////////////////////////////////////////////////////////////////////////////////////////////
// Debug
///////////////////////////////////////////////////////////////////////////////////////////////////

// definition of debug levels

#define DBG_NONE            0
#define DBG_ERR             1
#define DBG_WARN            2
#define DBG_TRACE           3
#define DBG_INFO            4
#define DBG_VERB            5

#ifdef DRIVERB_SYN_WMI_TRACE

/*
tracepdb -f objchk_wxp_x86\i386\DriverB_Syn.pdb -p C:\DriverB_Syn
SET TRACE_FORMAT_SEARCH_PATH=C:\DriverB_Syn

tracelog -start DriverB_Syn -guid DriverB_Syn.ctl -f DriverB_Syn.log -flags 0x7FFFFFFF -level 5
tracelog -stop DriverB_Syn

tracefmt -o DriverB_Syn.txt -f DriverB_Syn.log
*/

#define WPP_AREA_LEVEL_LOGGER(Area,Lvl)           WPP_LEVEL_LOGGER(Area)
#define WPP_AREA_LEVEL_ENABLED(Area,Lvl)          (WPP_LEVEL_ENABLED(Area) && WPP_CONTROL(WPP_BIT_##Area).Level >= Lvl)

#define WPP_CONTROL_GUIDS \
    WPP_DEFINE_CONTROL_GUID(DriverB_Syn,(D52281C6,8C6D,4D9F,9FD2,13884E6F4783), \
        WPP_DEFINE_BIT(DBG_GENERAL)                 /* bit  0 = 0x00000001 */ \
        WPP_DEFINE_BIT(DBG_PNP)                     /* bit  1 = 0x00000002 */ \
        WPP_DEFINE_BIT(DBG_POWER)                   /* bit  2 = 0x00000004 */ \
        WPP_DEFINE_BIT(DBG_COUNT)                   /* bit  3 = 0x00000008 */ \
        WPP_DEFINE_BIT(DBG_CREATECLOSE)             /* bit  4 = 0x00000010 */ \
        WPP_DEFINE_BIT(DBG_WMI)                     /* bit  5 = 0x00000020 */ \
        WPP_DEFINE_BIT(DBG_UNLOAD)                  /* bit  6 = 0x00000040 */ \
        WPP_DEFINE_BIT(DBG_IO)                      /* bit  7 = 0x00000080 */ \
        WPP_DEFINE_BIT(DBG_INIT)                    /* bit  8 = 0x00000100 */ \
        WPP_DEFINE_BIT(DBG_09)                      /* bit  9 = 0x00000200 */ \
        WPP_DEFINE_BIT(DBG_10)                      /* bit 10 = 0x00000400 */ \
        WPP_DEFINE_BIT(DBG_11)                      /* bit 11 = 0x00000800 */ \
        WPP_DEFINE_BIT(DBG_12)                      /* bit 12 = 0x00001000 */ \
        WPP_DEFINE_BIT(DBG_13)                      /* bit 13 = 0x00002000 */ \
        WPP_DEFINE_BIT(DBG_14)                      /* bit 14 = 0x00004000 */ \
        WPP_DEFINE_BIT(DBG_15)                      /* bit 15 = 0x00008000 */ \
        WPP_DEFINE_BIT(DBG_16)                      /* bit 16 = 0x00010000 */ \
        WPP_DEFINE_BIT(DBG_17)                      /* bit 17 = 0x00020000 */ \
        WPP_DEFINE_BIT(DBG_18)                      /* bit 18 = 0x00040000 */ \
        WPP_DEFINE_BIT(DBG_19)                      /* bit 19 = 0x00080000 */ \
        WPP_DEFINE_BIT(DBG_20)                      /* bit 20 = 0x00100000 */ \
        WPP_DEFINE_BIT(DBG_21)                      /* bit 21 = 0x00200000 */ \
        WPP_DEFINE_BIT(DBG_22)                      /* bit 22 = 0x00400000 */ \
        WPP_DEFINE_BIT(DBG_23)                      /* bit 23 = 0x00800000 */ \
        WPP_DEFINE_BIT(DBG_24)                      /* bit 24 = 0x01000000 */ \
        WPP_DEFINE_BIT(DBG_25)                      /* bit 25 = 0x02000000 */ \
        WPP_DEFINE_BIT(DBG_26)                      /* bit 26 = 0x04000000 */ \
        WPP_DEFINE_BIT(DBG_27)                      /* bit 27 = 0x08000000 */ \
        WPP_DEFINE_BIT(DBG_28)                      /* bit 28 = 0x10000000 */ \
        WPP_DEFINE_BIT(DBG_29)                      /* bit 29 = 0x20000000 */ \
        WPP_DEFINE_BIT(DBG_30)                      /* bit 30 = 0x40000000 */ \
        WPP_DEFINE_BIT(DBG_31)                      /* bit 31 = 0x80000000 */ \
        )

__inline VOID DriverB_SynDumpIrp(
    IN PIRP Irp
    )
{
}

__inline PCHAR SystemPowerStateString(
    IN  SYSTEM_POWER_STATE  SystemState
    )
{
    return "";
}

__inline PCHAR DevicePowerStateString(
    IN  DEVICE_POWER_STATE  DeviceState
    )
{
    return "";
}

#else

// definition of debug areas

#define DBG_GENERAL         (1 << 0)
#define DBG_PNP             (1 << 1)
#define DBG_POWER           (1 << 2)
#define DBG_COUNT           (1 << 3)
#define DBG_CREATECLOSE     (1 << 4)
#define DBG_WMI             (1 << 5)
#define DBG_UNLOAD          (1 << 6)
#define DBG_IO              (1 << 7)
#define DBG_INIT            (1 << 8)

#define DBG_ALL             0xFFFFFFFF

#if DBG

VOID DriverB_SynDebugPrint(
    IN ULONG    Area,
    IN ULONG    Level,
    IN PCCHAR   Format,
    IN          ...
    );

VOID DriverB_SynDumpIrp(
    IN PIRP Irp
    );

PCHAR IrpMajorFunctionString(
    IN  UCHAR MajorFunction
    );

PCHAR PnPMinorFunctionString(
    IN  UCHAR   MinorFunction
    );

PCHAR PowerMinorFunctionString(
    IN  UCHAR   MinorFunction
    );

PCHAR SystemPowerStateString(
    IN  SYSTEM_POWER_STATE  SystemState
    );

PCHAR DevicePowerStateString(
    IN  DEVICE_POWER_STATE  DeviceState
    );

PCHAR WMIMinorFunctionString (
    IN  UCHAR MinorFunction
    );

#else	// !DBG

__inline VOID DriverB_SynDebugPrint(
    IN ULONG    Area,
    IN ULONG    Level,
    IN PCCHAR   Format,
    IN          ...
    )
{
}

#define DriverB_SynDumpIrp(Irp)
#define IrpMajorFunctionString(MajorFunction)
#define PnPMinorFunctionString(MinorFunction)
#define PowerMinorFunctionString(MinorFunction)
#define SystemPowerStateString(SystemState) 0
#define DevicePowerStateString(DeviceState) 0
#define WMIMinorFunctionString(MinorFunction)
#define DriverB_SynTdiDumpAddress(Address)

#endif	// DBG
#endif	// DRIVERB_SYN_WMI_TRACE

#endif  // __DRIVERB_SYN_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -