Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет доступа к каталогу 
V
    Опции темы
KAlex1
Дата 18.10.2009, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Доброго времени суток, уважаемые коллеги!
Занимаюсь решением вопроса программного запрета доступа к каталогу. 
Поделитесь, пожалуйста, идеями о том каким способом этого можно достичь. 
Назначение прав доступа не подходит. И было бы неплохо узнать как запретить доступ не только из проводника, а и из фара. 
Заранее благодарен!

PM MAIL   Вверх
bra1ny
Дата 18.10.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Думаю правильнее всего будет написать драйвер фильтр фс. Фильтровать все IRP_MJ_CREATE и уже смотреть какой каталог открывается и предпринимать действия пропускать дальше или возврашать STATUS_ACCESS_DENIED например.  
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
RapMan
Дата 18.10.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.6.2008

Репутация: нет
Всего: нет



думаю bra1ny прав, но добавлю что еще нужно фильтровать IRP_MJ_SET_INFORMATION иначе переименовать и удалить каталог будет можно
--------------------
здесь хреновые модераторы...
PM MAIL   Вверх
KAlex1
Дата 20.10.2009, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Огромное спасибо за советы! 
Порыл в этом направлении, почитал на WASM. Я так понял что драйвера фильтра фс относятся к драйверам режима ядра.
Скажи пожалуйста, вообще раеально этот драйвер написать на С, в MS Visual Studiо? или драйвера такого рода пишутся только на asm-e? 
PM MAIL   Вверх
xvr
Дата 21.10.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Драйвера уже давно пишут на С (и даже на С++). Тебе нужен DDK или WDK

PM MAIL   Вверх
KAlex1
Дата 25.10.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



А если это реализовать перехватом WinAPI функций, то, допустим из командной строки или при помощи фара, каталог будет доступен?
xvr, благодарю за совет насчет WDK. WDK - мощнейший хелп)

Это сообщение отредактировал(а) KAlex1 - 25.10.2009, 22:39
PM MAIL   Вверх
bra1ny
Дата 25.10.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

А если это реализовать перехватом WinAPI функций, то, допустим из командной строки или при помощи фара, каталог будет доступен?

Если перехватите ту апишку с помощью которой программа обращается к каталогу , то нет.

Но перехват апи не даст вам той "власти" нежели  драйвер фильтр фс. Плюс к этому драйвер фильтр это документированный метод +)

Это сообщение отредактировал(а) bra1ny - 25.10.2009, 23:53
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 9.11.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Кроме драйверов фильтов файловой системы (file system filter drivers), также существуют драйвера минифильтра 
(file system minifilter drivers). )
Я так понял, они проще в реализации, но возможно ли с их помощью запретить доступ к каталогу? Они ведь не предусматривают возврат такого полезного статуса как, например STATUS_ACCESS_DENIED. 
PM MAIL   Вверх
bra1ny
Дата 10.11.2009, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



В чем проблема в реализации драйвера фильтра фс ? Покажите код поможем.  
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 10.11.2009, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Код...Если бы) 
Я сейчас нахожусь на стадии выбора: реализовывать ли драйвер фильтра, или драйвер минифильтра. WDK говорит что минифильтр проще в реализации и лучше работает.  Но это ведь драйвер "минифильтра")
Вот я и хочу понять какие тут подводные камни, всязи с этим и возник вопрос: предоставит ли мне драйвер минифильтра  возможности необходимые для решения моего вопроса? То что драйвер фильтра способен мне помочь это понятно.

PM MAIL   Вверх
Alca
Дата 10.11.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Код

HANDLE hFile = NULL;

void LockFile(const AnsiString & asFilePath, bool bLockFlag)  {
    if (bLockFlag == true) {
        hFile = CreateFile(
              ("\\\\.\\" + asFilePath).c_str(),
              GENERIC_WRITE,
              0,
              NULL,
              OPEN_EXISTING,
              FILE_ATTRIBUTE_NORMAL,
              NULL
        );
    } else {
        CloseHandle (hFile);
    }
}


Это сообщение отредактировал(а) Alca - 10.11.2009, 10:23


--------------------
PM WWW ICQ Skype Jabber   Вверх
KAlex1
Дата 10.11.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



The CreateFile function creates, opens, or truncates a file, COM port, device, service, or console.
Похоже что с директориями эта функция не работает, и ктому же если ее реализовать в резидентной программе, то эту программу можно будет легко прервать.
И как сказал bra1ny: это не даст вам той "власти" нежели  драйвер фильтр.
Поэтому я всеже буду ждать ответа на мой вопрос о драйверах минифильтра) 
PM MAIL   Вверх
SenkraD
Дата 10.11.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 4
Всего: 23



