Я написал программу, которая создает следующий раздел в реестре Windows:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
Я написал вторую программу, которая отменяет действия моей первой программы. Вторая программа должна проверить, содержит ли подраздел дополнительные подразделы или значения, прежде чем подраздел будет удален. Если подраздел не содержит дополнительных подразделов или значений, он будет удален.
Как я могу проверить, содержит ли подраздел какие-либо подразделы или значения?
использование RegQueryInfoKey()
:
Получает информацию об указанном разделе реестра.
Среди множества различных параметров, которые он может выводить, у него есть два полезных параметра:
lpcSubKeys [опционально] Указатель на переменную, которая получает количество подключей, содержащихся в указанном ключе. Этот параметр может быть НЕДЕЙСТВИТЕЛЕН.
lpcValues [опционально] Указатель на переменную, которая получает количество значений, связанных с ключом. Этот параметр может быть НЕДЕЙСТВИТЕЛЕН.
С учетом сказанного, обратите внимание, что RegDeleteKey()
потерпит неудачу, если указанный ключ имеет какие-либо подразделы, но не если он имеет какие-либо значения. Таким образом, вам действительно не нужно проверять наличие подразделов вообще, только для значений. Пусть функция нормально завершится с ошибкой, если отсутствуют значения.
Еще более простым решением является использование SHDeleteEmptyKey()
вместо этого произойдет сбой, если ключ имеет какие-либо подразделы или значения. Тогда вам не нужно проверять вручную вообще.
RegEnumKeyEx
Перечисляет подключи.RegEnumValue
перечисляет значения.