Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.14;
Скачать: CL | DM;

Вниз

Драйвер   Найти похожие ветки 

 
Synset   (2007-09-13 14:11) [0]

Можете подсказать что делает код, и почему не работает:
Есть драйвер виртуального диска, и управляющее приложение при маунте делает следуещее:

   char    VolumeName[] = "\\\\.\\s:";
   char    DeviceName[255];
   HANDLE  Device;
   DWORD   BytesReturned;

   if (!DefineDosDevice(
       DDD_RAW_TARGET_PATH,
       &VolumeName[4],
       DeviceName
       ))
   {
       PrintLastError(&VolumeName[4]);
       return -1;
   }

   Device = CreateFile(
       VolumeName,
       GENERIC_READ | GENERIC_WRITE,
       FILE_SHARE_READ | FILE_SHARE_WRITE,
       NULL,
       OPEN_EXISTING,
       FILE_FLAG_NO_BUFFERING,
       NULL
       );

   if (Device == INVALID_HANDLE_VALUE)
   {
       PrintLastError(&VolumeName[4]);
       DefineDosDevice(DDD_REMOVE_DEFINITION, &VolumeName[4], NULL);
       return -1;
   }



После CreateFile,
Device = INVALID_HANDLE_VALUE
и работа приложения заканчивается, из за чего это может быть.

ПРиложение само по себе - это длл.(Криво сказано но суть передана :)) )


 
clickmaker ©   (2007-09-13 14:14) [1]

а PrintLastError чего говорит?


 
Сергей М. ©   (2007-09-13 14:15) [2]


> и работа приложения заканчивается


Как это "заканчивается" ? А строчку PrintLastError() кто исполняет, святой дух ?)


 
Synset   (2007-09-13 14:18) [3]


> clickmaker ©   (13.09.07 14:14) [1]

PrintLastError говорит что невозможно "Не удается найти указанный файл"


> Сергей М. ©   (13.09.07 14:15) [2]

PrintLastError()  - функция, ее код не указал, не имеет смысла...


 
clickmaker ©   (2007-09-13 14:25) [4]

а DeviceName чему равно? собственно Target path то есть


 
Synset   (2007-09-13 14:30) [5]

А вот ничему и не равно! меня тоже этот вопрос интересовал, в МСДНе как то не понятно написано для чего он точно нужен в ф-ии DefineDosDevice!

Причем нужен он только при флаге DDD_RAW_TARGET_PATH.

Может путь к файлу надо указывать?

Самое интересно, что этот код был взят из РАБОТАЮЩЕЙ программу и вставлен в длл.


 
Сергей М. ©   (2007-09-13 14:35) [6]

А что говорит отладчик по поводу фактического значения параметра VolumeName при вызове CreateFile ?


 
Synset   (2007-09-13 14:37) [7]


> Сергей М. ©   (13.09.07 14:35) [6]

255 букв M :)


 
Synset   (2007-09-13 15:45) [8]

DefineDosDevice - вот эта функция не правильно отрабатывает!
Причем в консольном приложении работает нормально, а вот в длл что то глючит!


 
Synset   (2007-09-13 15:46) [9]

Может кто знает в чем тут проблемма?


 
clickmaker ©   (2007-09-13 15:54) [10]


> Причем в консольном приложении работает нормально, а вот
> в длл что то глючит

ищи 10 отличий


 
Synset   (2007-09-13 16:12) [11]

Все разобрался, всем спасибо!


 
Сергей М. ©   (2007-09-13 17:00) [12]


> Все разобрался


Стоило ли тогда сотрясать воздух, если чуть подумал и тут же разобрался ?)


 
clickmaker ©   (2007-09-13 17:02) [13]


> [12] Сергей М. ©   (13.09.07 17:00)

ну иногда, чтобы сняться с ручника, достаточно озвучить вопрос другим людям :)

> [11] Synset   (13.09.07 16:12)

Тут принято говорить, в чем было дело. А то, мало ли, кто-то на теже грабельки наступит


 
Сергей М. ©   (2007-09-13 17:03) [14]


> clickmaker ©   (13.09.07 17:02) [13]


> чтобы сняться с ручника, достаточно озвучить


Ну в целом - да, согласен)



Страницы: 1 вся ветка

Текущий архив: 2007.10.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
3-1180078722
DelphiLexx
2007-05-25 11:38
2007.10.14
FIBDataSet.RollBack


2-1189972791
Alexey_K
2007-09-16 23:59
2007.10.14
Окно, подобие понели задач


15-1189612960
ANTPro
2007-09-12 20:02
2007.10.14
Руссификация Windows Vista Ultimate EN


2-1188218496
Riply
2007-08-27 16:41
2007.10.14
Объявление "лишних" переменных в процедуре.


15-1189495444
iam
2007-09-11 11:24
2007.10.14
Методики раз-ки ПО при сильно изменяющихся требованиях