最近写了个驱动,是开机自启动的。但是在调试的时候想卸载这个驱动释放其占用的某些资源,发现使用RegisterDevice这些重新加载然后再调用DeactivateDevice卸载却无效。后来就在网上找了一下。发现是可以实现这个效果的。下面把这个记录一下:
查找出设备驱动,然后卸装:
BOOL CD3GHelpDlg::Unload(CString strDev)
{
BOOL bRes = FALSE;
HANDLE hFind = INVALID_HANDLE_VALUE;
try
{
if(strDev.IsEmpty()){
return FALSE;//__leave;
}
//确定搜索的方式
DeviceSearchType searchType;
if(strDev.GetAt(strDev.GetLength() - 1) == ':'){
searchType = DeviceSearchByLegacyName;
}
else{
searchType = DeviceSearchByDeviceName;
}
DEVMGR_DEVICE_INFORMATION devInfo = {0};
devInfo.dwSize = sizeof(devInfo);
//寻找驱动的句柄
hFind = FindFirstDevice(searchType, strDev, &devInfo);
if(hFind == INVALID_HANDLE_VALUE){
return FALSE;//__leave;
}
//卸载驱动
bRes = DeactivateDevice(devInfo.hDevice);
FindClose(hFind);
}
//__finally{
catch(HANDLE e){
};
return bRes;
}
卸载一个驱动,例如:
Unload(L"TGD1:");这样就可以把TGD1:的驱动卸载掉了。