KAlex1, а в сторону ACL (Access Controll Lists) не смотрел - SetFileSecurity


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
KAlex1
Дата 10.11.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



только что посмотрел, и понял что я уже далеко зашел в рассмотрении драйверов фильтра, и уже добью наверно их). я так понял, через ACL назначаются привилегий доступа, а это мне не совсем подходит. 
Благодарю за подсказку.Хорошая идея. Оставлю ее как запасной вариант)
И всеже буду ждать ответа на мой вопрос о драйверах минифильтра) 
PM MAIL   Вверх
bra1ny
Дата 10.11.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



по поводу фильтра фс , советую изучить исходники файлмона(на васме есть). Ну и если решитесь , то по любому столкнетесь  с фаст ио.
Вот Вам почитать.



Присоединённый файл ( Кол-во скачиваний: 36 )
Присоединённый файл  _338752575__FastIo.rar 34,61 Kb
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 10.11.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Благодарю за док) Я думал что в WDK, fast I/O описываются достаточно, но если что обязательно воспользуюсь) 
Помоему в моем случае обработку фаст и/о делать не прийдется. Там достаточно будет поймать те IRP о которых говорилось ранее. 
К тому же к WDK прилогается пример драйвера минифильтра и должен прилогаться пример просто драйвера фильтра, но второго там почему-то нету, поэтому нужно всеголишь поискать в инете)
PM MAIL   Вверх
bra1ny
Дата 10.11.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



если будите писать драйвер фильтр фс , То фаст ио придется обрабатывать по любому иначе систему нагнете =) 
Ну там все просто где-то так:

Код

BOOLEAN
MyFastIoRead(
    IN PFILE_OBJECT FileObject,
    IN PLARGE_INTEGER FileOffset,
    IN ULONG Length,
    IN BOOLEAN Wait,
    IN ULONG LockKey,
    OUT PVOID Buffer,
    OUT PIO_STATUS_BLOCK IoStatus,
    IN PDEVICE_OBJECT DeviceObject
    )
{
    PDRIVER_OBJECT DriverObject;
    PDEVICE_EXTENSION pdx;

    pdx = DeviceObject->DeviceExtension;
    DriverObject = pdx->LowerDeviceObject->DriverObject;

    if( DriverObject->FastIoDispatch && DriverObject->FastIoDispatch->FastIoRead )
    {
        KdPrint(("FastIoRead!\n"));
        return DriverObject->FastIoDispatch->FastIoRead( FileObject ,
                                                         FileOffset ,
                                                         Length ,
                                                         Wait ,
                                                         LockKey ,
                                                         Buffer ,
                                                         IoStatus ,
                                                         pdx->LowerDeviceObject 
                                                       );
    }
    else
    {
        KdPrint(("FastIoRead not supported!\n"));
        return FALSE;
    }
}

ну и тд.
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 11.11.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Да, в драйверах фильтра нужно было предусматривать обработчик фаст ио, даже если он ничего не должен делать, но он должен передать фаст ио следующему драйверу в стэке. 
А в драйверах минифильтра, обрабатываются только те сообщения которые нам нужны, а для остальных мы можем даже не предусматривать обработчики, все остальное там за нас делает filter manager)

PM MAIL   Вверх
bra1ny
Дата 11.11.2009, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Ну пока вы там с минифильтрами маетесь , я по быстрому вам скелет написал  smile 
Простой драйве фильтр фс , который запрещает доступ к каталогу Temp на диске С.
После запуска стэк устройств выглядит где-то так:
Код

lkd> !devstack 81e42950
  !DevObj   !DrvObj            !DevExt   ObjectName
  81b81f10  \Driver\folder_filter81b81fc8  
> 81e42950  \FileSystem\sr     81e42a08  
  81f38020  \FileSystem\Ntfs   81f380d8  




user posted image

user posted image




Это сообщение отредактировал(а) bra1ny - 11.11.2009, 13:37

Присоединённый файл ( Кол-во скачиваний: 75 )
Присоединённый файл  folder.rar 107,77 Kb
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 11.11.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Благодарю Вас, bra1ny. Думаю Ваш код будет мне очень полезен) 
Буду надеяться, что после окончания ознакомления с документацией, я напишу свой драйвер с такой же скоростью что и Вы этот)
PM MAIL   Вверх
Alca
Дата 11.11.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Цитата

 folder.rar 107,77 Kb

А как драйвер установить?


--------------------
PM WWW ICQ Skype Jabber   Вверх
bra1ny
Дата 11.11.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Полно программ. можете свою написать , через сервисы или NtLoadDriver. 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
Alca
Дата 11.11.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



спасибо


