Windows驱动开发-键盘驱动过滤

#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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值