Минимальный функционал IrpHandler для файловых операций
От: Iskarov.And  
Дата: 11.07.12 13:14
Оценка:
Странное поведение при вызове LoadLibrary ("\\.\MyDevice\Library.dll") со своего устройства. MyDevice создан NonPnP драйвером, IoCreateDevice () и IoCreateSymbolicLink (). Все irp запросы направляются к IrpHandler, написаны IRP_MJ_CREATE, IRP_MJ_CLEANUP, IRP_MJ_CLOSE, IRP_MJ_READ, IRP_MJ_QUERY_INFORMATION (FileStandardInformation и FileBasicInformation).

При вызове LoadLibrary () приходят IRP_MJ_CREATE -> IRP_MJ_QUERY_INFORMATION (FileBasicInformation) -> IRP_MJ_CLEANUP -> IRP_MJ_CLOSE и так несколько раз подряд, после чего выводит MessageBox с текстом что подгружаемый файл не является валидным win32 приложением.
Заполняю pIrp->AssociatedIrp->SystemBuffer структурой FILE_BASIC_INFORMATION (вроде ничего критичного там нету, просто время и атрибут файла), pIrp->IoStatus.Information = sizeof (FILE_BASIC_INFORMATION), pRip->IoStatus = STATUS_SUCCESS, и завершаю процессинг Irp.

Не могу понять из каких соображений она говорит что файл не валидный. Никаких других Irp запросов не приходит.

Также интересно что на IRP_MJ_QUERY_INFORMATION с FileBasicInformation pIrp->UserBuffer = 0, хотя на запросе FileStandardInformation он ссылается на память. Насколько я понимаю она туда как раз должны перекидывать инфу с SystemBuffer.

CreateFile ("\\.\MyDevice\Library.dll"), GetFileSize () и ReadFile () работают вполне нормально.

Буду признателен за объяснение что я не так делаю и что нужно заимплементить для корректной работы LoadLibrary ().
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.