--------------------
PM WWW ICQ Skype Jabber   Вверх
KAlex1
Дата 13.11.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



А Microsoft Visual Studio предоставляет какие-либо возможности, которые могут помочь в разработке драйверов?
PM MAIL   Вверх
bra1ny
Дата 13.11.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Эээ какие возможности вы имеете в виду?Как настроить студию чтобы там драйвера собирать? 
http://alter.org.ua/ru/docs/nt_kernel/vc6_proj/
http://alter.org.ua/ru/docs/nt_kernel/vc8_proj/

Еше на диске к книжке Уолтера Они есть мастер для построения проектов драйверов для студии.

Сам использую 6 студию + визуал асист , собираю драйвера в build . Уже привык , и менять ничего не собираюсь. 

Это сообщение отредактировал(а) bra1ny - 13.11.2009, 17:42
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 15.11.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Посоветуйте пожалуйста, что удобнее всего использовать для отладки драйвера фильтра и вообще драйверов?
Bra1ny, в вашем исходнике есть папка objchk_wxp_x86, скажите пожалуйста что это за папка, и как создаются файлы входящие в нее?) И еще, файлы makefile. и sources. создаются вручную?
Я так понял, вы имеете ввиду что драйвера лучше компилировать build-oм которые входит в WDK? Вы про этот говорите или про какой-то другой? Для меня это все ново, поэтому приходиться уточнять))


Это сообщение отредактировал(а) KAlex1 - 16.11.2009, 01:09
PM MAIL   Вверх
bra1ny
Дата 16.11.2009, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

файлы makefile. и sources. создаются вручную?

Да , вручную.

Цитата

Я так понял, вы имеете ввиду что драйвера лучше компилировать build-oм которые входит в WDK

Да , это эталонная сборка.

Цитата

Посоветуйте пожалуйста, что удобнее всего использовать для отладки драйвера фильтра и вообще драйверов?

WinDbg.
Так как перед тем , как у вас что-то заработает будет очень много синих экранов , советую поставить виртуальную машину. 
Вот инструкция как настроить виндебаг и вмварю для удаленной отладки. 
тык

 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 25.11.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Bra1ny, благодарю за совет насчет vmware и windbg. Настроил, отлаживаю...  Настройка не легкая конечно)
Подскажите пожалуйста как посмотреть стэк устройств и есть ли какая-нибудь возможность посмотреть через какие драйвера IRP прошло или какими обрабатывалось и какими не успело обработаться, 
потому что я в своем драйвере обработку IRP завершаю (complete an I/O operation) со статусом STATUS_ACCESS_DENIED, but никакого эффекта на систему это не оказывает, и в папку всеравно заходит.
И скажите еще пожалуйста, какую группу (Load order group) присваивать драйверу?
PM MAIL   Вверх
bra1ny
Дата 26.11.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



стэк устройств можно посмотреть  командой !devstack  

Цитата

Подскажите пожалуйста как посмотреть стэк устройств и есть ли какая-нибудь возможность посмотреть через какие драйвера IRP прошло или какими обрабатывалось и какими не успело обработаться, 

Если с отладчиком не очень подружились вроде бы былая такая полезная штука как irptrace поищите.
Цитата

потому что я в своем драйвере обработку IRP завершаю (complete an I/O operation) со статусом STATUS_ACCESS_DENIED, but никакого эффекта на систему это не оказывает, и в папку всеравно заходит.

Давайте код , посмотрим.

Это сообщение отредактировал(а) bra1ny - 26.11.2009, 00:12
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 26.11.2009, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Взгляните, пожалуйста. 
Код

