• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос [gs] Получение параметров из реестра

  • Автор темы Автор темы VaczZ
  • Дата начала Дата начала
Какие существуют способы получения значений из редактора реестра? Или как можно запустить скрипт для извлечения информации по указанному пути в реестре?
На ебать, вроде воркает.
lua:
Expand Collapse Copy
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
 
На ебать, вроде воркает.
lua:
Expand Collapse Copy
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
ливни нахуй с этой темы когда люди поймут что прямого доступа ффи в ските нет к большинству функций. Да еще и далбаеб using chatgpt codding$$$$
 
[gamesense] .\lua\test.lua:27: missing declaration for symbol 'RegOpenKeyExA'
верим, чатгпт не помог :confounded:
 
эзо с ума сошел и заблокировал половину функций ffi :sob:
но при этом можно вызывать не напрямую функции ффи) чтение реестра сделать можно но сложно, фактично сделал
 
Назад
Сверху Снизу