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