CaptainFlint
Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Итак, снова требуется помощь многоуважаемых посетителей форума, ибо заметился непонятный мне баг: подмонтированный диск недоступен для работы, пока программа, его подключившая, не завершится. Опишу поподробнее. Во-первых, я скачал вот этот файлик. Там находится пример программы для динамического подключения дисковых образов как новых дисков в системе (программа плюс драйвер). Драйвер я не трогал, ковырялся только с программной частью. Там есть два метода: FileDiskMount и FileDiskUmount. main() парсит параметры командной строки и вызывает соответствующую функцию с нужным набором параметров. Я сделал свою программу - тестовый пример: выводится диалог, на нажатие OK вызывается метод FileDiskMount с набором параметров для подключения конкретного файла как диска Z: Код: void CNewDiskDlg::OnOK() { OPEN_FILE_INFORMATION* ofi = (OPEN_FILE_INFORMATION*)malloc(sizeof(OPEN_FILE_INFORMATION) + 50); memset(ofi, 0, sizeof(OPEN_FILE_INFORMATION) + 50); strcpy((char*)(ofi->FileName), "\\??\\C:\\temp\\Retrib.iso"); ofi->FileNameLength = strlen((char*)(ofi->FileName)); FileDiskMount(0, ofi, 'z', TRUE); // CDialog::OnOK(); } | Все параметры получены в результате прохода main() оригинальной прогрраммы, т.е. в параметрах ошибок точно нет! Последняя строка закомменчена, т.е. при нажатии OK диалог не закрывается. В этом случае диск Z: в системе появляется, но доступа к нему нет. Как только я закрываю диалог по нажатию Cancel - диск сразу становится доступен, с него читаются все файлы и т.д. Если же в вышеприведённом коде последнюю строчку раскомментировать, тоо диалог закрывается сразу после нажатия OK, и соответственно диск Z: доступен для работы сразу после этого. Подскажите, плиз, в каком направлении копать, а то я вообще не понимаю, как такое может быть... Мне обязательно надо, чтобы программа не завершалась. Можно, конечно, написать доп. прогу, которую запускать дополнительным процессом, но это же изврат! Кстати, я пытался сделать подключение в отдельном потоке - не срабатывает, всё равно ждёт завершения всей программы...
---------- Почему же, ё-моё, ты нигде не пишешь "ё"? |
|