Там на самом деле нет рекурсии.Код просто открывает ключ в 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 для всех кровавых подробностейкак получить доступ к реестру.