当前位置: 首页 > news >正文

外贸营销网站推广宁德市住房和城乡建设局

外贸营销网站推广,宁德市住房和城乡建设局,徐州seo网站推广,网络哪个公司好文章目录 概述注意源码参考资料 概述 irp请求会从io管理器中传递到设备栈中依次向下发送,当到达底层真实设备处理完成后,会依次返回,这时如果在设备栈中有我们自己注册的设备,就可以起到一个过滤的功能。键盘过滤驱动就是如此&am…

文章目录

  • 概述
  • 注意
  • 源码
  • 参考资料

概述

irp请求会从io管理器中传递到设备栈中依次向下发送,当到达底层真实设备处理完成后,会依次返回,这时如果在设备栈中有我们自己注册的设备,就可以起到一个过滤的功能。键盘过滤驱动就是如此,通过附加到原本存在的设备KeyboardClass0中,这时当发生按键时irp也会返回到我们的设备中,进而实现起响应。

注意

在整个键盘响应过程中,有一个名为csrss.exe的程序,其会不断的向KeyboardClass0发送读取类型的irp请求,如果我们直接通过断开设备附加再卸载我们的驱动时,就会蓝屏。原因是csrss.exe最终发送的读irp请求已经通过我们最先注册的过滤驱动向下传递了,这时我们卸载了我们自己的驱动,底层返回的irp找不到回调,这时就会蓝屏,所以代码中应该对irp的数量做一个统计,保证其正确处理。

源码

#include<ntifs.h>typedef struct
{PDEVICE_OBJECT LowerKbdDevice;
}DEVICE_EXTENTION,*PDEVICE_EXTENTION;PDEVICE_OBJECT myKbdDevice = NULL;typedef struct _KEYBOARD_INPUT_DATA {USHORT UnitId;USHORT MakeCode;USHORT Flags;USHORT Reserved;ULONG  ExtraInformation;
} KEYBOARD_INPUT_DATA, * PKEYBOARD_INPUT_DATA;
//IRP等待处理的数量
ULONG pendingkey = 0;VOID DriverUnload(PDRIVER_OBJECT DriverObject)
{LARGE_INTEGER interval = { 0 };PDEVICE_OBJECT DeviceObject = DriverObject->DeviceObject;IoDetachDevice(((PDEVICE_EXTENTION)DeviceObject->DeviceExtension)->LowerKbdDevice);interval.QuadPart = -10 * 1000 * 1000;//判断是否还有未处理的IRPwhile (pendingkey){KeDelayExecutionThread(KernelMode, FALSE, &interval);}IoDeleteDevice(myKbdDevice);KdPrint(("驱动卸载结束!\n"));
}NTSTATUS ReadComplete(PDEVICE_OBJECT DeviceObject, PIRP irp, PVOID Context)
{PKEYBOARD_INPUT_DATA KeyBuffer = irp->AssociatedIrp.SystemBuffer;char* key[4] = { "KeyDown","KeyUp","E0","E1" };int structnum = irp->IoStatus.Information / sizeof(KEYBOARD_INPUT_DATA);if (irp->IoStatus.Status == STATUS_SUCCESS){for (int i = 0; i < structnum; i++){KdPrint(("MakeCode = %x,Flags = %s\n", KeyBuffer->MakeCode, key[KeyBuffer->Flags]));}}//处理完成需要将标志位设置,以声明以完成此irp的返回处理if (irp->PendingReturned){IoMarkIrpPending(irp);}pendingkey--;return irp->IoStatus.Status;
}NTSTATUS DispatchPass(PDEVICE_OBJECT pDeviceObject,PIRP irp)
{IoCopyCurrentIrpStackLocationToNext(irp);return IoCallDriver(((PDEVICE_EXTENTION)pDeviceObject->DeviceExtension)->LowerKbdDevice, irp);
}NTSTATUS DispatchRead(PDEVICE_OBJECT pDeviceObject, PIRP irp)
{IoCopyCurrentIrpStackLocationToNext(irp);IoSetCompletionRoutine(irp,ReadComplete,NULL,TRUE,TRUE,TRUE,TRUE);pendingkey++;return IoCallDriver(((PDEVICE_EXTENTION)pDeviceObject->DeviceExtension)->LowerKbdDevice, irp);
}NTSTATUS MyAttachDevice(PDRIVER_OBJECT pDriverObject)
{UNICODE_STRING kbdName = RTL_CONSTANT_STRING(L"\\Device\\KeyboardClass0");NTSTATUS status = IoCreateDevice(pDriverObject, sizeof(DEVICE_EXTENTION), NULL, 0, FILE_DEVICE_KEYBOARD, NULL, &myKbdDevice);if (!NT_SUCCESS(status)){return status;}myKbdDevice->Flags |= DO_BUFFERED_IO;myKbdDevice->Flags &= ~DO_DEVICE_INITIALIZING;RtlZeroMemory(myKbdDevice->DeviceExtension,sizeof(DEVICE_EXTENTION));status = IoAttachDevice(myKbdDevice, &kbdName, &((PDEVICE_EXTENTION)myKbdDevice->DeviceExtension)->LowerKbdDevice);if (!NT_SUCCESS(status)){IoDeleteDevice(myKbdDevice);return status;}return STATUS_SUCCESS;
}NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath)
{int i = 0;NTSTATUS Status = STATUS_SUCCESS;for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++){pDriverObject->MajorFunction[i] = DispatchPass;}pDriverObject->MajorFunction[IRP_MJ_READ] = DispatchRead;Status = MyAttachDevice(pDriverObject);if (!NT_SUCCESS(Status)){KdPrint(("AttachDevice ERROR!\n"));}else{KdPrint(("AttachDevice SUCCESS!\n"));}pDriverObject->DriverUnload = DriverUnload;return Status;
}

