RtlFreeAnsiString и BSOD

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

  1. Guest

    Guest Guest

    Публикаций:
    0
    Код (Text):
    1.  
    2. ... начало процедуры
    3. LOCAL   as      :ANSI_STRING
    4. ... некоторые действия...
    5. invoke  RtlInitAnsiString,addr as,edx ; edx - тут указатель на некоторую строку
    6. .if !eax
    7.     invoke  RtlFreeAnsiString,addr as ; [b]Вот тут БДОС[/b]
    8.     mov status,STATUS_SUCCESS
    9. .endif
    10.  
    11.  
    12.  


    Вот не могу понять почему ри очистке строки вылетает бдос
     
  2. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    А разве addr не передаёт указатель на аргумент? Похоже, что ты передаёшь указатель на указатель на строку, Windows переходит на вот этот указатель, и начинает чистить, пока не встретит null-terminator. Ну и естественно чистит что-то не то.

    З.Ы. Чем так людям макросы нравятся? Тут ни фига не разберёшь без бутылки. Помоему на чистом асме было бы красивее.
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    <font color="gray][ Corleone</font><!--color--><font color="gray]: Вот не могу понять почему ри очистке строки вылетает бдос ]</font><!--color-->



    Потому что RtlFreeAnsiString пытается освободить память по указателю на "некоторую строку". Если эта память была выделена из пула, то при IRQL = PASSIVE_LEVEL всё будет ОК, но в твоём случае эта строка, наверное, константа. Внимательно читай в ДДК описание RtlUnicodeStringToAnsiString и RtlFreeAnsiString.
     
  4. Guest

    Guest Guest

    Публикаций:
    0
    NullSessi0n



    Мне и самому непривычно с этими ф-ями работать. ассемблерными командами имхо легче работать с юникодом. Причем я довольно сложные операции над ним проводил, единственное исключение это сравнение строк



    Four-F



    Нет. строка приходит ко мне ч-з IRP



    Хранитель сайта

    Спасибо что поправили, конечно BSOD, а не бдос
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    <font color="gray][ Corleone</font><!--color--><font color="gray]: Нет. строка приходит ко мне ч-з IRP ]</font><!--color-->



    Всё равно, если ещё на понял, внимательно читай в ДДК описание RtlUnicodeStringToAnsiString и RtlFreeAnsiString.