Re:誰知道禁用USB端口的函數啊!?! 是不是要自己寫方法哦!
http://www.codeproject.com/system/EnumDevices.asp
http://www.codeproject.com/system/change_drive_sn.asp
http://www.codeproject.com/system/installed_programs.asp
http://www.codeproject.com/system/enum_display_modes.asp
http://www.codeproject.com/system/serial_portsenum_fifo.asp
1Minimize any window to system tray using Windows Hook
http://www.codeproject.com/system/DevicePropertySheet.asp
http://www.codeproject.com/system/chaiyasit_t.asp
http://www.codeproject.com/system/DevMgr.asp 001
http://www.codeproject.com/system/eject_cdrom.asp
http://www.codeproject.com/system/serviceskeleton.asp 002
http://www.codeproject.com/useritems/HwDetect.asp 003
Re:誰知道禁用USB端口的函數啊!?! 是不是要自己寫方法哦!
我做了個MP3的量產軟件,當對MP3的文件download完成后會將MP3安全移除。
問題是:我用GUID{0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED}會將USB鍵盤和USB鼠標全都枚舉出來,這樣我就無法區分誰是MP3,誰是USB鍵盤和鼠標了。雖然枚舉時我可以得到PID和VID,但是我們的PID和VID可能會被代理商更改,所以也就不能通過PID和VID來區分了,不知PC上的安全刪除U盤是怎樣做到的,PC應該可以將盤符和對應的設備對應起來,且能用唯一的標識來區分每臺設備,情況緊急,求求各位高手拉我一把吧,非常感謝!
我的代碼如下:
void CLogicDriveList::RemoveDevice(size_t index)
{
char szDevDesc[256] = {0};
HDEVINFO hDevInfo;
string Prod;
string Rev;
//遍歷所有的設備
hDevInfo = SetupDiGetClassDevs((LPGUID)&GUID_CLASS_USB_DEVICE, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE) if ( INVALID_HANDLE_VALUE == hDevInfo)return;
SP_DEVINFO_DATA devInfoData;
devInfoData.cbSize = sizeof(devInfoData);
int Index = 0;
while(SetupDiEnumDeviceInfo(hDevInfo, Index++, &devInfoData))
{
//獲取設備ID
std::string devId;
memset(szDevDesc, 0, sizeof(szDevDesc));
devInfoData.cbSize = sizeof(devInfoData);
CM_Get_Device_ID(devInfoData.DevInst, szDevDesc, sizeof(szDevDesc),0);
devId = szDevDesc;
cout<<devId<<endl;
//比較設備ID
if(這里該怎樣填呢?)
{
if(EjectDevice(devInfoData))
{
cout<<"Remove device "<<m_LogicDrives [index].Symbol<<": ok"<<endl;
break;
}
else
cout<<"Remove device "<<m_LogicDrives[index].Symbol<<": fail"<<endl;
}
}
}
bool CLogicDriveList::EjectDevice(const SP_DEVINFO_DATA &devInfoData)
{
PNP_VETO_TYPE pnpvietotype;
char vetoname[MAX_PATH] = {0};
CONFIGRET cr = CM_Request_Device_Eject(devInfoData.DevInst,
&pnpvietotype,
vetoname,
MAX_PATH,
0);
return CR_SUCCESS==cr;
}