注册表API

注册表

1 常用的函数调用

注意:
0 不含Ex的都是16位版本。
1 写SubKey时一般选择打开注册表进行复制,要不很容易出错。
2 SubKey前面没有\\。
3 成功返回ERROR_SUCCESS(0),失败返回非0,用GetLastError()获取错误码。
4 当ret是161,ErrCode为2的时候:可能是Subkey写错了。
5 网络:在使用这个函数RegOpenKeyEx的时候,老是执行不成功,函数本身返回2,GetLastError返回0。
        在CSDN上查阅资料说是返回2的原因是注册表中对应路径不存在,可是我电脑中注册表那个键值明明
        存在的。就这样慢慢调试,换个键值查询,用VC6、VS2010(本来是用vs2008),可是在vc6下不管查询什麽简
        直都能成功,折腾了半天时间,最后还是不行。最后在分析代码的时候,觉得代码有问题,于是终于发现了:我用的是TCHAR!!
        而且函数我用的是RegOpenKeyExA!!!原因就在这里!!!所以我觉得RegOpenKeyEx返回2的
        原因一是路径真的不存在,二是参数错误,三可能是权限问题(这个我没遇到)。 
6 RegQueryValueEx:
    if the lpdatabuffer is too small to receive the data,returns ERROR_MORE_DATA.
    if the lpvalueName  register value dose not exist,return ERROR_FILE_NOT_FOUND.
    若有两次调用,第一次计算需要的大小。
7 RegSetValueEx:
    lpdata:为null value is valid,同时cbdata must be to set '0'.
    https://msdn.microsoft.com/en-us/library/ms724923(VS.85).aspx
    RegSetValueEx(hKey, TEXT("test"), 0, REG_SZ, (LPBYTE)TEXT("test.dll"), 256); cbData不能太大,否则很可能把lpData指向的内容之外的其他字符也写入注册表中。导致错误发生。
    RegSetValueEx(hKey, TEXT("test"), 0, REG_SZ, (LPBYTE)szTest, sizeof(TCHAR)*iLen );  
    http://blog.csdn.net/tracyzhongcf/article/details/4076870
8 

2代码

DWORD DelRegister()
{

    HKEY pHeyRet = NULL;
    char cSubKey[MAX_PATH] = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon";  //  
    BOOL bRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, cSubKey, 0,
        KEY_WRITE|KEY_READ, &pHeyRet);
    char cShell[100] = "explorer.exe";
    if (ERROR_SUCCESS == bRet )
    {
        // 设置键值
        RegSetValueExA(pHeyRet, "shell", 0, REG_SZ, (PBYTE)cShell,100);
        RegCloseKey(pHeyRet);
    }

    bRet = RegOpenKeyExA(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows", 0,
        KEY_ALL_ACCESS, &pHeyRet);
     if (ERROR_SUCCESS == bRet)
     {
        // 删除键值
         RegDeleteValueA(pHeyRet, "run");
         RegCloseKey(pHeyRet);
     }

     bRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Tracing", 0,
         KEY_ALL_ACCESS, &pHeyRet);
     if (ERROR_SUCCESS == bRet)
     {
        // 删除子键 
         RegDeleteKeyExA(pHeyRet, "blackice_RASAPI32", KEY_WOW64_32KEY, 0);
         RegDeleteKeyExA(pHeyRet, "blackice_RASMANCS", KEY_WOW64_32KEY, 0);
         RegCloseKey(pHeyRet);
     }

     bRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Tracing", 0,
         KEY_ALL_ACCESS, &pHeyRet);
     if (ERROR_SUCCESS == bRet)
     {
         RegDeleteKeyExA(pHeyRet, "blackice_RASAPI32", KEY_WOW64_32KEY, 0);
         RegDeleteKeyExA(pHeyRet, "blackice_RASMANCS", KEY_WOW64_32KEY, 0);
         RegCloseKey(pHeyRet);
     }

     DWORD dwData_level = 4;
     DWORD dwData_AccessVB = 0;
     bRet = RegOpenKeyExA(HKEY_CURRENT_USER, " Software\\Microsoft\\Office\\12.0\\Word\\security", 0,
         KEY_ALL_ACCESS, &pHeyRet);

     if (ERROR_SUCCESS == bRet)
     {
         RegSetValueExA(pHeyRet, "Level", 0, REG_DWORD, (PBYTE)&dwData_level, 4);
         RegSetValueExA(pHeyRet, "AccessVBOM", 0, REG_DWORD, (PBYTE)&dwData_AccessVB, 4);
         RegCloseKey(pHeyRet);
     }

     bRet = RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Office\\12.0\\Excel\\security", 0,
         KEY_ALL_ACCESS, &pHeyRet);
     if (ERROR_SUCCESS == bRet)
     {
         RegSetValueExA(pHeyRet, "Level", 0, REG_DWORD, (PBYTE)&dwData_level, 4);
         RegSetValueExA(pHeyRet, "AccessVBOM", 0, REG_DWORD, (PBYTE)&dwData_AccessVB, 4);
         RegCloseKey(pHeyRet);
     }

     bRet = RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Office\\12.0\\Word\\Options", 0,
         KEY_ALL_ACCESS, &pHeyRet);
     char cBook[MAX_PATH];
     DWORD dwcbData = 0;
     DWORD dwTyep = 0;
     if (ERROR_SUCCESS == bRet)
     {
        // 获取键值
         if (ERROR_MORE_DATA == RegQueryValueExA(pHeyRet, "STARTUP-PATH", 0, &dwTyep, (PBYTE)cBook, &dwcbData))
         {
             RegQueryValueExA(pHeyRet, "STARTUP-PATH", 0, &dwTyep, (PBYTE)cBook, &dwcbData);
         }
         RegCloseKey(pHeyRet);
         if (cBook)
         {
             printf("111");
             strcat_s(cBook, "\\book1.xls");
             DelVirFile(cBook);
             printf("222");
             system("pause");
         }
     }

     return 1;
}

3枚举子键..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值