关于内核IoCreateNotificationEvent函数创建与用户模式共享对象的问题

HelloA666 2017-10-02 08:54:23
驱动程序代码:
//控制函数 //对应着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;
}
}
...全文
346 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
HelloA666 2017-10-02
  • 打赏
  • 举报
回复
内核模式创建对象时的路径:#define EVENT_NAME L"\\BaseNamedObjects\\HelloEvents" 用户模式打开对象的路径:#define EVENT_NAME L"HelloEvents"

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