非管理员进程的 Windows NDIS FilterDriver 对象 IO 访问

问题描述

我有 Windows NDIS FilterDriver,它的名字是 \\Device\\MyFilter。 用户应用程序使用 FilterDriver 执行一些 DeviceIoControl 操作并调用以下代码打开设备句柄:

LPSECURITY_ATTRIBUTES   lpSecurityAttributes = NULL;
DWORD   CreationDistribution = OPEN_EXISTING;
DWORD   FlagsAndAttributes = FILE_FLAG_OVERLAPPED;
DWORD   DesiredAccess = GENERIC_READ | GENERIC_WRITE;
DWORD   ShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
DWORD   lastErr = 0;

m_hFilter = CreateFileA(MY_FILTER_NAME,/* "\\\\.\\\\MyFilter" */
    DesiredAccess,ShareMode,lpSecurityAttributes,CreationDistribution,FlagsAndAttributes,NULL);

if (m_hFilter == INVALID_HANDLE_VALUE)
{
    lastErr = GetLastError();
    return false;
}

如果用户应用程序以“管理员身份”运行,则效果很好,否则(如果以普通用户身份运行)CreateFileA 返回 INVALID_HANDLE_VALUE,并且 lastErr = 5(拒绝访问)

返回“拒绝访问”的原因很清楚。 如何让用户的应用打开Filter Driver对象?

使用 IoRegisterDeviceInterface() 创建接口的想法看起来很有希望,但它需要指向 PDO 的指针,我不知道从哪里获取 NDIS 过滤器。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)