现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

USB编程研究(2):DeviceIoControl函数和控制码

2013-12-08 18:35 工业·编程 ⁄ 共 1194字 ⁄ 字号 暂无评论

对于USB编程,其中一个函数叫做:

BOOL WINAPI DeviceIoControl(
  __in          HANDLE hDevice,
  __in          DWORD dwIoControlCode,
  __in          LPVOID lpInBuffer,
  __in          DWORD nInBufferSize,
  __out         LPVOID lpOutBuffer,
  __in          DWORD nOutBufferSize,
  __out         LPDWORD lpBytesReturned,
  __in          LPOVERLAPPED lpOverlapped
);
这个函数在MSDN中有简单的介绍:

    The DeviceIoControl function sends a control code directly to a specified device driver, causing the corresponding device to perform the specified operation.

    也就是说,这个函数是对指定的设备驱动发送控制码,导致设备响应来完成指定的操作。

    首先来说,DeviceToControl()函数是一个通用函数,从微软的解释中我们就可以看到,它对设备的操作是取决于你发什么样的控制码。在 MSDN中对这个函数介绍的时候,并没有介绍与USB相关的控制码。我也曾经用错了控制码,导致最后使用GetLastError()函数总数得到错误码 50.

    与USB相关的控制码都定义在DDK的usbioctl.h头文件中。而对这些控制码的描述可以在在线的MSDN中查到,其路径是:

    http://msdn.microsoft.com/en-us/library/aa476234.aspx

    MSDN Library-->Win32 and COM Development-->Windows Driver Kit-->Device and Driver Technologies-->Buses and Ports-->Buses-->Buses-->USB-->Reference-->I/O Reqsts for USB Client Drivers

    其附近的一些目录也介绍了USB开发的一些信息。

    在看其中的控制码的同时,有一个技巧,例如IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION控制码,打开相应的网页,在网页的下面有个结构:USB_DESCRIPTOR_REQST,也就是说 IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION控制码是为了得到 USB_DESCRIPTOR_REQST结构参数的。这样我们就可以把控制码和我们要做的工作对应起来了。

给我留言

留言无头像?