Создание ключей реестра

Тема в разделе "WASM.BEGINNERS", создана пользователем yuri, 3 май 2008.

  1. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    .386
    .model flat,stdcall
    include \masm32\include\advapi32.inc
    includelib \masm32\lib\advapi32.lib

    .const


    .data?

    HKey dd ?

    .data

    ;_______________
    tbuff1 db 128 dup(0)

    SubKey1 db "Software\имя ключа",0
    file_name db "мой раздел",0


    .code

    создаю ключ

    invoke RegCreateKeyExW, HKEY_CURRENT_USER,addr SubKey1 , 0,0,KEY_ALL_ACCESS,0,0,0, addr HKey

    invoke RegOpenKeyEx, HKEY_CURRENT_USER, addr SubKey2, 0, KEY_ALL_ACCESS, addr HKey

    invoke RegSetValueEx, HKey, addr file_name, 0, REG_SZ, offset file_name,100

    invoke RegCloseKey, HKey


    и считать с него значение


    invoke RegQueryValueExW , HKey ,addr file_name,0,0,offset tbuff1,100


    invoke RegCloseKey, HKey

    end

    Мужики подскажите что не правильно делаю,ну не получается создать собственный ключ в реестре и все.
    Заранее благодарен
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Код (Text):
    1. invoke RegCreateKeyEx,HKEY_CURRENT_USER,ADDR szSubKey,0,ADDR szZero,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,0,ADDR hKey,0
    вот рабочие примеры.

    перед RegQueryValueEx нужно сначала RegOpenKeyEx.
     
  3. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    Спасибо, RamMerLabs с созданием ключа все получилось ,а вот считать значение не получается

    invoke RegOpenKeyEx, HKEY_CURRENT_USER, addr SubKey2, 0, KEY_ALL_ACCESS, addr HKey
    invoke RegQueryValueExW , HKey ,addr file_name,0,0,offset tbuff1,100
    invoke RegCloseKey, HKey

    в отладчике OllDbg после

    invoke RegQueryValueExW , HKey ,addr file_name,0,0,offset tbuff1,100

    выдает ошибку .
    В чем загвоздка не пойму
     
  4. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    yuri
    Приведи код ошибки - что возвращает GetLastError
     
  5. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    В (addr file_name) не ставит имя раздела
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    1) уверены ли вы, что file_name содержит юникод строку?
    2) последний параметр - не число, указывающее размер буфера, а указатель на переменную, которая до вызова ф-ии содержит размер буфера, а после вызова - кол-во реально считанных байт.
     
  7. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    yuri
    совсем народ обленилсо. читаем маны. там предельно понятно написано.

    Код (Text):
    1. rv:DWORD, bsize:DWORD
    2. invoke RegOpenKeyEx, HKEY_CURRENT_USER, addr szSubKey, 0, KEY_READ, addr hKey
    3. invoke RegQueryValueEx, hKey, addr szKey, 0, addr rv, addr dValue, addr bsize
    у тебя спросили код ошибки, а не описание. к тому же неверное. если объявлена переменная file_name, то указатель на неё получить можно. (что и делает addr)
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    yuri
    Ну главное, W на конце означает, что имя раздела в Unicode надо задавать.
    100 - Означает, что длину буфера будут искать по адресу 100. Это приведет к ошибке.
    Кстати offset почему? Короче внимательным надо быть.
     
  9. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    Большое спасибо RamMerLabs, разобрался,
    ключ создается,значение считывается.
    Я ведь только учусь.
    Еще раз спасибо кто помогал