Re[5]: Произвести uppercase в режиме ядра?
От: TarasCo  
Дата: 04.06.04 07:49
Оценка:
Здравствуйте, Злость, Вы писали:

З>Здравствуйте, Valerio, Вы писали:


V>>Здравствуйте, Злость, Вы писали:

MSS>>>>По теме — RtlUpcaseUnicodeString пробовал?

З>>>Жаль что эта функция только на PASSIVE_LEVEL работает (нужно или зарание данные готовить или свою написать )

V>>есть RtlUpcaseUnicodeChar
V>>соотв она + цикл даст то что нужно

V>>хотя про нее тоже написано что она только для Passive, в моих проектах я ее не только на PASSIVE использую и пока вроде бы проблем не было. Комментарии специалистов?


З>Да все функции можно вызывать хоть на DISPATCH_LEVEL — если все в NonPool, но тогда под verifier.exe жить не будет если проверку на IRQL включить


Да все будет нормально и под верифаером. Просто MS "подстилают солому". Все их юникодовские строки виделены на свопируемой памяти. Соответственно, попытка работать с ними на DISPATCH_LEVEL вызовет page fault (как всем известно ). Когда происходит падение под верифаером при вкл. IRQL — значит был доступ к свопабельной памяти (проверка IRQL заключается только в том, что вся свопабельная память принудительно свопируется (как достало это слово ) ). Поэтому если есть уверенность, что обе строки в несвопируемой памяти — можно пользоваться ф. Rtl... (или если кому нравиться ANSI C — стандартными — реализация то одна ) на любом IRQL. В частности, RtlUpcaseUnicodeString можно использовать только при собственноручном выделении строк (т.е тр. парам = FALSE)
Да пребудет с тобою сила
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.