Драйвер файловой системы
От: S_V_B Беларусь  
Дата: 27.10.11 09:04
Оценка:
Добрый день.

Я создаю драйвер файловой системы с типом устройства FILE_DEVICE_DISK_FILE_SYSTEM.
Все работает, но есть 1 но: windows или эксплоер при открытии моего диска начинает сам опрашивать подпапки. Как можно заставить эксплоер этого не делать?
Если установить тип устройства FILE_DEVICE_NETWORK_FILE_SYSTEM, то эксплоер не лазит по подпапкам, но в этом случае появляется ряд других проблем.

Спасибо
драйвер
Re: Драйвер файловой системы
От: x64 Россия  
Дата: 27.10.11 09:21
Оценка:
S_V>Я создаю драйвер файловой системы с типом устройства FILE_DEVICE_DISK_FILE_SYSTEM.

Это что за ересь? Ты не можешь создавать файловый фильтр с каким-то конкретным типом девайсов, тип девайса ты берёшь из pDevObj -> DeviceType у нижележащего девайса, в стек к которому присоединяешься в нужные моменты.

S_V>Все работает, но есть 1 но: windows или эксплоер при открытии моего диска начинает сам опрашивать подпапки.


И в чём тут проблема? Это стандартное поведение Проводника, когда он пытается отобразить эскизы.
Re[2]: Драйвер файловой системы
От: S_V_B Беларусь  
Дата: 27.10.11 09:59
Оценка:
Здравствуйте, x64, Вы писали:

x64>Это что за ересь? Ты не можешь создавать файловый фильтр с каким-то конкретным типом девайсов, тип девайса ты берёшь из pDevObj -> DeviceType у нижележащего девайса, в стек к которому присоединяешься в нужные моменты.


Это не ересь, это короткая формулировка.
Если длиннее, то я использую dokan (http://dokan-dev.net/en/). С его помощью я делаю что-то типа мапинга БД, то есть отображаю ее в проводнике (тотале, фаре), как будто это обычный диск. Соответственно, когда папок и подпапок много, диск начинает подтормаживать, так как идет много запросов.
Если у него задать тип девайса как FILE_DEVICE_NETWORK_FILE_SYSTEM, проводник не сканит подпапки, но в этом случае диск отображается как отключенное сетевое устройство (но это грабля уже dokan-а, ее тоже можно полечить, но в результате лечения появляются еще грабли).
Потому пытаюсь пойти по такому пути: нельзя ли заставить проводник не пытаться показывать эскизы для какого-то конкретного диска, может ключик в реестре можно прописать?
Re[3]: Драйвер файловой системы
От: x64 Россия  
Дата: 27.10.11 10:40
Оценка:
S_V>Потому пытаюсь пойти по такому пути: нельзя ли заставить проводник не пытаться показывать эскизы для какого-то конкретного диска, может ключик в реестре можно прописать?

Ключик есть (см. метод 4), но что, в таком случае, данная тема делает в этом разделе? Ключик не очень хороший вариант, не уверен, что пользователю понравится такое вмешательство в его настройки. А на уровне файловой системы отключить эскизы не получится, т.к. ты не сможешь отличить, когда Проводник читает папку по запросу пользователя, а когда — с целью создания эскизов. Такие дела.
Re[4]: Драйвер файловой системы
От: S_V_B Беларусь  
Дата: 27.10.11 11:06
Оценка:
Здравствуйте, x64, Вы писали:

S_V>>Потому пытаюсь пойти по такому пути: нельзя ли заставить проводник не пытаться показывать эскизы для какого-то конкретного диска, может ключик в реестре можно прописать?


x64>Ключик есть (см. метод 4), но что, в таком случае, данная тема делает в этом разделе? Ключик не очень хороший вариант, не уверен, что пользователю понравится такое вмешательство в его настройки. А на уровне файловой системы отключить эскизы не получится, т.к. ты не сможешь отличить, когда Проводник читает папку по запросу пользователя, а когда — с целью создания эскизов. Такие дела.


Да ключик нехороший вариант, значит придется решать изначальную проблему.
Изолью ее на всякий случай, вдруг мысль будет.
В Dokan-е есть такая опция использовать диск, как сетевой. Если ее включить, то диск отображается в сетевых устройствах (по кодам драйвера нашел, что в этом случае устанавливается тип устройства FILE_DEVICE_NETWORK_FILE_SYSTEM. В этом случае диск начинает существенно быстрее работать, но отображается как отключенное сетевое устройство. Для того, чтобы винда стала его считать подключенным в dll-ке реализуется 2 метода:
NPGetCaps и NPGetConnection.
И все бы ничего, но появился странный косяк (именно когда подключена длл-ка): я открываю файл ворд или эксэль с моего виртуального диска, потом его сразу закрываю, а в процессах ворд или эксэль продолжают висеть. Висят минут 5-10, а потом сами умирают. Проявляется только на x86, на x64 процессы закрываются нормально.
Может есть мысль в какую сторону можно копать?
Re[5]: Драйвер файловой системы
От: x64 Россия  
Дата: 27.10.11 12:50
Оценка:
S_V>Висят минут 5-10, а потом сами умирают.

Скорее всего, там где-то не завершаются какие-то запросы. Возьми отладчик, убей процесс, выполни команду типа "!process 0 6 winword.exe" и там для каждого потока будет список его IRP-пакетов, которые ещё не завершены. Проанализируй, что это за запросы, командой "!irp <address> 1" и узнаешь, куда в коде драйвера смотреть. Дальше по обстоятельствам. Но вообще-то это работа автора Dokan, напиши ему, пусть правит баги.
Re[6]: Драйвер файловой системы
От: S_V_B Беларусь  
Дата: 27.10.11 13:03
Оценка:
Здравствуйте, x64, Вы писали:

S_V>>Висят минут 5-10, а потом сами умирают.


x64>Скорее всего, там где-то не завершаются какие-то запросы. Возьми отладчик, убей процесс, выполни команду типа "!process 0 6 winword.exe" и там для каждого потока будет список его IRP-пакетов, которые ещё не завершены. Проанализируй, что это за запросы, командой "!irp <address> 1" и узнаешь, куда в коде драйвера смотреть. Дальше по обстоятельствам. Но вообще-то это работа автора Dokan, напиши ему, пусть правит баги.


Спасибо.
Будем искать)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.