需要编写总线驱动程序?

通常,一个设备有多路数据流。而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;
}

你可能感兴趣的:(程序)