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;
    }

  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/iwasmu/p/1723384.html
Copyright © 2011-2022 走看看