#include <ntddk.h>
extern POBJECT_TYPE IoDriverObjectType;
#define KDB_DRIVER_NAME L"\\Driver\\Kdbclass"
#define DELAY_ONE_MICROSECOND (-10)
#define DELAY_ONE_MILLISECOND (DELAY_ONE_MICROSECOND * 1000)
#define DELAY_ONE_SECOND (DELAY_ONE_MILLISECOND * 1000)
ULONG gC2pKeyCount = 0;
NTSTATUS ObReferenceObjectByName(
PUNICODE_STRING ObjectName,
ULONG Attributes,
PACCESS_STATE AccessState,
ACCESS_MASK DesiredAccess,
POBJECT_TYPE ObjectType,
KPROCESSOR_MODE AccessMode,
PVOID ParseContext,
PVOID* Object);
typedef struct _C2P_DEV_EXT {
ULONG NodeSize; // 结构体大小
PDEVICE_OBJECT pFilterDeviceObject; // 过滤设备对象
KSPIN_LOCK IoRequestsSpinLock; // 自旋锁
KEVENT IoInProgressEvent; // 用于线程同步处理
PDEVICE_OBJECT pTargetDeviceObject; // 绑定的设备对象
PDEVICE_OBJECT pLowerDeviceObject; // 物理设备对象
} C2P_DEV_EXT, *PC2P_DEV_EXT;
NTSTATUS c2pDevExtInit(IN PC2P_DEV_EXT devExt, IN PDEVICE_OBJECT pFilterDeviceObject, IN PDEVICE_OBJECT pTargetDeviceObject, IN PDEVICE_OBJECT pLowerDeviceObject);
// 绑定键盘对应设备栈中的所有设备
NTSTATUS c2pAttachDevice(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);
NTSTATUS c2pReadComplete(IN PDEVICE_OBJECT DeviceObject, IN PIRP irp, IN PVOID Context);
// 分发消息 - 普通版
NTSTATUS c2pDispatchGeneral(IN PDEVICE_OBJECT DeviceObject, IN PIRP irp);
// 分发消息 - 读操作
NTSTATUS c2pDispatchRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP irp);
// 分发消息 - 设备拔出
NTSTATUS c2pPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP irp);
// 分发消息 - Power处理
NTSTATUS c2pPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP irp);
// 卸载函数
VOID c2pUnload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
NTSTATUS status = STATUS_SUCCESS;
KdPrint(("Enter DriverEntry\n"));
for (size_t i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
{
driver->MajorFunction[i] = c2pDispatchGeneral;
}
driver->MajorFunction
Windows驱动开发-键盘驱动过滤
最新推荐文章于 2023-04-07 22:00:49 发布