Здравствуйте, Злость, Вы писали:
З>Здравствуйте, 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)