我可以同时拨打多个IOCTL吗? (Windows驱动程序)

时间:2018-04-09 19:40:31

标签: windows kernel driver

我搜索得很广泛,我正在编写一个网络过滤器,我将我的注册表过滤器放在同一个驱动程序中。我可以同时拨打同一个驱动程序的多个IOCTL吗?如果我将网络过滤器和注册表过滤器分开会更好吗?

1 个答案:

答案 0 :(得分:0)

使用FILE_FLAG_OVERLAPPED打开设备。

然后,在发送IOCTL时,使用Overlapped参数。然后调用将立即返回(异步),您可以等待(使用WaitForSingleObject),调用更多的东西,或做任何事情。请注意,在这种情况下,返回数据的方式可能为some gotchas,具体取决于用例。

OVERLAPPED async_data = { 0 };
async_data.hEvent = event_handle;

if (DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, &async_data)
{
     // do stuff, more deviceiocontrol if you want
     WaitForSingleObjects(async_data.hEvent, INFINITE);
     // We wait until it finishes
}    
// Handle error