當前位置:編程學習大全網 - 編程語言 - vc++實現控制USB設備啟用與否

vc++實現控制USB設備啟用與否

XP下可以使用註冊表來實現,但 win7 及以上就無效了,此時可以使用重命名 USB 驅動的方式來進行,參考代碼如下

BeginWaitCursor();

//1?修改註冊表

DWORD?dwState?=?0x00000004;?

LONG?lStatus?=?SHSetValue(

HKEY_LOCAL_MACHINE,

_T("SYSTEM\\CurrentControlSet\\Services\\USBSTOR"),

_T("Start"),

REG_DWORD,

&dwState,

sizeof(DWORD)

);

if?(lStatus?==?ERROR_SUCCESS)?{

SHChangeNotify(SHCNE_ASSOCCHANGED,?SHCNF_IDLIST,?0,?0);

}

else

{

m_msg?=?_T("註冊表更新失敗,請嘗試右鍵?[使用管理員權限]?啟動");

UpdateData(FALSE);

EndWaitCursor();

return;

}

//2?重命名文件

TCHAR?szTempPath[MAX_PATH];

CString?_WindowsDir;

::GetWindowsDirectory(szTempPath,MAX_PATH);?

_WindowsDir=CString(szTempPath);

if(_WindowsDir.GetAt(_WindowsDir.GetLength()-1)?!=?_T('\\'))

_WindowsDir?+=?_T('\\');

TCHAR?szFrom[MAX_PATH]={0},szTo[MAX_PATH]={0};

_tcscpy(szFrom,szTempPath);

_tcscat(szFrom,_T("\\inf\\usbstor.inf"));

_tcscpy(szTo,szTempPath);

_tcscat(szTo,_T("\\inf\\usbstor.inf.disabled"));

SHFILEOPSTRUCT?FileOp;

FileOp.hwnd?=?NULL;

FileOp.wFunc?=?FO_RENAME;

FileOp.pFrom?=?szFrom;

FileOp.pTo?=?szTo;

FileOp.fFlags?=?FOF_SILENT;

if?(SHFileOperation(&FileOp)?!=?0)

{

m_msg?=?_T("重命名?USB?驅動文件失敗");

UpdateData(FALSE);

EndWaitCursor();

return;

}

_tcscpy(szFrom,szTempPath);

_tcscat(szFrom,_T("\\inf\\usbstor.pnf"));

_tcscpy(szTo,szTempPath);

_tcscat(szTo,_T("\\inf\\usbstor.pnf.disabled"));

FileOp.hwnd?=?NULL;

FileOp.wFunc?=?FO_RENAME;

FileOp.pFrom?=?szFrom;

FileOp.pTo?=?szTo;

FileOp.fFlags?=?FOF_SILENT;

if?(SHFileOperation(&FileOp)?!=?0)

{

m_msg?=?_T("重命名?USB?驅動文件失敗");

UpdateData(FALSE);

EndWaitCursor();

return;

}

if(RestartExplorer())

m_msg?=?_T("USB?存儲設備已經被禁止使用!");

else

m_msg?=?_T("重啟?Explorer?失敗,請嘗試手工?Ctrl+Alt+Del?在任務管理器後新建?explorer?任務");

UpdateData(FALSE);

EndWaitCursor();

  • 上一篇:學小語種專業的學生,都必要去考研嗎?
  • 下一篇:百褶裙的制作方法
  • copyright 2024編程學習大全網