RegEnumKeyEx не перечисляет подразделы

Тема в разделе "WASM.BEGINNERS", создана пользователем KondraT, 5 авг 2007.

  1. KondraT

    KondraT Member

    Публикаций:
    0
    Регистрация:
    22 янв 2006
    Сообщения:
    175
    Не пользовался этой функцией ни разу и поэтому возникла проблема

    Код (Text):
    1. .data
    2.  
    3. subkey db 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths', 0
    4. hKey dd 0
    5. buf db MAX_PATH dup (0)
    6. sz_buf dd sizeof MAX_PATH
    7.  
    8. .code
    9.  
    10. start:
    11.  
    12. invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, addr subkey, 0, KEY_ENUMERATE_SUB_KEYS,  addr hKey
    13. xor esi, esi
    14.  
    15. next:
    16. invoke RegEnumKeyEx, hKey, esi, addr buf, addr sz_buf, 0, 0, 0, 0
    17. inc esi
    18. jmp next
    19.  
    20. end start
    при первом проходе RegEnumKeyEx выдает первый подраздел, eax=0. потом перечисляет через раз не все подразделы. Может dwIndex (esi) надо увеличивать на определенное значение?
     
  2. Noble Ghost

    Noble Ghost New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    204
    Адрес:
    Russia
    Код (Text):
    1. for (i=0; i<cSubKeys; i++)
    2.     {
    3.     cbName = MAX_KEY_LENGTH;
    4.     retCode = RegEnumKeyEx(hKey, i, achKey, &cbName, NULL, NULL, NULL, &ftLastWriteTime);
    5.     if (retCode == ERROR_SUCCESS)
    6.     {
    7.         // ;)
    8.     }
    9. }
    код из msdn, афаир.
     
  3. KondraT

    KondraT Member

    Публикаций:
    0
    Регистрация:
    22 янв 2006
    Сообщения:
    175
    Noble Ghost
    Спасибо конечно, но этот код мне проблему не рашает...
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    KondraT
    Чайник попробует посоветовать... Для начала не стоит игнорировать последний параметр. Хотя это не так важно. А во-вторых, размер буфера модифицируется RegEnumKeyEx, а значит если вам попадется раздел с коротким именем, а потом с длинным, то RegEnumKeyEx будет возвращать ошибку о маленьком размере буфера. На каждой итерации цикла стоит восстанавливать значение sz_buf.

    P.S. ... что, кстати, прекрасно видно из приведенного кода на сях.
     
  5. KondraT

    KondraT Member

    Публикаций:
    0
    Регистрация:
    22 янв 2006
    Сообщения:
    175
    l_inc
    Всё верно. Спасибо! Я как - то не обратил внимание на изменение значения размера буфера

    Оказывается и не чайник :)