一个自己写的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.csdn.net/u/20091203/16/82ae83fc-dec2-4cfe-81a3-4972cb1b6490.html?seed=245779751&r=61629475#r_61629475