FLT_PREOP_CALLBACK_STATUS
DADPreOperationCallback (
    __inout PFLT_CALLBACK_DATA Data,
    __in PCFLT_RELATED_OBJECTS FltObjects,
    __deref_out_opt PVOID *CompletionContext
    )
{
    PUNICODE_STRING nameToUse;
    NTSTATUS status;
    PFLT_FILE_NAME_INFORMATION nameInfo = NULL;

        if (FltObjects->FileObject != NULL) { 

            status = FltGetFileNameInformation( Data,   //Получить имя каталога который обрабатывается в данный момент
                                                FLT_FILE_NAME_NORMALIZED |
                                                    FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP,
                                                &nameInfo );
        } else {
            //  Can't get a name when there's no file object
            status = STATUS_UNSUCCESSFUL;
        }
            if (NT_SUCCESS( status )) 
            {
            nameToUse = &nameInfo->Name; 

#ifdef DBG
                ASSERT( NT_SUCCESS( FltParseFileNameInformation( nameInfo ) ) );
#else
                FltParseFileNameInformation( nameInfo );
#endif
 
            if ( !RtlCompareUnicodeString(&DADData.VolumeNameToUse, &nameInfo->Volume, TRUE))
                     { // сравненение имен разделов
                                    if ( !RtlCompareUnicodeString(&nameInfo->ParentDir, &DADData.DirectoryName, FALSE))
                        { // сравннение имен каталогов
                          // если имена каталогов совпадают, то блокируем доступ,
                         KdPrint(("Our folder!\n"));
                         Data->IoStatus.Status=STATUS_ACCESS_DENIED;
                         FltReleaseFileNameInformation( nameInfo );
                         return FLT_PREOP_COMPLETE;  
                        }
                     }
               if (!NT_SUCCESS(status))
               {
                    KdPrint(("Failed with status  : %08X\n" , status ));
                    if (NULL != nameInfo) {
                        FltReleaseFileNameInformation( nameInfo );
                    }
                    return FLT_PREOP_SUCCESS_NO_CALLBACK;
               }
             }
#if DBG
            //
            //  Debug support to break on certain errors.

            if (FltObjects->FileObject != NULL) {
                NTSTATUS retryStatus;

                if ((StatusToBreakOn != 0) && (status == StatusToBreakOn)) {

                    DbgBreakPoint();
                }
                retryStatus = FltGetFileNameInformation( Data,
                                                         FLT_FILE_NAME_NORMALIZED |
                                                            FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP,
                                                         &nameInfo );
                if (!NT_SUCCESS( retryStatus )) {
                    //  We always release nameInfo, so ignore return value.
                    NOTHING;
                }
            }
#endif

    if (NULL != nameInfo) {
            FltReleaseFileNameInformation( nameInfo );
        }
    return FLT_PREOP_SUCCESS_NO_CALLBACK;
}

PM MAIL   Вверх
bra1ny
Дата 26.11.2009, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



FltCancelFileOpen?
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 30.11.2009, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Спасибо за подсказку. В ВДК написано что команда FltCancelFileOpen используется в PostOperationCallBack процедурах. Во всяком случае она мне не пригодилась, ошибка оказалась в сравнении имен каталогов. Это я уже исправил. Разработка продвигается)  smile 
Подскажите пожалуйста какую фунцкию использовать для динамического выделения памяти, под массив переменных определенного типа, в режиме ядра. Необходимо динамически выделить память под массив UNICODE_STRING-ов. И затем также выделить память под массив buffer каждой из структур UNICODE_STRING.

Это сообщение отредактировал(а) KAlex1 - 30.11.2009, 23:46
PM MAIL   Вверх
bra1ny
Дата 1.12.2009, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



ExAllocatePool().
Выбирать тип пула надо в зависимости от irql.
Если работаете на уровне < DISPATCH_LEVEL тогда можно paged pool. 
С nonpaged пулом можно работать на любом irql, но надо помнить что это очень ценный ресурс  smile 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 3.12.2009, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Благодаря документации и Вам, bra1ny, мне стало ясно что необходимо использовать ExAllocatePoolWithTag. 
Но у меня возникла очередная проблема: выделяется всего 4 байта, при том что мне нужно 5120 байт.
Из DriverEntry вызываю свою процедуру, и в ней уже происходит вызов ExAllocatePoolWithTag.
Вначале подумал что IRQL не тот, попробовал вызвать ExAllocatePoolWithTag их самой DriverEntry, но всеравно выделяются только 4 байта, вместо желаемых 5120. Выделяю из PagedPool. IRQL DriverEntry является PASSIVE_LEVEL. 
Вот он код:
Код

    PVOID buffer;
    
    buffer = ExAllocatePoolWithTag(PagedPool, 5120,'ffuB');
    resultLength=sizeof(buffer);


Буду рад, если у вас есть какие-нибудь идеи по этому поводу)
PM MAIL   Вверх
xvr
Дата 3.12.2009, 20:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата

Буду рад, если у вас есть какие-нибудь идеи по этому поводу) 
Есть идея, что sizeof(buffer); - это размер указателя buffer, а не выделенного буфера, на который он указывает. Так что спите спокойно - ваши 5120 байтов скорее всего выделились. Что бы стать совсем спокойным рекомендуется проверить этот самый buffer на NULL

PM MAIL   Вверх
bra1ny
Дата 3.12.2009, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата(xvr @ 3.12.2009,  20:38)
Цитата

Буду рад, если у вас есть какие-нибудь идеи по этому поводу) 
Есть идея, что sizeof(buffer); - это размер указателя buffer, а не выделенного буфера, на который он указывает. Так что спите спокойно - ваши 5120 байтов скорее всего выделились. Что бы стать совсем спокойным рекомендуется проверить этот самый buffer на NULL

Вы совершенно правы. 

