Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 176


Знать функцию и ее аргументы - это хорошо. Но какой от функции и аргументов прок, если мы не умеем пользоваться функцией? Для того чтобы перебрать подключи, приложение должно сначала вызвать функ­цию RegEnumKeyExQ со вторым аргументом (dwlndex), равным нулю (поиск начинается с начала дерева). Если искомый ключ найден с первой попытки, то приложению повезло. В противном случае необходимо dwlndex увеличить на единицу и снова обратиться к функции. Так необ­ходимо делать до тех пор, пока не будет найден искомый ключ или функция не вернет значение ERROR_NO_MORE ITEMS. Естественно, что поиск можно производить и в обратном порядке. Для того чтобы поиск мог быть нормально осуществлен, ключ, хэндл которого указан первым аргументом, должен быть открыт с правом доступа KEY__ENUMERATE_SUB_KEYS. Если функция выполнена успешно, то она возвращает значение ERROR SUCCESS. Любое другое возвращен­ное значение является кодом ошибки. Кстати, получить полную инфор­мацию о подключе можно с помощью функции RcgQueryInfoKey().

Давайте считать, что с помощью способа, описанного выше, мы пере­брали подключи и нашли нужный нам подключ. Теперь в этом подключе нам необходимо найти нужные данные. Способ поиска точно такой же, как и в предыдущей функции. Для поиска необходимо перебрать все данные, связанные с подключом. Чтобы произвести этот перебор, обычно используется функция RegEnumVa!ue(). описание которой, приведенное ниже, можно найти в файле winreg.h:

WINADVAPI LONG APIENTRY KegEnumValueA (HKEY hKey,

DWORD dwlndex.

211

LPSTR IpValueName, LPDWORD IpcbValueName, LPDWORD IpReserved, LPDWORD IpType, LPBYTE IpData. LPDWORD IpcbData); WINADVAPI LONG APIENTRY RegEnumValueW (HKEY hKey,

DWORD dwlndex, LPWSTR IpValueName, LPDWORD IpcbValueName, LPDWORD IpReserved, LPDWORD IpType, LPBYTE IpDala, LPDWORD IpcbData); flifdefUNICODE

#defme RegEnumValue RegEnumValueW

#else

#defme RegEnum Value RegEnum ValueA

#endif// IUNICODE

Порядок использования этой функции полностью совпадает с поряд­ком использования функции RegEnumKeyEx(), поэтому я не стану на нем останавливаться. Опишу только аргументы этой функции. Понятно, что hKey - это хэндл ключа, которому принадлежит подключ, индекс которо­го представлен вторым аргументом - dwlndex. Следующий аргумент -указатель на буфер, в который будет записано имя подключа. IpcbValueName определяет размер этого буфера. Аргумент IpReserved зарезервирован и должен быть равным NULL. Последние три аргумента определяют класс подключа, указатель на буфер, в который будут запи­саны эти данные и размер буфера. После возврата функции предпослед­ний аргумент содержит число записанных данных.




Начало  Назад  Вперед



Книжный магазин