如何检查给定路径是否存在于注册表中



实际上我有 Path= Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run ,并且Software\Microsoft\Windows\CurrentVersion\Run并且我正在传递根密钥作为我从中获取子项的HKEY_USESRS.然后我正在连接子项+路径.....在循环中,我也得到了HKEY_USERSS-1-5-19SoftwareWow6432NodeMicrosoftWindowsCurrentVersionRun实际上注册表中不存在的内容......是否有任何功能可以检查完整路径是否存在?

listData.RemoveAll();
        HKEY hrKey=HKEY_USERS,hKey; 
        if(hrKey==HKEY_USERS)
        {
            TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
            DWORD    cbName;                   // size of name string 
            TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
            DWORD    cchClassName = MAX_PATH;  // size of class string 
            DWORD    cSubKeys=0;               // number of subkeys 
            DWORD    cbMaxSubKey;              // longest subkey size 
            DWORD    cchMaxClass;              // longest class string 
            DWORD    cValues;              // number of values for key 
            DWORD    cchMaxValue;          // longest value name 
            DWORD    cbMaxValueData;       // longest value data 
            DWORD    cbSecurityDescriptor; // size of security descriptor 
            FILETIME ftLastWriteTime;      // last write time  
            DWORD i, retCode; 
            // Get the class name and the value count. 
        retCode = RegQueryInfoKey(hrKey,                    // key handle 
                             achClass,                // buffer for class name 
                            &cchClassName,           // size of class string 
                            NULL,                    // reserved 
                            &cSubKeys,               // number of subkeys 
                            &cbMaxSubKey,            // longest subkey size 
                            &cchMaxClass,            // longest class string 
                            &cValues,                // number of values for this key 
                            &cchMaxValue,            // longest value name 
                            &cbMaxValueData,         // longest value data 
                            &cbSecurityDescriptor,   // security descriptor 
                            &ftLastWriteTime);       // last write time 
            if (cSubKeys)
            {
                for (i=0; i<cSubKeys; i++) 
                { 
                    cbName = MAX_KEY_LENGTH;
                    retCode = RegEnumKeyEx(hrKey, i,achKey,&cbName,NULL,NULL,NULL,&ftLastWriteTime); 
                    if (retCode == ERROR_SUCCESS) 
                    {
                        CString subKey=achKey;
                        if(subKey!=_T(".DEFAULT")&&(subKey.Mid(subKey.ReverseFind('_')+1)!=_T("Classes")))
                        {                               
                            csRegistryPath=subKey+_T("\")+csRegistryPath;
                            CLog::Log( csRegistryPath);
                        }
                    }
                }
            } 

csRegistryPath 是调用函数中的数组,那么一旦我将获得S-1-5-19SoftwareMicrosoftWindowsCurrentVersionRun并根据此路径S-1-5-19SoftwareWow6432NodeMicrosoftWindowsCurrentVersionRunOnce我正在执行进一步的操作,但实际上HKEY_USERS\S-1-5-19\软件\Wow6432Node\Microsoft\Windows\当前版本\运行注册表中不存在一次,如果获取此路径,我需要检查它是否存在? 要做到这一点,是否有任何API

对于 Win32 API 解决方案,您可以使用RegOpenKeyEx来测试密钥是否存在。

请注意,您不得对Wow6432Node进行硬编码。使用 KEY_WOW64_32KEY 标志指定要在注册表的 32 位视图中查看。

你会想通过

STANDARD_RIGHTS_READ | KEY_WOW64_32KEY

RegOpenKeyExsamDesired论点.

相关内容

  • 没有找到相关文章

最新更新