Проблема с поиском нужной директории

Тема в разделе "WASM.WIN32", создана пользователем Flasher, 18 ноя 2005.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Т.е. не совсем проблема.

    Реализовал программу которая ищет папку через ZwQueryDirectoryFile.

    Но дело в том, что пока стоит MessageBox для вывода путей - всё прекрасно работает, кода убираю - прога начинает всю память хавать...



    Не могли бы подсказать где я допустил ошибку?

    Спасибо.



    [​IMG] 340745242__SearchDir.asm
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Flasher

    Сомневаюсь, что проблема в наличии/отсутствии MessageBox. Например, размер буфера, адресуемого первым параметром подпрограммы SearchDir - lpPath, равен черырем байтам (szLink db "C:\",0), а в коде присутствуют invoke lstrcat,lpPath, ....
     
  3. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    q_q

    У мя есть точно такой же пример токо с функциями FindFirstFile\FindNextFile и там всё работало ;)



    Вот нелепость-то какая, 3 дня назад всю ночь просидел и не смог найти ошибка, а шас с утричка взглянул и сразу хоп :)

    Впрочем, не без твоего участия, q_q ;)

    Спасибо!



    p.s. Вдруг кому понадобится...



    [​IMG] 589968433__SearchDir.asm
     
  4. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Ух как давно это было...
    Зацените новый супер-пупер оптимизированный вариант :)

    Одна проблемка, при изменении
    Код (Text):
    1. invoke GlobalAlloc,0h or 40h,260
    на
    Код (Text):
    1. push 260
    2. call _AllocateHeap
    3. _AllocateHeap proc near
    4.     arg_0  = dword ptr  4
    5.        assume fs:nothing
    6.        mov eax,fs:18h
    7.        push [esp+arg_0]
    8.        mov eax,[eax+30h]
    9.        push 0
    10.        push dword ptr [eax+18h]
    11.        call RtlAllocateHeap
    12.        retn 4
    13. _AllocateHeap endp
    и соответственно

    Код (Text):
    1. invoke GlobalFree,esi
    на
    Код (Text):
    1. push esi
    2. call _FreeHeap
    3. _FreeHeap proc near
    4.      arg_0  = dword ptr  4
    5.        assume fs:nothing
    6.        mov eax,fs:18h ;ProcessHeap
    7.        push [esp+arg_0]
    8.        mov eax,[eax+30h]
    9.        push 0
    10.        push dword ptr [eax+18h]
    11.        call RtlFreeHeap
    12.        retn 4
    13. _FreeHeap endp
    Прога через определённое время вылетает.
    Не правильно выделяю память?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Зачем так извращаться?
    RtlCreateHeap/RtlDestroyHeap вызывай, и получай HeapHandle.
     
  6. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Увы, говорит "Память не может быть 'written'".
    Как ещё можно средствами ntdll добится положительного результата?