USB通用驱动源码分析
+ -

USBCCGP 驱动结构

2021-09-15 854 0

USBCCGP驱动文件结构

USBCCGP驱动位于REACTOS的ReactOS-0.4.0\drivers\usb\usbccgp目录下,包含文件

descriptor.c
fdo.c
function.c
guid.c
misc.c
pdo.c
usbccgp.c
usbccgp.h
usbccgp.rc

USBCCGAP驱动代码结构

USBCCGAP入口函数DriverEntry

入口函数DriverEntry就位于usbccgp.c中,其功能是初始化IRP的回调函数指针,并实现各个回调函数代码实现。

usbccgp.c

NTSTATUS
NTAPI
DriverEntry(
    PDRIVER_OBJECT DriverObject,
    PUNICODE_STRING RegistryPath)
{

    /* Initialize driver object */
    DPRINT("[USBCCGP] DriverEntry\n");
    DriverObject->DriverExtension->AddDevice = USBCCGP_AddDevice;
    DriverObject->MajorFunction[IRP_MJ_CREATE] = USBCCGP_Dispatch;
    DriverObject->MajorFunction[IRP_MJ_CLOSE] = USBCCGP_Dispatch;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = USBCCGP_Dispatch;
    DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = USBCCGP_Dispatch;
    DriverObject->MajorFunction[IRP_MJ_POWER] = USBCCGP_Dispatch;
    DriverObject->MajorFunction[IRP_MJ_PNP] = USBCCGP_Dispatch;
    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = USBCCGP_Dispatch;
    DriverObject->DriverUnload = USBCCGP_Unload;

    /* FIMXE query GenericCompositeUSBDeviceString */

    return STATUS_SUCCESS;
}

通过代码可以看出,DRIVER_OBJECT 中,除过FDO创建的调函数AddDevice和驱动的卸载函数DriverUnload,各个IRP的回函数都设置为USBCCGP_Dispatch。
这样当无论是上层应用打开本驱动或者USBCCGP的创建的PDO设备被加载了FDO后,在其子设备的FDO中,系统发出IRP请求后,最终调用USBCCGP_Dispatch 来完成了。

当然USBCCGP_Dispatch不可能完成这么多的功能,仅为所有IRP的一个入口函数,在其内部会根据IRP和其来源不同进行二次派发。

IRP_MJ_INTERNAL_DEVICE_CONTROL不同于一般的IRP_MJ_CREATE有与其对应的API函数,这个IRP一般用于驱动内部的通讯,如上层驱动与下层驱动的调用。除过这些,当然最重要的就是IRP_MJ_PNP了,IRP_MJ_PNP实现与驱动的功能接口,而IRP_MJ_CREATE之类会实现与驱动功能接口。

USBCCGAP驱动的卸载函数

驱动的卸载函数很简单,就是一个空函数。
很明显这是一个WDM驱动,设备在卸载时会调发生主功能号为IRP_MJ_PNP,而次功能号为IRP_MN_REMOVE_DEVICE的IRP,而USBCCGP_Unload只是负责一些整个驱动的资源清理工作,由于在驱动初始化时并无任何资源申请,所以在此也就没有任何资源的释放了。

usbccgp.c

VOID
NTAPI
USBCCGP_Unload(PDRIVER_OBJECT DriverObject)
{
    DPRINT("[USBCCGP] Unload\n");
}
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 篇笔记 写笔记

USBCCGP 驱动结构
USBCCGP驱动文件结构USBCCGP驱动位于REACTOS的ReactOS-0.4.0driversusbusbccgp目录下,包含文件descriptor.cfdo.cfunction.cguid.cmisc.cpdo.cusbccgp.cusbccgp.husbccg......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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