监视注册表,,枚举注册表项

来源:互联网 发布:笨办法学python视频 编辑:程序博客网 时间:2024/05/22 00:32

创建注册表项:

 

 

       lRet = RegOpenKeyEx(HKEY_CURRENT_USER,
                _T("Software//hrjd//AscPatch"),
                0,
                KEY_ALL_ACCESS,
                &hKey);
            if (lRet != ERROR_SUCCESS)
            {
                lRet = RegCreateKeyEx(HKEY_CURRENT_USER,
                    _T("Software//hrjd//AscPatch"),
                    0,
                    NULL,
                    REG_OPTION_VOLATILE, // 不永久变更,机器重启后,内容就消失
                    KEY_ALL_ACCESS,
                    NULL,
                    &hKey,
                    NULL);
            }
            WAIFAINFO info;

                lRet = RegSetValueEx(hKey,
                                    strKey,
                                    0,
                                    REG_BINARY, // 结构体类型的数据,以二进制形式写入,不能以REG_SZ方式,那样只能写入一个字段
                                    (CONST BYTE*) &info,
                                    sizeof(WAIFAINFO));
               
                RegCloseKey(hKey);

            }

 

监视注册表,枚举注册表项下的键值

    HANDLE hEvent = NULL;
    HKEY hKey = NULL;   
    DWORD dwNotifyFilter = REG_NOTIFY_CHANGE_NAME |
                            REG_NOTIFY_CHANGE_ATTRIBUTES |
                            REG_NOTIFY_CHANGE_LAST_SET |
                            REG_NOTIFY_CHANGE_SECURITY;

    hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

    while (ERROR_SUCCESS != RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software//hrjd//AscPatch"), 0, KEY_NOTIFY|KEY_READ|KEY_ENUMERATE_SUB_KEYS, &hKey))// 要注意访问权限
    {
        RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software//hrjd//AscPatch"), 0, KEY_NOTIFY|KEY_READ|KEY_ENUMERATE_SUB_KEYS, &hKey);

        Sleep(10);
    }

    RegNotifyChangeKeyValue(hKey, TRUE, dwNotifyFilter, hEvent, TRUE);

    while (TRUE)
    {
        if (WAIT_OBJECT_0 == WaitForSingleObject(hEvent, INFINITE))
        {
            TCHAR szValue[64];
            DWORD dwIndex = 0, dwValue = 64; //dwValue要有初始值
            CString strLastTime, strPeerAddress, strValue;

            memset(szValue, 0x00, sizeof(szValue));

            while (ERROR_NO_MORE_ITEMS != RegEnumValue(hKey, dwIndex, szValue, &dwValue, NULL, NULL, NULL, NULL))
            {// RegEnumKeyEx用于枚举子项,RegEnumValue用于枚举键
                CString strRead, strTime, strTmp;       

                strRead = szValue;

                strTime = strRead.Left(19);
               
                if (strTime > strLastTime)
                {
                    strLastTime = strTime;

                    strPeerAddress = strRead.Right(strRead.GetLength() - 20);

                    strValue = strRead;
                }

                memset(szValue, 0x00, sizeof(szValue)); // 注意重置参数值
                dwValue = 64;

                dwIndex++; // 下一个
            }



            }

            RegCloseKey(hKey);

            RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software//hrjd//AscPatch"), 0,  KEY_NOTIFY|KEY_READ|KEY_ENUMERATE_SUB_KEYS, &hKey);// 继续监视
            RegNotifyChangeKeyValue(hKey, TRUE, dwNotifyFilter, hEvent, TRUE);
       
            ResetEvent(hEvent);
        }

        Sleep(1000);
    }

原创粉丝点击