Как получить доступ к реестру и просмотреть ключи в C (пример кода C # предоставлен)? - PullRequest
3 голосов
/ 28 января 2012

Я в основном хочу выполнить те же функции, что и этот код, но в C.

RegistryKey regAdapters = Registry.LocalMachine.OpenSubKey ( AdapterKey, true);
    string[] keyNames = regAdapters.GetSubKeyNames();
    char[] devGuid;
    foreach(string x in keyNames)
    {
        RegistryKey regAdapter = regAdapters.OpenSubKey(x);
        object id = regAdapter.GetValue("ComponentId");
        if (id != null && id.ToString() == "tap0801") devGuid = regAdapter.GetValue("NetCfgInstanceId").ToString();
    }

1 Ответ

5 голосов
/ 28 января 2012

Там на самом деле нет рекурсии.Код просто открывает ключ в HKLM, перечисляет все вложенные ключи и ищет определенное именованное значение.В общих чертах, ваш код на C был бы составлен из этих вызовов Win32 API:

HKEY hRegAdapters;
LONG res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AdapterKey, 0,
  KEY_READ, &hRegAdapters);
// error checking by testing res omitted

Теперь, когда вы открыли ключ, вы можете перечислить подключи:

for (DWORD Index=0; ; Index++)
{
    char SubKeyName[255];
    DWORD cName = 255;
    LONG res = RegEnumKeyEx(hRegAdapters, Index, SubKeyName, &cName, 
        NULL, NULL, NULL, NULL);
    if (res != ERROR_SUCCESS)
        break;
    // do something with Name
}

Теперь, когда выимя каждого подключа, вы можете прочитать значения с помощью RegGetValue:

char Value[64];
DWORD cbData = 64;
LONG res = RegGetValue(hSubKey, SubKeyName, "ComponentId",
    RRF_RT_REG_SZ, NULL, Value, &cbData);
// check for errors now before using Value

RegGetValue - это удобная функция, добавленная в Vista.Если вам нужен код для запуска в XP, вам нужно будет вместо этого позвонить RegQueryValueEx.Для этого нужно сначала открыть подраздел "ComponentId".

Обратите внимание, что я пропустил все проверки ошибок, а также проигнорировал проблему Unicode и назвал API-интерфейсы ANSI.Я оставлю все эти детали для вас.

Не забудьте позвонить RegCloseKey(hRegAdapters), когда вы закончите.

Обратитесь к документации MSDN для всех кровавых подробностейкак получить доступ к реестру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...