Windows下USB驱动基础知识
+ -

打印IRP_MJ_PNP所有子功能设备

2021-08-30 419 0

PCHAR
PnPMinorFunctionString(
    UCHAR MinorFunction
)
{
    static char str[256];
    switch (MinorFunction)
    {
    case IRP_MN_START_DEVICE:
        return "IRP_MN_START_DEVICE\n";

    case IRP_MN_QUERY_REMOVE_DEVICE:
        return "IRP_MN_QUERY_REMOVE_DEVICE\n";

    case IRP_MN_REMOVE_DEVICE:
        return "IRP_MN_REMOVE_DEVICE\n";

    case IRP_MN_CANCEL_REMOVE_DEVICE:
        return "IRP_MN_CANCEL_REMOVE_DEVICE\n";

    case IRP_MN_STOP_DEVICE:
        return "IRP_MN_STOP_DEVICE\n";

    case IRP_MN_QUERY_STOP_DEVICE:
        return "IRP_MN_QUERY_STOP_DEVICE\n";

    case IRP_MN_CANCEL_STOP_DEVICE:
        return "IRP_MN_CANCEL_STOP_DEVICE\n";

    case IRP_MN_QUERY_DEVICE_RELATIONS:
        return "IRP_MN_QUERY_DEVICE_RELATIONS\n";

    case IRP_MN_QUERY_INTERFACE:
        return "IRP_MN_QUERY_INTERFACE\n";

    case IRP_MN_QUERY_CAPABILITIES:
        return "IRP_MN_QUERY_CAPABILITIES\n";

    case IRP_MN_QUERY_RESOURCES:
        return "IRP_MN_QUERY_RESOURCES\n";

    case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
        return "IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n";

    case IRP_MN_QUERY_DEVICE_TEXT:
        return "IRP_MN_QUERY_DEVICE_TEXT\n";

    case IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
        return "IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n";

    case IRP_MN_READ_CONFIG:
        return "IRP_MN_READ_CONFIG\n";

    case IRP_MN_WRITE_CONFIG:
        return "IRP_MN_WRITE_CONFIG\n";

    case IRP_MN_EJECT:
        return "IRP_MN_EJECT\n";

    case IRP_MN_SET_LOCK:
        return "IRP_MN_SET_LOCK\n";

    case IRP_MN_QUERY_ID:
        return "IRP_MN_QUERY_ID\n";

    case IRP_MN_QUERY_PNP_DEVICE_STATE:
        return "IRP_MN_QUERY_PNP_DEVICE_STATE\n";

    case IRP_MN_QUERY_BUS_INFORMATION:
        return "IRP_MN_QUERY_BUS_INFORMATION\n";

    case IRP_MN_DEVICE_USAGE_NOTIFICATION:
        return "IRP_MN_DEVICE_USAGE_NOTIFICATION\n";

    case IRP_MN_SURPRISE_REMOVAL:
        return "IRP_MN_SURPRISE_REMOVAL\n";


    default:
        sprintf(str, "IRP_MN_%02x\n", MinorFunction);
        return str;
    }
}
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

USB总线FDO调用 IoInvalidateDeviceRelations通知PNP有新的设备后子设备收到的IRP
在USB FDO总线驱动中,创建了子设备PDO后,调用通知PNP管理器设备树发生了变化。这时系统会重新获取子设备关系树,然后对子设备进行信息收集,并启用。具体的过程如下:->FDO:IRP_MN_QUERY_DEVICE_RELATIONS PDO:IRP_MN_QUERY_ID......
Windows10下开发虚拟USB鼠标之枚举子设备失败(STATUS_DEVICE_DATA_ERROR)
之前发过一篇文章:Win10使用虚拟USB鼠标实现自动挂机测试功能(文章地址:http://www.usbzh.com/article/detail-476.html ) 使用的是虚拟驱动实现的一个虚拟USB鼠标,实现了产品的自动测试功能。生成的设备在设备管理器中如下:但在开发过程中,并不是一帆......
Windows驱动中获取设备PDO的属性信息
Windows驱动开发过程中,关于设备DEVICE_OBJECT有一堆的属信息,如硬件ID,兼容ID之类的,这些属性信息大部分在应用层是可以根据Setup系列函数获取到的。但在驱动层怎么获取PNP上报的物理设备PDO的这些属性信息呢?常见的属性信息有: wdm.h:33601typedef en......
打印IRP_MJ_PNP所有子功能设备
PCHARPnPMinorFunctionString( UCHAR MinorFunction){ static char str[256]; switch (MinorFunction) { case IRP_MN_START_DEVICE: ......
USBIP 创建FDO设备和子设备PDO
设备创建由add_vdev函数实现,具体过程为:使用vdev_create创建FDO设备建立自己的设备链表将创建的FDO和PDO使用IoAttachDeviceToDeviceStack函数关联最后根据设备类型进行初始化设备层级及设备成员指针链表如下:static PAGEABLE NTST......
USBIP FDO和PDO设备类型及结构体大小
设备类型typedef enum { VDEV_ROOT,//虚拟根设备FDO VDEV_CPDO,//虚拟USB控制器PDO VDEV_VHCI,//USB控制器FDO VDEV_HPDO,//USB根HUB PDO VDEV_VHUB, //USB根HUB......
USBIP 虚拟控制器设备(VDEV_CPDO)PDO的初始化过程
IRP_MN_QUERY_ID/BusQueryDeviceIDPAGEABLE NTSTATUSpnp_query_id(pvdev_t vdev, PIRP irp, PIO_STACK_LOCATION irpstack){ NTSTATUS status = STATUS_......
USBIP 集线器PDO(VDEV_HPDO)的初始化过程
USB集线器其实也是USB设备的一类,其设备分类分类为0x09。和USBIP虚拟的控制器(VDEV_CPDO)类似,USB控制器创建了其PDO之后,会通过IRP_MN_QUERY_DEVICE_RELATIONS返回USB集线器HUB的PDO设备列表。PNP管理器收到有新的设备之后,会开始收集这个P......
USBIP 虚拟集线器FDO子设备的管理
IRP_MN_QUERY_DEVICE_RELATIONS这得从IRP_MN_QUERY_DEVICE_RELATIONS来谈起,好像有点看的不是很明白。先把上一节的代码复制过来,看一下:static PAGEABLE NTSTATUSget_bus_relations_vhub(pvhub_d......
USBIP 获取子设备IRP_MN_QUERY_DEVICE_RELATIONS
作为总线驱动程序,通过IRP_MN_QUERY_DEVICE_RELATIONS返回其子设备。 case IRP_MN_QUERY_DEVICE_RELATIONS: status = pnp_query_dev_relations(vdev, irp, irpstack);......
USBIP 总线驱动上报子设备
USBIP该驱动包括了5种种设备的驱动,分别为:typedef enum { VDEV_ROOT, //虚拟根设备FDO VDEV_CPDO, //USB控制器PDO CONTROL PDO VDEV_VHCI, //虚拟USB控制器FDO VDEV_HPDO, ......
USBIP 应用层初始化PDO设备
这里只是简单的介绍一下当有一个新的PDO设备需要创建时的执行流程。其功能函为usbip.exe工程中的attach_device函数。其大概原理如下:1.通过usbip_net_tcp_connect函数连接到远程设备的应用层。2.执行query_import_device,创建设备句柄并与双方进行......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!