【发布时间】:2014-10-12 19:53:38
【问题描述】:
我知道我们可以使用带有 METHOD_IN_DIRECT 的 IOCTL 的驱动程序使用 MDL 获取输出缓冲区。但是可以使用 METHOD_IN_DIRECT/METHOD_OUT_DIRECT 传递输入缓冲区。我在 OSR 上发现 METHOD_IN_DIRECT/METHOD_OUT_DIRECT 仅适用于输出缓冲区。为什么输入是缓冲 IO 总是 Direct IO。
【问题讨论】:
-
您的问题到底是什么?您可以将第二个缓冲区用于直接输入 (METHOD_IN_DIRECT) 或直接输出 (METHOD_OUT_DIRECT)。如果您要处理用户提供的大量数据,特别是通过 DMA 或 PIO 提供的数据,则 METHOD_IN_DIRECT 是合适的。在这种情况下,第一个缓冲区可能未被使用,或者它可能包含控制数据,告诉驱动程序如何处理第二个缓冲区中的数据。
-
所以我保持简单,DeviceIoControl 可以使用 METHOD_IN_DIRECT/METHOD_OUT_DIRECT 获取输出缓冲区......但是输入缓冲区将始终使用缓冲 IO 处理。所以是否可以使用 DirectIO 传递输入缓冲区。
-
是的,如果您使用 METHOD_IN_DIRECT,那么第二个缓冲区(“输出”缓冲区)实际上是一个输入缓冲区。
-
... 但是 both 缓冲区无法成为 Direct IO。
-
@HarryJohnston 你能告诉我好的资源,我可以更好地理解这一点。我没有告诉你“第二个缓冲区(“输出”缓冲区)实际上是一个输入缓冲区”跨度>
标签: windows kernel driver system