Здравствуйте. Помогите пожалуйста узнать загружен ли сейчас драйвер, я делаю так: Код (Text): function TDriver.isLoaded: boolean; .... result := false; h := CreateFile( PChar('\\.\'+fName), // lpFileName GENERIC_READ + GENERIC_WRITE, // dwDesiredAccess FILE_SHARE_READ + FILE_SHARE_WRITE, // dwShareMode nil, // lpSecurityAttributes OPEN_EXISTING, // dwCreationDistribution 0, // dwFlagsAndAttributes 0 // hTemplateFile ); if(h = INVALID_HANDLE_VALUE) then exit; CloseHandle(h); result := true; Но здесь мне не нравится что в драйвере лишний раз вызывается IRP_MJ_CREATE и IRP_MJ_CLOSE, можно ли как-то по лругому проверить?
Например если закрыть описатели файла то СreateFile нормально открывает его но драйвер сам может и не выгрузится и работать далее. И кстати надо ещо GetLastError вызывать иначе неясно почему eax==-1h
Либо бред, либо я ничего не понял Кто откуда закрывает и почему он должен выгружаться и не работать далее?
к nester7: ты просто неправильно меня понял. Не буду долго обяснять но привиду пример. На Nt дрова из папки Drivers лёгко открываются и модифицыруются, при етом они сидят в системе и спокойно работают.
По-моему вы попутали воздействие на файл драйвера на диске (ображение к устройству представляющему том) и CreateFile на устройство созданное драйвером?
Eсли аффтар говорил о DEVICE (в функции) тода сорри недопонял вопрос, а если о файле - тогда я всё правильно написал.
уа прочти #1 пост - Код (Text): PChar('\\.\'+fName), // lpFileName ( \\.\ - касается не только девайсов но и других обектов) и иди в биореактор
Mi256 Igi задал конктретный вопрос: То, что ты этой теме знаешь что-то ещё, нихрена не значит, что нужно это писать сюда.
А куда же ещо? Он дал свой код, а я говорю, что он не в 100% помогает, и аргументировал, чтобы такие как ты не делали из меня глупого.