二、用vs2005建立用于动态加载&卸载驱动的程序
这部分困扰了我挺长时间,最后发现是我对函数理解有误,网上现有的程序也有很大缺陷。我最终采取的方法如下:
1、驱动注册
这部分核心是 ActivateDeviceEx()函数。但是,使用此函数的前提是首先将String.reg添加在注册表中(我就是在这里悲剧了好久)。函数具体用法网上有很多,我就不罗嗦了。
2、驱动卸载
这部分核心是DeactivateDevice()函数。但是,网上广泛采用的代码有一个很大的缺点:它们都是通过一个全局变量在两个按键响应函数间传递注册设备的句柄,这样,一旦只按了“注册”键就不小心退出程序,接下来就会有问题。我找到的方法是先用FindFirstDevice()查询到设备句柄,再用DeactivateDevice()卸载。代码如下:
BOOL flag;
HANDLE hFind=INVALID_HANDLE_VALUE;
DEVMGR_DEVICE_INFORMATION devInfo={0};
devInfo.dwSize=sizeof(devInfo);
hFind=FindFirstDevice(DeviceSearchByDeviceName,_T("STR1"),&devInfo);
if(hFind == INVALID_HANDLE_VALUE)
{
MessageBoxW(_T("FindFirstDevice出错"),NULL,MB_OK);
}
flag=DeactivateDevice(devInfo.hDevice);
if(flag == NULL)
MessageBoxW(_T("unload driver fail!"),NULL,MB_OK);
else
MessageBoxW(_T("unload driver sucess"),NULL,MB_OK);
至此,第二步完成。