В общем-то проблема вот в чем...
удаляю дос имя диска...флешки
invoke DefineDosDevice,DDD_REMOVE_DEFINITION + DDD_RAW_TARGET_PATH,DevName,hLocalAlloc
затем его восстанавливаю его
invoke DefineDosDevice,DDD_RAW_TARGET_PATH,DevName,addr NameDosDevice
Все вроде бы хорошо, но после реконекта флешки к USB порту... и попытки открыть ее через Мой компьютер получаю сообщение об ошибке
Хотя через проводник я могу зайти на флешку... и с консоли тоже...
В чем возможная причина данного косяка? И как поправить это?
DRK>удаляю дос имя диска...флешки DRK>invoke DefineDosDevice,DDD_REMOVE_DEFINITION + DDD_RAW_TARGET_PATH,DevName,hLocalAlloc DRK>затем его восстанавливаю его DRK>invoke DefineDosDevice,DDD_RAW_TARGET_PATH,DevName,addr NameDosDevice
DRK>Хотя через проводник я могу зайти на флешку... и с консоли тоже... DRK>В чем возможная причина данного косяка? И как поправить это?
Вкратце: DefineDosDevice достаточно было во времена NT
В следующих версиях необходимо использовать SetVolumeMountPoint/DeleteVolumeMountPoint
Ищем в интернете (или берем из samples\Samples\winbase\IO\DLEdit в SDK) файл dledit.cpp
Здравствуйте, MShura, Вы писали:
MS>Вкратце: DefineDosDevice достаточно было во времена NT MS>В следующих версиях необходимо использовать SetVolumeMountPoint/DeleteVolumeMountPoint MS>Ищем в интернете (или берем из samples\Samples\winbase\IO\DLEdit в SDK) файл dledit.cpp
MS>Изучаем как оно устроено
Спасибо за инфу... Я так понял что под 7-рку уже DefineDosDevice будет криво работать?
Или его вообще уберут?
Интересно то что после DefineDosDevice,DDD_RAW_TARGET_PATH т.е. назначения устройства... и отключения девайса от компа... старое значение не удаляется... и при очередном подключении флешки насзначаеться новое дос имя устройства которое каким-то образом накладывается на старое...
Так вот выше описанная ошибка правиться почему-то повторным удалением нового дос имени... и тогда диск становиться доступным...
Как избежать подобного косяка... ??? В dledit.cpp я этого не нашел...
DRK>Интересно то что после DefineDosDevice,DDD_RAW_TARGET_PATH т.е. назначения устройства... и отключения девайса от компа... старое значение не удаляется... и при очередном подключении флешки насзначаеться новое дос имя устройства которое каким-то образом накладывается на старое... DRK>Так вот выше описанная ошибка правиться почему-то повторным удалением нового дос имени... и тогда диск становиться доступным... DRK>Как избежать подобного косяка... ??? В dledit.cpp я этого не нашел...
Повторяю медленно:
В Win2K и выше используйте SetVolumeMountPoint/DeleteVolumeMountPoint
Здравствуйте, MShura, Вы писали:
MS>Повторяю медленно: MS>В Win2K и выше используйте SetVolumeMountPoint/DeleteVolumeMountPoint
Я могу повторить еще медленнее — мне не подходит вариант с данными функами...
Мне не нужно размонтирование ... а нужно полное удаление линков на на диск...
и потом восстановление этого линка в глобале... и все
DRK> Я могу повторить еще медленнее — мне не подходит вариант с данными функами... DRK>Мне не нужно размонтирование ... а нужно полное удаление линков на на диск... DRK>и потом восстановление этого линка в глобале... и все
— А зачем их удалять?
— Что Вы делаете между удалением/восстановлением?
Я не телепат, но если это нужно для того о чем я думаю, то для этого есть другие способы.
Здравствуйте, MShura, Вы писали: MS>Я не телепат, но если это нужно для того о чем я думаю, то для этого есть другие способы.
Уж не знаю о чем вы думаете, но мне для того чтобы скрыть девайс (флешку) на момент проверки пароля...
И потом восстановление ее в проводнике, если пароль верен...
Это в крадце...
Так какие еще способы еще существуют, просвистите пожалста... если не жалко...
Здравствуйте, x64, Вы писали:
DRK>>...для того чтобы скрыть девайс (флешку) на момент проверки пароля...
x64>В какой именно момент требуется запрашивать пароль на доступ к флешке? Сразу же после её подключения в систему, я правильно понимаю?
В принципе да.. в момент DBT_DEVICEARRIVAL... или если флешка была подключена и программа была запущена позже..
после подключения...
Собственно нужно создать Link на устройство (в данном случае это флешка) в GLOBAL...
DefineDosDevice успешно грохает линки и глобальые и сессионные..
Но вот создает DefineDosDevice только сессионную ссылку..
И поэтому при переподключении флешки вылезает коллизия с линками...
Т.е. сессионная ссылка при отключении созданная DefineDosDevice не удаляется...
А при новом коннекте флешки создается новая глобальная ссылка...
Которая тоже указывает на одно и тоже устройство, что и сессионная...
Вот такая попа ..
Вопрос стоит четко... надо найти способ создания глобального линка на устройство после его удаления DefineDosDevice... желательно из юзермода.. чтобы не воять дров для этого... если это вообще реально...
Здравствуйте, x64, Вы писали:
x64>Это не правильный вопрос, учитывая задачу, которую ты решаешь. x64>В таком случае, задача решается не так, как ты пытаешься это сделать.
Здравствуйте, x64, Вы писали:
x64>>>В таком случае, задача решается не так, как ты пытаешься это сделать. DRK>>А как?
x64>Драйвер-фильтр файловой системы, отложенные запросы, etc.