Sprawdzanie, czy istnieje klucz rejestru

Szukam czystego sposobu sprawdzenia, czy istnieje klucz rejestru. Przyjąłem toRegOpenKey nie powiedzie się, jeśli spróbuję otworzyć klucz, który nie istniał, ale nie działa.

Mógłbym użyć przetwarzania łańcuchowego, aby znaleźć i otworzyć klucz nadrzędny tego, którego szukam, a następnie wyliczyć podklucze tego klucza, aby dowiedzieć się, czy ten, który mnie interesuje, istnieje, ale wydaje się, że oba są jak świnia wydajności i dziwny sposób na wdrożenie tak prostej funkcji.

Zgaduję, że możesz użyćRegQueryInfoKey jakoś tak, ale MSDN nie podaje zbyt wielu szczegółów, nawet jeśli jest to możliwe.

Aktualizacja: Potrzebuję rozwiązania w Win32 api, a nie w kodzie zarządzanym, .NET lub w innej bibliotece.

Dokumenty w MSDN wydają się wskazywać, że powinieneś być w stanie otworzyć klucz do uprawnienia do odczytu i uzyskać błąd, jeśli nie istnieje, tak jak poniżej:

lResult = RegOpenKeyEx (hKeyRoot, lpSubKey, 0, KEY_READ, &hKey);

if (lResult != ERROR_SUCCESS) 
{
    if (lResult == ERROR_FILE_NOT_FOUND) {

Jednak rozumiemERROR_SUCCESS kiedy to spróbuję.

Aktualizacja 2: Mój dokładny kod to:

HKEY subKey = nullptr;
LONG result = RegOpenKeyEx(key, subPath.c_str(), 0, KEY_READ, &subKey);
if (result != ERROR_SUCCESS) {

... aleresult jestERROR_SUCCESS, mimo że próbuję otworzyć klucz, który nie istnieje.

Aktualizacja 3: Wygląda na to, że macie rację. To nie powiedzie się na jednym konkretnym przykładzie testu (w tajemniczy sposób). Jeśli spróbuję na innym kluczu, zwraca poprawny wynik. Podwójne sprawdzenie za pomocą edytora rejestru nadal nie pokazuje klucza. Nie wiem, co z tym wszystkim zrobić.

questionAnswers(3)

yourAnswerToTheQuestion