VC實現光碟機 軟碟機 USB的禁用和啟用

2021-04-06 15:31:37 字數 2532 閱讀 1014

由於工作的實際需要,需要對光碟機,軟碟機,usb的啟用和禁用實現控制。參考大家提供的對網絡卡禁用的**,實現了光碟機,軟碟機,usb的啟用和禁用。主要實現**如下:

// 必要的標頭檔案和要鏈結的lib檔案

#include

#include

#pragma comment(lib, "setupapi.lib")

#pragma comment(lib, "shlwapi.lib")

// device information set(我把它譯為裝置資訊集)

hdevinfo hdevinfo = null;

// 出錯資訊

void formatmsg(dword dwerror, lptstr * lpszmsg)}}

bool changestatus(dword newstatus, dword selecteditem, hdevinfo hdevinfo)

;sp_devinfo_data deviceinfodata = ;

hcursor = setcursor(loadcursor(null, idc_wait));

// get a handle to the selected item.

if (!setupdienumdeviceinfo(hdevinfo, selecteditem, &deviceinfodata))

// set the propchangeparams structure.

propchangeparams.classinstallheader.installfunction = dif_propertychange;

propchangeparams.scope = dics_flag_global;

propchangeparams.statechange = newstatus;

if (!setupdisetclassinstallparams(hdevinfo, &deviceinfodata, (sp_classinstall_header *)&propchangeparams,

sizeof(propchangeparams)))

// call the classinstaller and perform the change.

if (!setupdicallclassinstaller(dif_propertychange,hdevinfo,&deviceinfodata))

setcursor(hcursor);

return true;

}catch (tchar * pszerror)

return false;} }

// 這些裝置的啟用和禁用主要有此函式實現

// 引數說明,nstatus 可取3個值,-1 :啥也不做

// 0 禁用裝置,1啟用裝置。

// nindex用於控制是對光碟機,軟碟機還是對usb啟用或禁用

// 也是可取3個值,0 代表軟碟機,1 代表光碟機

// 2 代表usb

// 譬如要對光碟機實現禁用,可以這樣呼叫此函式

// controldisk(0, 1);

bool controldisk(int nstatus, int nindex)

lptstr lpszmsg = null;

tryhdevinfo = setupdigetclassdevs(&guid,null,null,digcf_present);

if (invalid_handle_value == hdevinfo)

dword i;

sp_devinfo_data deviceinfodata;

zeromemory(&deviceinfodata, sizeof(sp_devinfo_data));

deviceinfodata.cbsize = sizeof(sp_devinfo_data);

for (i = 0; setupdienumdeviceinfo(hdevinfo, i, &deviceinfodata); ++i)

else if (0 == nstatus) }

// 釋放 device information set

return setupdidestroydeviceinfolist(hdevinfo);

}catch (tchar * pszerror)

return false;

}return false;}

經測試這樣對光碟機,軟碟機和usb實現禁用沒有問題,但是當禁用過之後如果要對usb實現啟用必須兩次呼叫controldisk(1, 2);這個函式才可,其餘的兩個啟用沒什麼問題。還有要說的就是我不是用的列舉所有的裝置,然後再過濾(網上的那個禁用網絡卡的就是這種方法)。

據我觀察,在登錄檔的此項下下:

hkey_local_machine/system/currentcontrolset/control/class/

有很多guid,每個guid代表乙個裝置,譬如這個是usb的

這個是cdrom的

等等了。

這些值你即使把它改為別的guid,我使用原來的guid仍然可以實現我的功能。

VC實現光碟機 軟碟機 USB的禁用和啟用

由於工作的實際需要,需要對光碟機,軟碟機,usb的啟用和禁用實現控制。參考大家提供的對網絡卡禁用的 實現了光碟機,軟碟機,usb的啟用和禁用。主要實現 如下 必要的標頭檔案和要鏈結的lib檔案 include include pragma comment lib,setupapi.lib pragm...

VC實現光碟機 軟碟機 USB的禁用和啟用

由於工作的實際需要,需要對光碟機,軟碟機,usb的啟用和禁用實現控制。參考大家提供的對網絡卡禁用的 實現了光碟機,軟碟機,usb的啟用和禁用。主要實現 如下 必要的標頭檔案和要鏈結的lib檔案 include include pragma comment lib,setupapi.lib pragm...

VC實現光碟機 軟碟機 USB的禁用和啟用

由於工作的實際需要,需要對光碟機,軟碟機,usb的啟用和禁用實現控制。參考大家提供的對網絡卡禁用的 實現了光碟機,軟碟機,usb的啟用和禁用。主要實現 如下 必要的標頭檔案和要鏈結的lib檔案 include include pragma comment lib,setupapi.lib pragm...