【问题标题】:Trace the function implemented by DeviceioControl跟踪 DeviceioControl 实现的功能
【发布时间】:2010-04-21 12:09:36
【问题描述】:

我正在使用一个 WinCE 设备,该设备具有在 MFC 中为其编写的无线电管理器驱动程序。在 Radio GUI 的代码中,我可以看到调用了特定 IOCTL 的函数 Deviceiocontrol。但是,我无法跟踪此函数调用的特定代码。有人能告诉我 Deviceiocontrol 是如何工作的吗?

【问题讨论】:

    标签: visual-studio mfc windows-ce device-driver


    【解决方案1】:

    DeviceIoControl 使用文件句柄调用设备驱动程序。如果要单步执行设备驱动程序本身,则必须使用内核调试器。

    文件句柄代表一个内核对象,它由一个包含函数表的 DEVICE_OBJECT 结构组成。在这个 IRP_MJ_DEVICE_CONTROL 索引处的表中,驱动程序设置了它的句柄函数。然后使用打包到 IRP 中的 io 控制参数调用该函数。

    【讨论】:

    • 谢谢!恐怕我不知道如何使用内核调试器。我可以看到无线电管理器的代码,并且我相信函数 RadioManager_IOControl(Rmgr * context,IOCTL_...,BYTE *pInBuffer, DWORD inSize,BYTE *pOutBuffer, DWORD outSize, DWORD *pOutSize) (在无线电驱动程序中)是deviceiocontrol 所谓的。我的问题是 deviceiocontrol 在其参数列表中有一个 Rmgr 句柄,而设备驱动程序的 RadioManager_IOControl 在其参数列表中有一个指向 Rmgr 结构的指针。我无法追踪这个结构是如何填充的。
    • Rmgr* 是您传递给DeviceIoControl 的设备句柄。当您调用CreateFile 时会填充此句柄。其人口的确切方式是特定于驱动程序/实现的。它可能会在每次调用驱动程序的 XXX_Open 时填充,并且可能在驱动程序的 XXX_Init 期间填充,它可能只是驱动程序返回的虚拟句柄。特定于驱动程序。
    【解决方案2】:

    您有发送 IOCTL 的驱动程序的源代码吗?
    您将句柄传递给DeviceIoControl - 使用对CreateFile(L"XXX#:",...) 的调用打开句柄 - XXX 是注册表中设置的驱动程序前缀。 # 是驱动程序在加载时给出的索引(也可以在注册表中设置)。
    要查看执行的功能,请在驱动程序的源代码中搜索您发送到DeviceIoControl 的 IOCTL。你会在XXX_IoControl的驱动实现中找到它。

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2014-10-23
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多