Цитата

мне стало ясно что необходимо использовать ExAllocatePoolWithTag. 


ExAllocatePool это "обертка" которая в свою очередь вызывает ExAllocatePoolWithTag с тэгом None. Ну это так для справки))
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 3.12.2009, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Я бы спал спокойно если бы мне функция ZwQueryValueKey не возвращала BufferTooSmall, при том что проверку я перед этим тоже делаю)) И дебаггер показывает  в buffer не нулевой адрес.
Код

...
    PVOID buffer;
    ULONG resultLength
    
    buffer = ExAllocatePoolWithTag(PagedPool, 5120,'ffuB');
    resultLength=sizeof(buffer);
    RtlZeroMemory(buffer,DIRECTORIES_LENGTH);
    resultLength=sizeof(buffer);

    if (buffer == NULL) 
    {
        return;
    }


    InitializeObjectAttributes( &attributes,
                                RegistryPath,
                                OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
                                NULL,
                                NULL );

    status = ZwOpenKey( &driverRegKey,
                        KEY_READ,
                        &attributes );

    if (!NT_SUCCESS( status )) {
        return;
    }

     RtlInitUnicodeString( &valueName, DIRECTORY_TOBECLOSED );

    pValuePartialInfo = (PKEY_VALUE_PARTIAL_INFORMATION) buffer;

    status = ZwQueryValueKey( driverRegKey,
        &valueName,
        KeyValuePartialInformation,  // Specifies that a KEY_VALUE_PARTIAL_INFORMATION structure is supplied. 
        buffer,
        sizeof(buffer),
        &resultLength );
...


Это сообщение отредактировал(а) KAlex1 - 3.12.2009, 22:47
PM MAIL   Вверх
xvr
Дата 3.12.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Код

ZwQueryValueKey( driverRegKey,
        &valueName,
        KeyValuePartialInformation,  // Specifies that a KEY_VALUE_PARTIAL_INFORMATION structure is supplied. 
        buffer,
        sizeof(buffer),
        &resultLength );
Не надо сюда подавать sizeof(buffer),, это всего лишь 4, так что BufferTooSmall вполне оправданно. Подайте туда ваши 5120

PM MAIL   Вверх
KAlex1
Дата 9.12.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Скажите пожалуйста, драйвера откомпилированные в Windows XP x86 build Enviroment будут работать на Win Xp x64, и на Windows 7?
Я думал что должно быть какое-нибудь Windows XP x64 build Enviroment, но его нету, поэтому драйвера получается будут 32х-битные.
PM MAIL   Вверх
bra1ny
Дата 9.12.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

Я думал что должно быть какое-нибудь Windows XP x64 build Enviroment

на сколько помню можно 2003 x64 использовать , схожие архитектуры. 


Это сообщение отредактировал(а) bra1ny - 9.12.2009, 23:12
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 9.12.2009, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



А вообще, драйвера откомпилированные в Windows XP x86 build Enviroment будут работать на Win Xp x64, и на Windows 7?
PM MAIL   Вверх
bra1ny
Дата 10.12.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

А вообще, драйвера откомпилированные в Windows XP x86 build Enviroment будут работать на Win Xp x64

Вообще-то тоскают с собой драйвера для разных платформ. Для x86 отдельно , для x64 отдельно. 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 20.12.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Подскажите пожалуйста как настраивать MVS 2005 для создния user-mode application, которые смогли бы взаимодействовать с kernel-mode драйвером? 

PM MAIL   Вверх
smoke_man
Дата 20.12.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



В смысле настраивать? Создаешь приложение, а для работы с драйвером используешь следующие функции:
CreateFile -> IRP_MJ_CREATE 
CloseHandle -> IRP_MJ_CLEANUP & IRP_MJ_CLOSE 
WriteFile -> IRP_MJ_WRITE 
ReadFile-> IRP_MJ_READ 
DeviceIoControl -> IRP_MJ_DEVICE_CONTROL


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
KAlex1
Дата 20.12.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Всмысле какие папки указывать в настройка, типа Additional library directories, возможно какие-нибудь настройки линковщика. ЧТо-то наподобии http://alter.org.ua/ru/docs/nt_kernel/vc8_proj/ вот этого, если такое вообще есть.
Потому что я пробовал подключить .h файл с нужной мне функцией, указыв на него необходимые пути в настройках проекта, но всеравно при линковании ошибки. 
PM MAIL   Вверх
bra1ny
Дата 20.12.2009, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



не понял что-то на что ругается линковщик? пример хидера пожалуйста. 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
smoke_man
Дата 20.12.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



А что за ошибки? И если есть возможность  - можешь показать h-файл?


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
bra1ny
Дата 20.12.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



