RegQueryValueEx - не считывает

Тема в разделе "WASM.WIN32", создана пользователем DPX, 11 апр 2006.

  1. DPX

    DPX New Member

    Публикаций:
    0
    Регистрация:
    13 фев 2005
    Сообщения:
    47
    Адрес:
    Russia
    Здравствуйте!

    Вот код на фасме:
    Код (Text):
    1.  
    2.     hKey dd ?
    3.     KeyPath db 'SOFTWARE\XiSoft\AIM2SaveEditor',0
    4.     KeyName db 'aimpath',0
    5.     aimpath rb 260
    6.     pathbuf rb 260
    7.     aimpathlen dd ?
    8.     typeval dd ?
    9. ....
    10.  
    11.         invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,KeyPath,NULL,KEY_QUERY_VALUE,hKey
    12.         .if eax=0
    13.             invoke RegQueryValueEx,[hKey],KeyName,NULL,typeval,aimpath,aimpathlen
    14.             invoke RegCloseKey,[hKey]
    15.             invoke SetDlgItemText,[hWin],IDC_PATH,aimpath
    16.         .endif


    После выполнения я данных не получаю, а возвращаемое значение - 000000EAh - ERROR_MORE_DATA

    ключ реестра:
    Код (Text):
    1. aimpath        REG_SZ        E:\Games\Механоиды II




    Что я делаю не так?
     
  2. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    Последний параметр - [in, out], т.е. перед вызовом должен содержать размер буфера, а там сейчас наверняка ноль.
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    вызывай RegQueryValueEx два раза подряд. Первый вызов заполнит aimpathlen, второй вызов вернет данные
     
  4. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Да-да...

    Вот пример (выдрал из Л/Р):


    Код (Text):
    1.  
    2. .if eax == BN_CLICKED
    3.     invoke lstrcpy, offset szResult, offset szFormatBIOS
    4.     invoke lstrlen, offset szResult
    5.     mov edi, eax
    6.     invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, offset szBiosDate, 0, KEY_READ, offset hKey
    7.     .if eax == ERROR_SUCCESS
    8.         invoke RegQueryValueEx, hKey, offset szSystemBiosDate, NULL, offset dwType, NULL, offset dwResult
    9.         invoke RegQueryValueEx, hKey, offset szSystemBiosDate, NULL, offset dwType, addr szResult[edi], offset dwResult
    10.         invoke RegCloseKey, hKey
    11.         invoke SendMessage, hStaticHandle, WM_SETTEXT, 0, offset szResult
    12.     .endif
    13.     mov szResult, 0
    14. .endif
    15.  




    Этому коду больше года :)
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Оффсетами надо пользоваться:

    invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,KeyPath,NULL,KEY_QUERY_VALUE,hKey



    замени на



    invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,offset KeyPath,NULL,KEY_QUERY_VALUE,offset hKey
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    crypto



    это фасм.
     
  7. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    А жаль!
     
  8. Iceberg

    Iceberg New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    54
    Адрес:
    Санкт-Петербург
    А что фасм не знает оффсетов ??
     
  9. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Кстати, в приведенном примере как-раз используются оффсеты



    invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, offset szBiosDate, 0, KEY_READ, offset hKey
     
  10. DPX

    DPX New Member

    Публикаций:
    0
    Регистрация:
    13 фев 2005
    Сообщения:
    47
    Адрес:
    Russia
    огромное спасибо! я, блин, просто пролядел в справке про значение lpcbData.