曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3602|回复: 0
打印 上一主题 下一主题

USB 磁盘写保护

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2013-4-18 23:54:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可以通过修改注册表来打开 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 时解锁。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-3 00:34 , Processed in 0.078534 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表