В ддк кстати есть пример  как общаться с драйвером. 
Код

src\general\ioctl


Это сообщение отредактировал(а) bra1ny - 20.12.2009, 19:05
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
xvr
Дата 20.12.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



user-mode application не могут напрямую вызывать kernel-mode драйвера, только стандартными, определенными в Win32 API методами (их 
smoke_man уже перечислил)
Т.ч. ничего специально настраивать не надо

PM MAIL   Вверх
KAlex1
Дата 21.12.2009, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Для загрузки драйвера минифильтра используется функция FilterLoad (The FilterLoad function dynamically loads a minifilter driver into the system). Объявление содержится в fltuser.h, который входит в WDK.  Ее мне и нужно вызывать.
При компиляции выдается ошибка: c:\ddk\inc\ddk\fltuserstructures.h(22) : fatal error C1012: unmatched parenthesis : missing ')'. А ведь fltuserstructures.h является майрософтским файлом. 
Навсякий случай прикрепляю эти два файла.

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  ddk.rar 4,98 Kb
PM MAIL   Вверх
smoke_man
Дата 21.12.2009, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



Посмотри тут.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
KAlex1
Дата 21.12.2009, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Smoke_man, Благодарю за полезную ссылку. оттуда я вынес что нужно в include directories добавить еще C:\WDK\inc\api.
Добавив это, ошибка сменилась на error C3861: 'FilterLoad': identifier not found. Хотя нужный fltuser.h подключен.
FilterLoad это функция которую я вызываю. 
Я предпологаю, что это из-за того что не выполняется условие #if FLT_MGR_BASELINE, после которого в хедере идет объявление FilterLoad
Кусочек кода fltuser.h : 
Код

...
#define FLT_MGR_BASELINE (((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WIN2KSP4))) || \
                          ((OSVER(NTDDI_VERSION) == NTDDI_WINXP) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WINXPSP2))) || \
                          ((OSVER(NTDDI_VERSION) == NTDDI_WS03)  && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WS03SP1))) ||  \
                          (NTDDI_VERSION >= NTDDI_VISTA))

#define FLT_MGR_AFTER_XPSP2 (((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WIN2KSP4))) ||  \
                             ((OSVER(NTDDI_VERSION) == NTDDI_WINXP) && (SPVER(NTDDI_VERSION) >  SPVER(NTDDI_WINXPSP2))) ||  \
                             ((OSVER(NTDDI_VERSION) == NTDDI_WS03)  && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WS03SP1))) ||   \
                             (NTDDI_VERSION >= NTDDI_VISTA))
...
#include <fltUserStructures.h>

#ifdef __cplusplus
extern "C" {
#endif

#if FLT_MGR_BASELINE
//
//  Functions for loading, unloading and monitoring Filters
//

__checkReturn
HRESULT
WINAPI
FilterLoad (
    __in LPCWSTR lpFilterName
    );

__checkReturn
HRESULT
WINAPI
FilterUnload (
    __in LPCWSTR lpFilterName
    );
...
#endif

Вот на каких основаниях я пологаю что не выполняется условие #if FLT_MGR_BASELINE:
Включив в C/C++ -> Preprocessor -> Generate Processed File - "With Line Numbers (/P)". На этапе компиляции я получаю кучу файлов .i
И вставив в свой код вот такую вот проверку: 
Код

int test(void)
{
    FLT_MGR_BASELINE;
}

В .i файле я нахожу вот что:
Код

int test(void)
{
(((((0x05010000) & 0xFFFF0000) == 0x05000000) && ((((0x05010000) & 0x0000FF00) >> 8) >= (((0x05000400) & 0x0000FF00) >> 8))) || ((((0x05010000) & 0xFFFF0000) == 0x05010000) && ((((0x05010000) & 0x0000FF00) >> 8) >= (((0x05010200) & 0x0000FF00) >> 8))) || ((((0x05010000) & 0xFFFF0000) == 0x05020000) && ((((0x05010000) & 0x0000FF00) >> 8) >= (((0x05020100) & 0x0000FF00) >> 8))) || (0x05010000 >= 0x06000000));
}


Заменив проверку на :
Код

#if FLT_MGR_BASELINE
int test(void)
{
    FLT_MGR_BASELINE;
}
#endif

В .i файле я такого не нахожу. Что говорит, о том что #if FLT_MGR_BASELINE не выполняется. 

Причем с включенной опцией C/C++ -> Preprocessor -> Generate Processed File - "With Line Numbers (/P)". Мне выдает ошибку что cannot open file '.\Debug\stdafx.obj'. Т.е. этого файла просто нет. Но это неважно потому что если откулючить эту опцию, то такой ошибки не возникает.

Система WINXP SP3.

Есть ли у кого-нибудь идеи почему не выполняется #if FLT_MGR_BASELINE?  

PM MAIL   Вверх
smoke_man
Дата 21.12.2009, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



А если добавить:
Код

#define WINVER 0x500
#define _WIN32_WINNT 0x0500
#define NTDDI_VERSION NTDDI_WINXP



--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
KAlex1
Дата 22.12.2009, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



К той ошибке что была \usermodeapp1\usermodeapp1dlg.cpp(288) : error C3861: 'FilterLoad': identifier not found
добавляется вот это:
 warning C4005: 'WINVER' : macro redefinition
...\usermodeapp1\stdafx.h(18) : see previous definition of 'WINVER'
....\usermodeapp1\usermodeapp1dlg.cpp(20) : warning C4005: '_WIN32_WINNT' : macro redefinition
....\usermodeapp1\stdafx.h(22) : see previous definition of '_WIN32_WINNT'
...\usermodeapp1\usermodeapp1dlg.cpp(21) : warning C4005: 'NTDDI_VERSION' : macro redefinition
 c:\ddk\inc\api\sdkddkver.h(203) : see previous definition of 'NTDDI_VERSION'


Это сообщение отредактировал(а) KAlex1 - 22.12.2009, 00:23

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  stdafx.h 2,80 Kb
PM MAIL   Вверх
bra1ny
Дата 22.12.2009, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



скомпильте build'ом. 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 22.12.2009, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



У меня user-mode приложение содержит окно созданное при помощи классов MFC. 
Скомпилит ли build в этом случае? Я себе не совсем представляю как буду выглядеть файлы sources. и makefile. ) 


