可以通过修改注册表来打开 U 盘的写保护功能。比如在 XP 下面,当你复制一个文件到 USB 磁盘上时,会看到类似下面的错误提示:
若是在 VISTA 或 WIN7 下同样会看到:
实际上是修改了 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\StorageDevicePolicies 下的键值 WriteProtect 的值为 1 的缘故。在默认情况下,可能没有 StorageDevicePolicies 这个子键,我们可以自行添加。如果要恢复 USB 磁盘的写功能,那么将 WriteProtect 的值设置为 0 。
下面用程序来实现这个功能:
[C++] 纯文本查看 复制代码 // UProtector.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>
#include <winreg.h>
int protecter(DWORD dw, HKEY hKey)
{
HKEY hSubKey;
RegCreateKeyEx(hKey, _T("StorageDevicePolicies"), 0, NULL, NULL, KEY_READ | KEY_WRITE, NULL, &hSubKey, NULL);
if (ERROR_SUCCESS != RegSetValueEx(hSubKey, _T("WriteProtect"), NULL, REG_DWORD, (const byte *)&dw, sizeof(DWORD)))
return 0;
else
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int flag = 0;
DWORD lck;
if (argc != 2 || (_tstoi(argv[1]) != 0 && _tstoi(argv[1]) != 1) ) {
_tprintf(_T("Usage: DiskLock.exe 0 | 1\n"));
exit (EXIT_FAILURE);
}
HKEY hSDP;
if ( RegOpenKeyEx ( HKEY_LOCAL_MACHINE,
_T("SYSTEM\\CurrentControlSet\\Control"),
0, KEY_READ | KEY_WRITE, &hSDP
) == ERROR_SUCCESS )
{
lck = _tstoi(argv[1]);
flag = protecter(lck, hSDP);
if(flag && lck == 1) {
_tprintf(_T("Lock disk Successful!\n"));
exit(EXIT_SUCCESS);
}
else if (flag && lck == 0) {
_tprintf(_T("Unlock disk Successful!\n"));
exit(EXIT_SUCCESS);
}
if (flag == 0 && lck == 1) {
_tprintf(_T("Lock disk Failure!\n"));
exit(EXIT_FAILURE);
}
else if (flag == 0 && lck == 0) {
_tprintf (_T("Unlock disk failure!\n"));
exit(EXIT_FAILURE);
}
}
else {
_tprintf(_T("Can not access to registry key\n"));
exit(EXIT_FAILURE);
}
return 0;
}
运行方法:
接参数 1 时启动写保护,0 时解锁。 |