一、使用Vc++下 的MFC框架实现此功能
1.如何禁用U盘
网上给出的答案是通过修改注册表可以禁用U盘;
详细步骤:
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR
- 修改start值为4
参考: https://jingyan.baidu.com/article/22fe7ced747ab37002617fe2.html
2.如何利用VC++调用WindowsAPI接口实现
先看看可能用到哪些Windows API:
-
RegOpenKeyExA
-
RegCreateKeyA
LSTATUS RegCreateKeyA(
HKEY hKey,
LPCSTR lpSubKey,
PHKEY phkResult
); -
RegSetValueEx
-
RegSetKeyValueA
LSTATUS RegSetKeyValueA(
HKEY hKey,
LPCSTR lpSubKey,
LPCSTR lpValueName,
DWORD dwType,
LPCVOID lpData,
DWORD cbData
);
MSDN搜索(没有例子我感觉学习起来不是很有效的,可能我还没发现它更多的功能吧)
CSDN搜索,网上有专门讲这几个函数的。
3.代码应用
首先要了解修改注册表的过程,首先就是获取密钥,CreatKey函数(这里简写了)这样就相当于获取访问注册表项的区权利,然后可以调用setKeyValue函数修改对应键值。
代码实现:
void CMFCUSBDlg::OnBnClickedCloseu()
{
long lRet;
HKEY hKey;
lRet = RegCreateKey(
HKEY_LOCAL_MACHINE,
_T("SYSTEM\\CurrentControlSet\\Services\\USBSTOR"),
&hKey
);
DWORD KeyValue = 4;
if (lRet == ERROR_SUCCESS)
{
//MessageBox(_T("right"), _T("Prompt"), MB_OK);
lRet = RegSetKeyValue(HKEY_LOCAL_MACHINE,
_T("SYSTEM\\CurrentControlSet\\Services\\USBSTOR"),
_T("Start"),
REG_DWORD,
(LPBYTE)&KeyValue,
sizeof(DWORD)
);
if (lRet == ERROR_SUCCESS)
{
MessageBox(_T("禁用成功"), _T("Prompt"), MB_OK);
}
else
{
MessageBox(_T("禁用失败,请检查您的权限"), _T("Prompt"), MB_OK);
}
RegCloseKey(hKey);
}
else {
MessageBox(_T("权限不足"), _T("Prompt"), MB_OK);
RegCloseKey(hKey);
}
}
你以为这样就完了吗,非也非也
必须具有足够的权限才可以修改注册表(别问我是怎么知道的),但是即使没有管理员权限HKEY_CURRENT_USER下的注册表项也都可以进行修改,所以保证代码没有错误的前提下,需要以管理员权限运行VS才可修改对应键值。
示例图:
二、总结
多谢以下大佬的文章以及还有qq与zx的答疑解惑;
注册表的操作:
https://www.cnblogs.com/zhaoyixiang/p/12983823.html
如何设置DWORD值
https://zhidao.baidu.com/question/1046050784719513299.html