Это сообщение отредактировал(а) KAlex1 - 22.12.2009, 01:21
PM MAIL   Вверх
xvr
Дата 22.12.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Проверь как определен NTDDI_VERSION (в \ddk\inc\api\sdkddkver.h)
Он должен быть или NTDDI_VISTA, а для XP должен быть сервис пак не ниже 2

PM MAIL   Вверх
bra1ny
Дата 22.12.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

У меня user-mode приложение содержит окно созданное при помощи классов MFC. 

понятно) 

Я просто ради интереса скомпилил пример scanner из ддк(юзермодную часть) , которая использует FilterLoad(). Посмотрите файл sources к ней.

Это сообщение отредактировал(а) bra1ny - 22.12.2009, 14:42
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
bra1ny
Дата 24.12.2009, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



А почему бы просто  не подгрузить(GetProcAddress)  fltlib.dll и Вызвать FilterLoad. 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 26.12.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



я думаю, динамически вызывать FilterLoad не пойдет, потому что если бы ее можно было вызывать когда угодно, то в хедере не было бы всяких условий.  Попробую скомпилить build-oм.
PM MAIL   Вверх
bra1ny
Дата 26.12.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Код

typedef HRESULT (__stdcall *MYPROC)( LPCWSTR  lpFilterName  );
       MYPROC addr;
    HRESULT res;
    addr = (MYPROC) GetProcAddress( LoadLibrary("fltlib.dll") , "FilterLoad");
    printf("FilterLoad at : %08X\n" , addr );
    res = addr(L"ololo");
    if( res != S_OK ) printf(" epic fail!\n");
    if( res == HRESULT_FROM_WIN32 (ERROR_FILE_NOT_FOUND) ) printf("yep!\n");


Я бы так сделал)
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
bra1ny
Дата 27.12.2009, 03:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



И так можете меня считать извращенцем )) Но я разреверсил FilterLoad и написал свой аналог)) 
Кратко Говоря вызов FilterLoad сводится к NtDeviceIoControlFile на FltMgr. Посылается структура 2 байта + строка. 
Код

typedef struct _tagLOAD
{
    WORD Len;
    WCHAR ServiceName[512];
} LOAD , *PLOAD;

 

Ну вот мой пример(тестил на примере из ддк (scanner) ).

Код

#include<stdio.h>
#include<windows.h>

typedef struct _tagLOAD
{
    WORD Len;
    WCHAR ServiceName[512];
} LOAD , *PLOAD;

#define MAGIC_IOCTL 0x00088004 

int main( int argc , char *argv[] )
{
    HANDLE hDevice;
    LOAD service_to_load;
    BOOL err;
    DWORD dwRet=0;


    hDevice = CreateFile ("\\\\.\\FltMgr" , GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ | FILE_SHARE_WRITE , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL );
    if( hDevice == INVALID_HANDLE_VALUE )
    {
        printf("CreateFile failed with status : %d\n" , GetLastError() );
        return -1;
    }

    wcscpy( service_to_load.ServiceName , L"Scanner");
    service_to_load.Len = wcslen( service_to_load.ServiceName )*sizeof(WCHAR);
    err = DeviceIoControl( hDevice , MAGIC_IOCTL , &service_to_load , sizeof(service_to_load) , NULL , 0 , &dwRet , NULL );
    if( !err )
    {
        printf("sorry\n");
        goto __end;
    }
    printf(":)\n");

__end:

    CloseHandle( hDevice );
    return 0;
}


