Не пользовался этой функцией ни разу и поэтому возникла проблема Код (Text): .data subkey db 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths', 0 hKey dd 0 buf db MAX_PATH dup (0) sz_buf dd sizeof MAX_PATH .code start: invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, addr subkey, 0, KEY_ENUMERATE_SUB_KEYS, addr hKey xor esi, esi next: invoke RegEnumKeyEx, hKey, esi, addr buf, addr sz_buf, 0, 0, 0, 0 inc esi jmp next end start при первом проходе RegEnumKeyEx выдает первый подраздел, eax=0. потом перечисляет через раз не все подразделы. Может dwIndex (esi) надо увеличивать на определенное значение?
Код (Text): for (i=0; i<cSubKeys; i++) { cbName = MAX_KEY_LENGTH; retCode = RegEnumKeyEx(hKey, i, achKey, &cbName, NULL, NULL, NULL, &ftLastWriteTime); if (retCode == ERROR_SUCCESS) { // ;) } } код из msdn, афаир.
KondraT Чайник попробует посоветовать... Для начала не стоит игнорировать последний параметр. Хотя это не так важно. А во-вторых, размер буфера модифицируется RegEnumKeyEx, а значит если вам попадется раздел с коротким именем, а потом с длинным, то RegEnumKeyEx будет возвращать ошибку о маленьком размере буфера. На каждой итерации цикла стоит восстанавливать значение sz_buf. P.S. ... что, кстати, прекрасно видно из приведенного кода на сях.
l_inc Всё верно. Спасибо! Я как - то не обратил внимание на изменение значения размера буфера Оказывается и не чайник