Не получается создать KEvent для синхронизации приложения с драйвером. В приложении создаю евент и через структуру передаю в драйвер, в драйвере по полученому хендлу инициализирую событие. В документации сказано:
...
Form 3
KEvent(
HANDLE hEvent,
ACCESS_MASK access =OBJECT_TYPE_ALL_ACCESS
);
A driver uses FORM 3 when the system event object already exists but only the handle of the object is known. The handle can be passed from application code. An application can use the Win32 interface to create an event, and pass the handle to the driver via DeviceIoControl. This allows direct sharing of synchronization events between a driver and an application. The underlying system service for FORM 3 is ObReferenceObjectByHandle.
...
Получается все как бы честно...
Может кто сталкивался? Уж думаю не кривизна ли DriverWorks это?
Вот код в драйвере:
...
PVOID pBuffer = I.IoctlBuffer();
ULONG inputSize = I.IoctlInputBufferSize();
ULONG outputSize = I.IoctlOutputBufferSize();
I.Information() = 0;
PRADIUS_START_IO sio = reinterpret_cast<PRADIUS_START_IO>(pBuffer);
T<<sio->m_EventRx<<EOL<<sio->m_EventTx<<EOL;
T<<" Allocate write sync event" << EOL;
m_event_CanWrite = new(NonPagedPool) KEvent((HANDLE)sio->m_EventTx); // <--- _НЕ_РАБОТАЕТ_
if(m_event_CanWrite)
{
T<<" Error: Write sync event allocation failed" << EOL;
CleanupIoResources();
return STATUS_UNSUCCESSFUL;
}
m_event_CanWrite->Set();
...
А вот код софтины:
...
FWriteEnabled = CreateEvent(NULL, true, false, NULL);
InitializeCriticalSection(&FWriteCriticalSection);
RADIUS_START_IO startIoSettings;
bool result;
ULONG returned;
// Инициализация драйвера на ввод-вывод
startIoSettings.m_EventRx = FReadEnabled;
startIoSettings.m_EventTx = FWriteEnabled;
result = DeviceIoControl(
FDeviceHandle,
IOCTL_RADIUS_START_IO,
&startIoSettings, sizeof(RADIUS_START_IO),
NULL, 0,
&returned,
NULL
);
...
СПАСАЙТЕ