一个自己写的Filter驱动,定义的Filter_Service_Name为:
#define FILTER_DEVICE_NAME L"\\\\.\\NDISLWF"
然后想用CreateFileW()方法来打开这个Handler:
#define FILTER_DEVICE_NAME L"\\\\.\\NDISLWF"
// Obtain a filter driver handle
printf("Opening a Filter Driver device handle...\n");
m_hFilter = CreateFileW(
FILTER_DEVICE_NAME,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
INVALID_HANDLE_VALUE);
if (m_hFilter == INVALID_HANDLE_VALUE)
{
printf("Failed to open a handle to ndislwf: 0x%x\n", GetLastError());
goto Exit;
}
结果返回的结果是INVALID_HANDLE_VALUE,并且GetLastError()=0x5
----------------------根本原因是运行的进程权限不够-------------------------------------------
1、可以更改CreateFileW()第三个参数为:FILE_SHARE_READ | FILE_SHARE_WRITE
2、然后在Vista中以管理员权限运行命令行窗口在运行
这样就没有问题了。
可以参考:http://topic.youkuaiyun.com/u/20091203/16/82ae83fc-dec2-4cfe-81a3-4972cb1b6490.html?seed=245779751&r=61629475#r_61629475