VC++修改注册表实现禁用开启U盘

一、使用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

猜你喜欢

转载自blog.csdn.net/weixin_44627672/article/details/109430607