user posted image

Это сообщение отредактировал(а) bra1ny - 27.12.2009, 03:40
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
xvr
Дата 27.12.2009, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



А теперь выйдет очередной SP к Винде, или программу запустят на другой Винде, и MAGIC_IOCTL изменится, или _tagLOAD поменяется, и все, приплыли  smile Лучше разберитесь с оригиналом

PM MAIL   Вверх
bra1ny
Дата 27.12.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата(xvr @ 27.12.2009,  12:14)
А теперь выйдет очередной SP к Винде, или программу запустят на другой Винде, и MAGIC_IOCTL изменится, или _tagLOAD поменяется, и все, приплыли  smile Лучше разберитесь с оригиналом

Да это все понятно) Это так чисто интерес в 4 утра) 

Это сообщение отредактировал(а) bra1ny - 27.12.2009, 14:39
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 28.12.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



bra1ny, интерес как раз для 4х утра))

Если кто желает поиграться драйвером) Пожалуйста. 
юзер-мод приложение незаконченное немного. 

Это сообщение отредактировал(а) KAlex1 - 28.12.2009, 15:46

Присоединённый файл ( Кол-во скачиваний: 49 )
Присоединённый файл  DADDrv.rar 302,75 Kb
PM MAIL   Вверх
bra1ny
Дата 28.12.2009, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



У меня ничего не заработало))) 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 28.12.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Вначеле драйвер устанавливаете при помощи .inf файла. Затем запускате прогу выбираете папки для блокирования. 
После того как выбрали. Нажимаете "Заблокировать". После нажимаете "Load". Если изменяете список папок, вначале нажмите "Unload". Потом ""Заблокировать" и потом "Load".
PM MAIL   Вверх
bra1ny
Дата 28.12.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



а вот в чем фишка) Надо сначала указать папки, а потом load =)
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 28.1.2010, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Вопрос считаю, на определенном уровне, решенным. 
Благодарю за полезные советы!  smile 

PM MAIL   Вверх
Heal
Дата 22.4.2011, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 12.4.2011

Репутация: нет
Всего: нет



Здравствуйте. Я написал программу, которая запрещает/разрешает доступ к каталогу на уровне прав доступа. Я так понимаю, что это не эффективно, т.к. можно вручную снять это ограничение. Про читая ваши посты, я понял, что драйвер получается ниже и так просто ограничение не снимешь. Подскажите какую информация мне посмотреть, что бы написать такой же драйвер и можно ли его написать на Builder'e 6?
PM MAIL   Вверх
xvr
Дата 23.4.2011, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(Heal @  22.4.2011,  16:39 Найти цитируемый пост)
Подскажите какую информация мне посмотреть, что бы написать такой же драйвер

DDK/WDK в MSDN на MS

Цитата(Heal @  22.4.2011,  16:39 Найти цитируемый пост)
можно ли его написать на Builder'e 6? 

Нет

PM MAIL   Вверх
Heal
Дата 23.4.2011, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 12.4.2011

Репутация: нет
Всего: нет



Спасибо. Т е его надо собирать в Visual studio, которая заточена на сбор драйвера???
PM MAIL   Вверх
xvr
Дата 23.4.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(Heal @  23.4.2011,  13:13 Найти цитируемый пост)
Т е его надо собирать в Visual studio, которая заточена на сбор драйвера???

Штатное средство сборки входит в состав DDK/WDK. При большом желании можно собрать и студией, но понадобится большой шаманский бубен  smile 
PM MAIL   Вверх
Heal
Дата 24.4.2011, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 12.4.2011

Репутация: нет
Всего: нет



Нубский вопрос, но все таки задам - там в чем его собирать?  smile 
PM MAIL   Вверх
bra1ny
Дата 24.4.2011, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



build' ом
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 31.5.2012, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



выкладываю сорцы(со вспомогательными проектами) 3х летней давности) может быть кому-нибудь будет полезно, для общего развития.

помню что за этот курсовой получил твердую 5, и всем студентам того же желаю.

Благодарю всех, кто принимал участие, и подсказывал. Особенно  bra1ny и xvr.

Это сообщение отредактировал(а) KAlex1 - 31.5.2012, 20:53

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  DADDrv_sources.rar 472,34 Kb
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.2487 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.