用 WDM toaster bus 改写 USB虚拟总线

NTSTATUSDriverEntry (    IN  PDRIVER_OBJECT  DriverObject,    IN  PUNICODE_STRING RegistryPath    ){...DriverObject->MajorFunction [IRP_MJ_INTERNAL_DEVICE_CONTROL] = Bus_InternalIoCtl;...}如果已安装相应US...
摘要由CSDN通过智能技术生成
NTSTATUS
DriverEntry (
    IN  PDRIVER_OBJECT  DriverObject,
    IN  PUNICODE_STRING RegistryPath
    )
{
...
DriverObject->MajorFunction [IRP_MJ_INTERNAL_DEVICE_CONTROL] = Bus_InternalIoCtl;
...
}
如果已安装相应USB驱动,用enmu插入USB硬件ID:USB\VID_XXXX&PID_XXXX、顺带将一个Event句柄传入Bus_PlugInDevice,Bus_InternalIoCtl内就可以接收并处理上层驱动发来的URB.
Bus_InternalIoCtl例程要干的事就是记住Irp、Urb两个指针信息,用KeSetEvent激活enmu里的事件,使enmu知道总线驱动收到了上层驱动发来的URB,enmu需要用Bus_IocCtl或者Bus_Read将Urb头部信息及其扩展数据读取出来,分析,构造回复用的Urb,并用Bus_IocCtl或Bus_Write回复此Urb,并IoCompleteRequest此Irp。
Bus_InternalIoCtl例程中需置Irp的CancelRoutine,此Irp的CompletionRoutine靠应用层使用Bus_IocCtl或Bus_Write来进行。


试着在Bus_InternalIoCtl中还有排队等待没完成的Irp的情形下:
用 devcon remove "root\vusbbus" 卸载此总线,一直等,成不了功。
或者
用Bus_UnPlugDevice强行将此USB设备拔出来,问题来了:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值