Поиск ключей реестра x32 из программы x64 - PullRequest
0 голосов
/ 10 февраля 2012

Я пишу приложение на C # для x64, и моя проблема в том, что Я ищу в реестре некоторые ключи, которые содержат определенные ключевые слова , и я могу только искать в реестре x64 приложения из-за перенаправления реестра.
Мне удалось найти какой-то код в сети, но я действительно не знаю, что с ним делать, потому что, насколько я понимаю, это работает, только если я знаю точное имя ключа, когда я ищу шаблоны или ключевые слова. [DllImport ("advapi32.dll", EntryPoint = "RegOpenKeyEx")] public static extern int RegOpenKeyEx_DllImport ( UIntPtr hKey, строка subKey, варианты uint, Int Sam, out IntPtr phkResult);

    [DllImport("advapi32.dll", EntryPoint = "RegQueryValueEx")]
    static extern int RegQueryValueEx_DllImport(
        IntPtr hKey,
        string lpValueName,
        int lpReserved,
        out uint lpType,
        System.Text.StringBuilder lpData,
        ref uint lpcbData);

public string GetKeyValue(string strSubKey, string strKey)
    {

        UIntPtr HKEY_LOCAL_MACHINE = (UIntPtr)0x80000002;
        const int KEY_WOW64_32KEY = 0x0200;
        const int KEY_QUERY_VALUE = 0x1;

        IntPtr hKeyVal;
        uint lpType;
        uint lpcbData = 0;
        System.Text.StringBuilder pvData = new System.Text.StringBuilder(1024);
        int valueRet;



        string returnPath = String.Empty;
        unchecked
        {
            try
            {   //Open the required key path
                valueRet = RegOpenKeyEx_DllImport(HKEY_LOCAL_MACHINE, strSubKey, 0, KEY_QUERY_VALUE | KEY_WOW64_32KEY, out hKeyVal);

                //Retreive the key value
                valueRet = RegQueryValueEx_DllImport(hKeyVal, strKey, 0, out lpType, pvData, ref lpcbData);

                valueRet = RegQueryValueEx_DllImport(hKeyVal, strKey, 0, out lpType, pvData, ref lpcbData);

                returnPath = pvData.ToString();
            }
            catch (Exception e)
            {
                throw (e);
            }
        }
        return returnPath;
    }

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Если вы ориентируетесь на .net 4, есть новое дополнение, позволяющее указывать 32-битный реестр в управляемом коде. Вы используете OpenBaseKey , указывая соответствующий RegistryView.

0 голосов
/ 10 февраля 2012

Вы пробовали использовать LogParser?Вот пример того, как использовать его для запроса реестра.

https://stackoverflow.com/a/295265/977292

...