通过查看MSDN我们可以找到一下三个重要函数。
/*此函数用于罗列遍历设备信息*/
HANDLE FindFirstDevice(DeviceSearchType searchType, LPCVOID pvSearchParam, PDEVMGR_DEVICE_INFORMATION pdi);
/*此函数用于启用设备*/
HANDLE ActivateDevice(LPCWSTR lpszDevKey, DWORD dwClientInfo);
/*此函数用于禁用设备*/
BOOL DeactivateDevice(HANDLE hDevice);
禁用设备小示例:
Code
DoomDevice(LPCVOID deviceid) //参数为设备名 如:BTL,DMA等等
{
DEVMGR_DEVICE_INFORMATION DeviceInfo ;
DeviceInfo.dwSize = sizeof(DEVMGR_DEVICE_INFORMATION);
HANDLE hFind = FindFirstDevice(DeviceSearchByDeviceName,deviceid ,&DeviceInfo);//根据设备名查找信息
if(hFind!=INVALID_HANDLE_VALUE && DeviceInfo.hDevice)
{
listDevice.push_back(DeviceInfo); //利用列表保存被卸载驱动的信息
if(::DeactivateDevice(DeviceInfo.hDevice))
{
MessageBox(L"Doom Success");
}
else
{
MessageBox(L"Doom Failed");
}
}
} /*启动设备小示例*/
Code
ReviveDevice(CString deviceid)
{
std::vector<DEVMGR_DEVICE_INFORMATION>::iterator itList = listDevice.begin();
while(itList!=listDevice.end())//遍历查找被禁用的设备名
{
if(deviceid == (*itList).szLegacyName)
{
if(INVALID_HANDLE_VALUE ==::ActivateDevice((*itList).szDeviceKey,0))
{
DWORD error = GetLastError();
MessageBox(L"Device Dead!");
return;
}
else
{
MessageBox(L"Device Revive!");
return;
}
}
itList++;
}
MessageBox(L"Unable to Lock the Device Info");
} 在WM 6.0中启用设备和禁用设备就是如此简单,当然了,禁用设备的时候一定要记得将信息保存,否则,可能要靠重新启动系统来恢复设备信息了。 另外,在WM中的设备管理其实完全可以通过修改注册表来完成,初始化,运行中的设备信息都可以在注册表信息中查询到。
示例下载:https://files.cnblogs.com/oplusx/DoomCOMS.rar