Начинающий
- Статус
- Оффлайн
- Регистрация
- 17 Фев 2025
- Сообщения
- 55
- Реакции
- 3
На ебать, вроде воркает.Какие существуют способы получения значений из редактора реестра? Или как можно запустить скрипт для извлечения информации по указанному пути в реестре?
lua:
local ffi = require "ffi"
-- Определяем необходимые WinAPI-функции
ffi.cdef[[
typedef void* HKEY;
typedef unsigned long DWORD;
typedef const char* LPCSTR;
typedef char* LPSTR;
typedef long LONG;
LONG RegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, DWORD samDesired, HKEY* phkResult);
LONG RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, DWORD* lpReserved, DWORD* lpType, LPSTR lpData, DWORD* lpcbData);
LONG RegCloseKey(HKEY hKey);
]]
local HKEY = {
CURRENT_USER = ffi.cast("HKEY", 0x80000001),
LOCAL_MACHINE = ffi.cast("HKEY", 0x80000002),
}
local KEY_READ = 0x20019
local REG_SZ = 1
-- Функция для чтения строки из реестра
function readRegistryString(hKey, subKey, valueName)
local phkResult = ffi.new("HKEY[1]")
local ret = ffi.C.RegOpenKeyExA(hKey, subKey, 0, KEY_READ, phkResult)
if ret ~= 0 then return nil, "Ошибка открытия ключа" end
local lpType = ffi.new("DWORD[1]")
local lpcbData = ffi.new("DWORD[1]")
ret = ffi.C.RegQueryValueExA(phkResult[0], valueName, nil, lpType, nil, lpcbData)
if ret ~= 0 then
ffi.C.RegCloseKey(phkResult[0])
return nil, "Ошибка запроса размера значения"
end
local buffer = ffi.new("char[?]", lpcbData[0])
ret = ffi.C.RegQueryValueExA(phkResult[0], valueName, nil, lpType, buffer, lpcbData)
ffi.C.RegCloseKey(phkResult[0])
if ret ~= 0 then
return nil, "Ошибка чтения значения"
end
return ffi.string(buffer)
end
-- Пример использования
local value, err = readRegistryString(HKEY.CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", "MyApp")
if value then
print("Значение из реестра:", value)
else
print("Ошибка:", err)
end