zoukankan      html  css  js  c++  java
  • 需要编写总线驱动程序?

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

  • 相关阅读:
    jedis scan实现keys功能
    java简单实现一个阻塞式线程池
    Swift运算符
    数组的使用(1)
    Linux 常用命令
    Task02:基础查询与排序
    Task01:初识数据库
    摩尔投票法
    面向对象暑期课程总结
    xpath+requests+peewee——CSDN论坛全方位爬虫
  • 原文地址:https://www.cnblogs.com/iwasmu/p/1723384.html
Copyright © 2011-2022 走看看