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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет доступа к каталогу 
V
    Опции темы
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1124 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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