@@ -61,7 +61,15 @@ if ($Data(%request.Data("subkey", 1)) && $Data(%request.Data("param", 1))) {
6161 // Получаем значание дескриптора ключа из буфера
6262 set hkey = advapi.PointerGetAt(phkey, advapi.#ULONG, 0)
6363
64-
64+ // Получаем значение подключа реестра
65+ // Прототип функции: LONG RegGetValueA(HKEY hkey, LPCSTR lpSubKey, LPCSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPWWORD pcbData);
66+ // hkey - дескриптор ключа, тип unsigned long
67+ // lpSubKey - строка с именем подключа, тип char *
68+ // dwFlags - флаг ограничения на тип значения ключа, Oxffff означает, что никаких ограничений нет
69+ // pdwType - указатель на буфер, куда записывается тип данных этого подключа. Нам это не нужно, поэтому передаем NULL
70+ // pvData - указатель на буфер, куда записывается искомое значение
71+ // pcbData - указатель на переменную, где хранится размер буфера pvData
72+
6573 set argTypes = $lb(advapi.#ULONG, advapi.#POINTER, advapi.#POINTER, advapi.#ULONG, advapi.#POINTER, advapi.#POINTER, advapi.#POINTER)
6674 set pSubkey = advapi.ConvertStringToPointer(subkey)
6775 set pParam = advapi.ConvertStringToPointer(param)
@@ -73,6 +81,8 @@ if ($Data(%request.Data("subkey", 1)) && $Data(%request.Data("param", 1))) {
7381 w "<b><font color='red'>RegGetValue Error: " _ res _ "</font></b>"
7482 }
7583
84+
85+ // Выгружаем библиотеки и освобождаем выделенную память
7686 do advapi.FreeLibrary()
7787 set argTypes = $lb(libc.#POINTER)
7888 do libc.CallFunction("free", libc.#VOID, argTypes, phkey)
0 commit comments