Создание разделов реестра

октября 12 2009 by admin in Администрирование

Функция RegCreateKeyEx позволяет создавать разделы реестра и получать описатели разделов. Но в отличие от RegOpenKeyEx она не закончит свое выполнение с ошибкой, если выбранный раздел не существует. Вместо этого RegCreateKeyEx попытается создать новый раздел под предложенным названием. RegCreateKeyEx объявлена так-.
LONG RegCreateKeyEx( HKEY hkeyRoot, PCTSTR pszSubKey, DWORD Reserved, PTSTR pszClass, DWORD dwOptions, REGSAM samDesired, PSECURITY_ATTRIBUTES psa, PHKEY phkResult, PDWORD pdwDisposition);
Наверняка вы узнали параметры hkeyRoot, pszSubKey, samDesired vs.phkResult из RegOpenKeyEx. Они применяются точно так же, как и в RegCreateKeyEx, но за одним исключением-, если раздела, указанного в параметре pszSubKey нет, система попытается создать новый подраздел и, таким образом, выполнить запрос.
Помимо уже знакомых, у RegCreateKeyEx есть параметр pszClass, который указывает на оканчивающуюся нулем строку, содержащую название класса раздела. Название класса зарезервировано, поэтому в качестве этого параметра всегда передавайте NULL.
Параметр dwOptions может содержать любое из значений, описанных ниже .
Параметр psa указывает на структуру типа SECURITY_ATTRIBUTES, позволяющую определять права доступа к созданному подразделу. Если подраздел уже есть, информация дескриптора защиты игнорируется.
Обычно разделы реестра постоянные (nonvolatile). Временные данные всегда удаляются при перезагрузке компьютера. Временные разделы позволяют избежать захламления реестра временными разделами. Их можно использовать для эффективного обмена данными между процессами — такая связь работает даже в случае процессов, выполняющихся на разных компьютерах, ведь возможен и удаленный доступ к реестру. (См. описание RegConnectRegistry в разделе «Удаленный доступ к реестру».)
Параметр pdwDisposition является указателем на переменную типа DWORD, заполняемую системой одним из двух значений: REG_CREATED_NEW_KEY или REG_OPENED_EXISTING_KEY. Проанализировав эту переменную, можно определить, что было сделано функцией: создан новый подраздел или открыт существующий. Как правило, вашим программам такая информация не нужна, поэтому в качестве последнего параметра в RegCreateKeyEx можно передать NULL.
Именно из-за того, что система может сразу создать новый раздел реестра, для создания и открытия разделов конфигурационных данных применяют в основном RegCreateKeyEx. Используя ее, приложение может восстановить нужную информацию о своих параметрах, заполнив их данными по умолчанию, если раздел реестра был удален, что любознательные администраторы время от времени и делают.
Независимо от того, как вы получили описатель открытого ключа реестра — вызвав RegCreateKeyEx или RegOpenKeyEx — по завершении работы его следует передать в функцию RegCloseKey-.
LONG RegCloseKey(HKEY hkey);