首页
社区
课程
招聘
[求助]寒江独钓第四章键盘驱动卸载后蓝屏
发表于: 2017-2-3 15:50 4013

[求助]寒江独钓第四章键盘驱动卸载后蓝屏

2017-2-3 15:50
4013
寒江独钓这本书第4章讲的是键盘的过滤,我跟着书上面写得代码, 然后跟踪调试, 发现在驱动卸载函数return了之后, 马上就蓝屏了。

这个驱动的功能是绑定kbdclass驱动的所有设备, 然后为所有的IRP_MJ_READ请求设置一个完成函数并使gC2pKeyCount变量++, 然后交给下层驱动处理, 处理完毕之后, 把从键盘扫描到的字符打印出来, 然后gC2pKeyCount --。

驱动卸载函数如下:

void DriverUnload(PDRIVER_OBJECT pDriverObject){
       
        __debugbreak();
       
        PDEVICE_OBJECT pDeviceObject;
        PDEVICE_OBJECT oldDeviceObject;
        PC2P_DEV_EXT pC2pDevExt;
       
        LARGE_INTEGER lDelay;
        PRKTHREAD CurrentThread;
        lDelay = RtlConvertLongToLargeInteger(100 * DELAY_ONE_MILLISECOND);
       
        CurrentThread = KeGetCurrentThread();
        KeSetPriorityThread(CurrentThread, LOW_REALTIME_PRIORITY);

        UNREFERENCED_PARAMETER(pDriverObject);
        KdPrint(("Driver is unlaoding......"));

        pDeviceObject = pDriverObject->DeviceObject;
        while (pDeviceObject)
        {
                //c2pDetach(pDeviceObject);
                pC2pDevExt = (PC2P_DEV_EXT)pDeviceObject->DeviceExtension;
                IoDetachDevice(pC2pDevExt->pTargetDeviceObject);
                IoDeleteDevice(pDeviceObject);
                pC2pDevExt->pFilterDeviceObject = NULL;
                pC2pDevExt->pTargetDeviceObject = NULL;
                pDeviceObject = pDeviceObject->NextDevice;
        }

        ASSERT(NULL == pDriverObject->DeviceObject);
        while (gC2pKeyCount/*全局变量, 用来记录有多少个请求到来。每到来一个请求就++, 每结束一个请求就--*/)
        {
                KeDelayExecutionThread(KernelMode, FALSE, &lDelay);
        }
        KdPrint(("Driver unload OK!"));
        return;
//在return了之后, 很快就蓝屏了
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 210
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我发现 驱动卸载之后,正常来说.书上写到:"停止之后,必须要按下一个键才会彻底退出。"但是我按下一个键之后,电脑就会蓝屏。
我使用的测试系统是 win10 企业版 LTSC  64位 (10.0 版本17763).
感觉你的问题和我的类似。请问您有解决这个问题码?
2020-10-20 10:19
0
游客
登录 | 注册 方可回帖
返回
//