Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > NULL в CurrentStackLocation |
Автор: FalseMaster 2.9.2012, 10:36 | ||||||
Вот дожил до того, что припёрло написать драйвер. После первой синьки в обработчике "IRP_MJ_DEVICE_CONTROL" проверил поля "Tail.Overlay.CurrentStackLocation" и "UserBuffer" - оба в нулях. Почему, ума не приложу, вроде всё делал как пишут в интернетах. Если не трудно, гляньте, может я что-то напутал. создание устр-ва:
открытие устр-ва:
обращение к устр-ву:
|
Автор: xvr 2.9.2012, 22:22 |
Смущают одиночные обратные слеши в С строках. Они должны быть удвоенны (как минимум) При таком сочетании он и должен быть в нулях |
Автор: FalseMaster 3.9.2012, 07:46 | ||||
Не обращай внимания - оригинал на паскале, а в сишном формате я для удобства восприятия запостил, но кривовато получилось ![]()
Ну не знаю, на MSDN пишут, что в "UserBuffer" помещается адрес выходного буфера, передаваемого в параметре "lpOutBuffer" ф-ции "DeviceIoControl", т.е. там должно быть "&out_buf". Ну да не в этом соль. Я пробовал и с METHOD_BUFFERED - всё равно "CurrentStackLocation"=NULL, хотя адрес в "AssociatedIrp.SystemBuffer" вполне допустимый (0x8???????), но читать/писать не рискнул. Код то вроде правильный, но по каким-то причинам не выделяется IRP-стёк. Может при загрузке драйвера с помощью "NtLoadDriver" есть какие-то подводные камни. |
Автор: FalseMaster 3.9.2012, 09:23 | ||
"IoGetCurrentIrpStackLocation" возвращает тот же самый NULL, ибо это всего лишь макрос, и не думаю, что можно запретить доступ к блоку памяти размером 4 байта. Сейчас попробовал грузить драйвер с помощью "KMDManager" - результат тот же. Прямо мистика какая-то. |
Автор: FalseMaster 2.10.2012, 18:52 |
Проблему решил. Тему фтопку. |
Автор: feodorv 2.10.2012, 19:22 |
Ну, если Вы не поделитесь опытом, что да как было не так, то, да, фтопку... |
Автор: FalseMaster 2.10.2012, 19:51 |
Я неспроста попросил топик кильнуть. Причина была в моей невнимательности. Поскольку я на делфях пишу, заголовочники приходится сдирать с сишных хидеров. Вот я сдуру и воспользовался с незапамятных времён завалявшимся на диске "winddk.h" за авторством Casper S. Hornstrup, а он на поверку оказался кривой. На данный момент вроде (полностью не проверял, ибо нефиг) пофиксен, но рисковать не стал, качнул оригинальный (мелкомягкий) DDK, исправил лажу у себя и всё заработало. Так что, тема не несёт полезной информации. |
Автор: Dem_max 3.10.2012, 05:30 |
Ну отчего же не несет информации, теперь нужно знать что нужно следить за хидерами и использовать только оригинальные. |
Автор: bems 30.10.2012, 01:32 |
Да, необходимость все время переводить и перепроверять сишные хедеры это то, почему мы всё-таки пишем драйвера на сях |