需要编写总线驱动程序?

通常,一个设备有多路数据流。而ReadFile,WriteFile又只针对一个句柄。这就出现一个矛盾,这有几个解决方案

  1. 多个设备对象
  2. 编写总线驱动
  3. 设备对象命名空间

虽然我没有找到WDK中推荐的做法,但在WHDC上,微软给出了推荐的做法。下面简单介绍一下吧。

首先IoRegisterDeviceInterface接受一个ReferenceString,我们可以给一个字符串“ch0”。这样,设备接口生成的符号连接就加了这个字符串。打开设备用这个带ReferenceString的字符串枚举。也就是说CreateFile用不同的Path得到不同的句柄。区别在于句柄上的IRP,其IO_STACK_LOCATION中的FileObject->FileName。现在明了了

 

NTSTATUS
DispatchRead (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
    NTSTATUS status=STATUS_SUCCESS;
    PIO_STACK_LOCATION stack= IoGetCurrentIrpStackLocation(Irp);
    /*
比如设备有两个IRP队列,这里就可以区分了*/
    if(stack->FileObject->FileName...)
    {
      
    }
    else
    {

    }

    KdTrace(("Irp(%8.8lX)\n",Irp));
          
    COMPLETE_REQUEST_NOINCREMENT(Irp,status,0);
   
    return status;
}

转载于:https://www.cnblogs.com/iwasmu/archive/2010/04/28/1723384.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值