Код (Text): ... начало процедуры LOCAL as :ANSI_STRING ... некоторые действия... invoke RtlInitAnsiString,addr as,edx ; edx - тут указатель на некоторую строку .if !eax invoke RtlFreeAnsiString,addr as ; [b]Вот тут БДОС[/b] mov status,STATUS_SUCCESS .endif Вот не могу понять почему ри очистке строки вылетает бдос
А разве addr не передаёт указатель на аргумент? Похоже, что ты передаёшь указатель на указатель на строку, Windows переходит на вот этот указатель, и начинает чистить, пока не встретит null-terminator. Ну и естественно чистит что-то не то. З.Ы. Чем так людям макросы нравятся? Тут ни фига не разберёшь без бутылки. Помоему на чистом асме было бы красивее.
<font color="gray][ Corleone</font><!--color--><font color="gray]: Вот не могу понять почему ри очистке строки вылетает бдос ]</font><!--color--> Потому что RtlFreeAnsiString пытается освободить память по указателю на "некоторую строку". Если эта память была выделена из пула, то при IRQL = PASSIVE_LEVEL всё будет ОК, но в твоём случае эта строка, наверное, константа. Внимательно читай в ДДК описание RtlUnicodeStringToAnsiString и RtlFreeAnsiString.
NullSessi0n Мне и самому непривычно с этими ф-ями работать. ассемблерными командами имхо легче работать с юникодом. Причем я довольно сложные операции над ним проводил, единственное исключение это сравнение строк Four-F Нет. строка приходит ко мне ч-з IRP Хранитель сайта Спасибо что поправили, конечно BSOD, а не бдос
<font color="gray][ Corleone</font><!--color--><font color="gray]: Нет. строка приходит ко мне ч-з IRP ]</font><!--color--> Всё равно, если ещё на понял, внимательно читай в ДДК описание RtlUnicodeStringToAnsiString и RtlFreeAnsiString.