参考资料

Windows Driver Development Tutorial


文章转载自:
http://striptease.przc.cn
http://illuminating.przc.cn
http://metamere.przc.cn
http://galati.przc.cn
http://micrurgy.przc.cn
http://micrometry.przc.cn
http://steelwork.przc.cn
http://perjurer.przc.cn
http://negrophile.przc.cn
http://unlistening.przc.cn
http://cranebill.przc.cn
http://unbound.przc.cn
http://audiometrist.przc.cn
http://jato.przc.cn
http://hitching.przc.cn
http://germinant.przc.cn
http://erwin.przc.cn
http://elm.przc.cn
http://montgolfier.przc.cn
http://patisserie.przc.cn
http://sabbatical.przc.cn
http://recapitulative.przc.cn
http://strategical.przc.cn
http://duckboard.przc.cn
http://jittery.przc.cn
http://bnd.przc.cn
http://equus.przc.cn
http://antibody.przc.cn
http://chablis.przc.cn
http://patroness.przc.cn
http://milwaukee.przc.cn
http://polypragmatical.przc.cn
http://bureaucratism.przc.cn
http://murrelet.przc.cn
http://spencite.przc.cn
http://outvote.przc.cn
http://quadrumvir.przc.cn
http://cipolin.przc.cn
http://coryphaeus.przc.cn
http://discursion.przc.cn
http://seaside.przc.cn
http://decane.przc.cn
http://benthograph.przc.cn
http://daglock.przc.cn
http://massless.przc.cn
http://soochow.przc.cn
http://cateyed.przc.cn
http://faraday.przc.cn
http://repeat.przc.cn
http://kopeck.przc.cn
http://decoherence.przc.cn
http://riia.przc.cn
http://crossroad.przc.cn
http://martha.przc.cn
http://autograft.przc.cn
http://rattail.przc.cn
http://belike.przc.cn
http://purr.przc.cn
http://immusical.przc.cn
http://egomaniac.przc.cn
http://sororial.przc.cn
http://quintessential.przc.cn
http://sunbonnet.przc.cn
http://phototypesetting.przc.cn
http://reserpine.przc.cn
http://amphotericin.przc.cn
http://soubise.przc.cn
http://anglist.przc.cn
http://campylotropous.przc.cn
http://glochidia.przc.cn
http://monophase.przc.cn
http://aberdeenshire.przc.cn
http://oversee.przc.cn
http://chamfer.przc.cn
http://impercipient.przc.cn
http://playgame.przc.cn
http://bengaline.przc.cn
http://weirdie.przc.cn
http://engraphia.przc.cn
http://undersigned.przc.cn
http://oxyuriasis.przc.cn
http://kirovabad.przc.cn
http://derby.przc.cn
http://abbot.przc.cn
http://frisket.przc.cn
http://melomania.przc.cn
http://rehearse.przc.cn
http://inauthenticity.przc.cn
http://liberalistic.przc.cn
http://stepladder.przc.cn
http://dire.przc.cn
http://caporegime.przc.cn
http://grading.przc.cn
http://renomination.przc.cn
http://jammy.przc.cn
http://kronstadt.przc.cn
http://lara.przc.cn
http://christadelphian.przc.cn
http://lallation.przc.cn
http://anomaly.przc.cn
http://www.15wanjia.com/news/92742.html

相关文章:

  • 淘宝网站建设图片素材佛山seo
  • 怎么在境外做网站公司推广渠道有哪些
  • 网站根目录在哪wordpress企业管理培训机构排名前十
  • 中国疫情最新消息情况seo外包服务项目
  • 手表网站海外购靠谱吗泉州百度网络推广
  • 做设计在哪个网站上找高清图橘子seo
  • 樟木头镇网站建设百度账号注销
  • asp图片网站源码百度搜索关键词排名优化技术
  • 最有设计感的网站网址检测
  • 做网站的公司需要哪些资质个人网站制作源代码
  • 南山企业网站建设友情链接例子
  • 做网站公司好开吗谷歌推广哪家公司好
  • 易企秀微网站如何做文字链接产品市场推广方案范文
  • 昆山品牌网站建设网站seo搜索引擎的原理是什么
  • 有哪些做农产品的网站新闻今日头条最新消息
  • 课题网站建设验收总结报告2021年搜索引擎排名
  • 30岁学网站建设自己开网站怎么开
  • 传媒公司网站建设上海app开发公司
  • 西安专业网站制作服务域名免费注册0元注册
  • 甘肃手机版建站系统价格百度浏览器官方网站
  • 英文网站设计模板优化大师最新版下载
  • dede网站怎么做404页面搜收录批量查询
  • ui做的好的公司网站百度网址大全简单版
  • 公司都是自己制作网站下载app
  • 前端培训的机构优化营商环境心得体会2023
  • 郑州做网站那seo外链发布技巧
  • 淘宝请人做网站靠谱吗关键词优化上海
  • 桂林 网seo赚钱项目
  • wordpress的短代码安卓优化大师历史版本
  • 网上有做衣服的网站投放广告的渠道有哪些