首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DeviceIoControl通过DirectIO输入缓冲器

用DeviceIoControl通过DirectIO输入缓冲器
EN

Stack Overflow用户
提问于 2014-10-12 19:53:38
回答 1查看 1.1K关注 0票数 0

我知道,我们可以从使用METHOD_IN_DIRECT.But的IOCTL驱动程序中获得输出缓冲器,可以使用OSR _IN_ Direct /METHOD_OUT_Direct传递输入缓冲区。我在OSR上发现,方法_IN_Direct/METHOD_OUT_Direct只适用于输出buffer.Why输入,输入输入总是直接IO缓冲。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-13 02:43:15

如果控制代码是用METHOD_IN_DIRECT定义的,那么DeviceIoControl具有以下签名:

代码语言:javascript
复制
BOOL WINAPI DeviceIoControl(
  _In_         HANDLE hDevice,
  _In_         DWORD dwIoControlCode,
  _In_opt_     LPVOID lpInBuffer1,
  _In_         DWORD nInBuffer1Size,
  _In_opt_     LPVOID lpInBuffer2,
  _In_         DWORD nInBuffer2Size,
  _Out_opt_    LPDWORD lpBytesReturned,
  _Inout_opt_  LPOVERLAPPED lpOverlapped
);

请注意,有两个输入缓冲区(都包含设备驱动程序读取的数据)和没有输出缓冲区(因此设备驱动程序不能将任何数据返回到用户模式)。

第一个输入缓冲区lpInBuffer1被复制到系统缓冲区,因此应该是相对较小的。如果控制代码不需要两个输入缓冲区,lpInBuffer1将是NULL

第二个输入缓冲器lpInBuffer2通过Direct提供给设备驱动程序,因此适合于大型缓冲区和/或与DMA或PIO一起使用。

应该注意的是,Windows似乎不包括任何使用METHOD_IN_DIRECT进行用户模式访问的控制代码的驱动程序。(在驱动程序之间传递的一些控制代码中使用。)但是,第三方设备驱动程序可以提供使用此方法的控制代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26329328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档