Странное поведение при вызове 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 ().