关于内核IoCreateNotificationEvent函数创建与用户模式共享对象的问题
驱动程序代码:
//控制函数 //对应着MajorFunction[IRP_MJ_DEVICE_CONTROL].
NTSTATUS DispatchIoctl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
{
...
//创建事件对象,设置为无信号状态
UNICODE_STRING hEventName;
RtlInitUnicodeString(&hEventName, EVENT_NAME);
pDevExt->EventObject = IoCreateNotificationEvent(&hEventName, &pDevExt->EventHandle);
//创建的对象是成功的,返回的句柄和对象指针不为NULL.
...
}
用户程序代码:
void DriverDlg::OnBnClickedButton7()
{
//创建对象
DWORD nByteReturn;
BOOL nRet = DeviceIoControl(hDriver, IOCTL_NTPROCDRV_START, NULL, 0,NULL , 0, &nByteReturn, NULL);
if (nRet)
AfxMessageBox(_T("成功"));
else
AfxMessageBox(_T("失败"));
}
void DriverDlg::OnBnClickedButton5()
{
if (hProcessEvent)
{
MessageBoxW(_T("已经打开事件对象!"));
goto s;
}
hProcessEvent = OpenEvent(SYNCHRONIZE, FALSE, EVENT_NAME); //打开IoCreateNotificationEvent创建的对象
if (!hProcessEvent)
{
DWORD Err = GetLastError();
WCHAR s[100];
wsprintf(s, _T("打开对象失败,错误代码:%u"), Err); //错误代码返回:2(系统找不到指定的文件。)
AfxMessageBox(s);
return;
}
}