Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как узнать есть ли дискета в дисководе без / 11 сообщений из 11, страница 1 из 1
29.11.2008, 01:08:59
    #35683181
W_and_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
В WinXP иногда происходит такой баг: когда пытаемся открыть дискетку с помощью функции CreateFile, передавая первым параметром "\\.\a" (символы экранирования опущены, если речь идет о C/C++), но самой дискетки физически нет, то система выдает страшную ошибку или вообще рушится.

Быть может кто-нибудь знает как проверить есть ли дискета с помощью других методов?

Пробовал перебирать устройства с помощью SetupDiGetClassDevs по GUID_DEVINTERFACE_FLOPPY, чтобы достать SP_DEVICE_INTERFACE_DATA, а оттуда флаг статуса. Но! по этому гуиду ничего не находится.

Сам дисковод можно найти по GUID_DEVINTERFACE_VOLUME:
Код: plaintext
1.
2.
3.
4.
MFG = (Стандартные дисководы гибких дисков)
Enumerator Name = FDC
Instance ID = FDC\GENERIC_FLOPPY_DRIVE\ 1 &349DA29& 0 & 0 
Device Path = \\?\fdc#generic_floppy_drive# 1 &349da29& 0 & 0 #{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
Но если использовать CreateFile и подставлять туда этот DevicePath, то ему все равно есть дискета или ее нет.
Пробовал по полученному Handle отправлять через DeviceIoControl коды IOCTL_DISK_GET_DRIVE_GEOMETRY или IOCTL_STORAGE_GET_MEDIA_TYPES, но все равно не помогло, первый в любом случае вылетает со 1110 ошибой (ERROR_MEDIA_CHANGED - The media in the drive may have changed), а второму все равно есть дискета или нет.
...
Рейтинг: 0 / 0
29.11.2008, 01:11:41
    #35683183
W_and_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
и еще один сопутсвующий вопрос, кто-нибудь знает, что за чудо устройства, кроме дискеток/дисководов должны находиться по GUID_DEVINTERFACE_FLOPPY??
...
Рейтинг: 0 / 0
29.11.2008, 07:13:17
    #35683232
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
W_and_Gи еще один сопутсвующий вопрос, кто-нибудь знает, что за чудо устройства, кроме дискеток/дисководов должны находиться по GUID_DEVINTERFACE_FLOPPY??

Zip.
...
Рейтинг: 0 / 0
29.11.2008, 15:43:59
    #35683449
Kagamin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
помнится, где-то можно было указать какой-то флаг, чтобы при считывании дискеты не выводилась ошибка.
...
Рейтинг: 0 / 0
29.11.2008, 15:58:11
    #35683456
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
W_and_Gпередавая первым параметром "\\.\a" (символы экранирования опущены, если речь идет о C/C++), но самой дискетки физически нет, то система выдает страшную ошибку или вообще рушится.
Что значит рушится? Каким образом?
...
Рейтинг: 0 / 0
30.11.2008, 17:00:15
    #35684037
W_and_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
nik_x , спасибо!

maytonЧто значит рушится? Каким образом?
Наверное происходит нечто более серьезное чем окошко со страшной ошибкой, возможно синий экран. Если дадите дня два-три уточню.
...
Рейтинг: 0 / 0
03.12.2008, 10:34:58
    #35689769
W_and_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
Рушится, значит вплоть до синего экрана. Данная проблема решается, если убрать несуществующий флоппи из настроек биоса.
...
Рейтинг: 0 / 0
03.12.2008, 11:21:18
    #35689966
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
Ну... значит это не баг WindowsXP ?
...
Рейтинг: 0 / 0
11.02.2009, 16:14:29
    #35811375
crt
crt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
maytonНу... значит это не баг WindowsXP ?По хорошему ф-ция должна была бы возвращать ошибку, а не вызывать вылет в синий экран
...
Рейтинг: 0 / 0
11.02.2009, 16:59:58
    #35811556
SoftParanoik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
MSDN

To get the media type(s) supported by a floppy drive, it is necessary to call CreateFile() to get a handle to the drive and then DeviceIoControl() to get the information. However, if there is no floppy disk in the floppy drive, the following message box may appear when CreateFile() is called for drive A (\\.\a:):

There is no disk in the drive. Please insert a disk into drive A:
When calling CreateFile(), be sure to use 0 for the access mode and FILE_SHARE_READ for the share mode so that the user will not be prompted to insert a floppy disk:

CreateFile(
szFileName,
0,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
0,
NULL
);

Another way to avoid the message box prompt is to put
SetErrorMode( SEM_FAILCRITICALERRORS );
before the call to CreateFile().
...
Рейтинг: 0 / 0
02.03.2009, 17:10:51
    #35846720
Java Programmer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать есть ли дискета в дисководе без
W_and_G,

Предлагаю захардкодить ответ - "дискеты в дисководе нет"
Потому что в современных компах дисководов нет :)

Ответ шуточный - не воспринимайте всерьез )
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как узнать есть ли дискета в дисководе без / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]