|
|
|
Как узнать есть ли дискета в дисководе без
|
|||
|---|---|---|---|
|
#18+
В WinXP иногда происходит такой баг: когда пытаемся открыть дискетку с помощью функции CreateFile, передавая первым параметром "\\.\a" (символы экранирования опущены, если речь идет о C/C++), но самой дискетки физически нет, то система выдает страшную ошибку или вообще рушится. Быть может кто-нибудь знает как проверить есть ли дискета с помощью других методов? Пробовал перебирать устройства с помощью SetupDiGetClassDevs по GUID_DEVINTERFACE_FLOPPY, чтобы достать SP_DEVICE_INTERFACE_DATA, а оттуда флаг статуса. Но! по этому гуиду ничего не находится. Сам дисковод можно найти по GUID_DEVINTERFACE_VOLUME: Код: plaintext 1. 2. 3. 4. Пробовал по полученному Handle отправлять через DeviceIoControl коды IOCTL_DISK_GET_DRIVE_GEOMETRY или IOCTL_STORAGE_GET_MEDIA_TYPES, но все равно не помогло, первый в любом случае вылетает со 1110 ошибой (ERROR_MEDIA_CHANGED - The media in the drive may have changed), а второму все равно есть дискета или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2008, 01:08:59 |
|
||
|
Как узнать есть ли дискета в дисководе без
|
|||
|---|---|---|---|
|
#18+
и еще один сопутсвующий вопрос, кто-нибудь знает, что за чудо устройства, кроме дискеток/дисководов должны находиться по GUID_DEVINTERFACE_FLOPPY?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2008, 01:11:41 |
|
||
|
Как узнать есть ли дискета в дисководе без
|
|||
|---|---|---|---|
|
#18+
W_and_Gи еще один сопутсвующий вопрос, кто-нибудь знает, что за чудо устройства, кроме дискеток/дисководов должны находиться по GUID_DEVINTERFACE_FLOPPY?? Zip. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2008, 07:13:17 |
|
||
|
Как узнать есть ли дискета в дисководе без
|
|||
|---|---|---|---|
|
#18+
помнится, где-то можно было указать какой-то флаг, чтобы при считывании дискеты не выводилась ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2008, 15:43:59 |
|
||
|
Как узнать есть ли дискета в дисководе без
|
|||
|---|---|---|---|
|
#18+
W_and_Gпередавая первым параметром "\\.\a" (символы экранирования опущены, если речь идет о C/C++), но самой дискетки физически нет, то система выдает страшную ошибку или вообще рушится. Что значит рушится? Каким образом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2008, 15:58:11 |
|
||
|
Как узнать есть ли дискета в дисководе без
|
|||
|---|---|---|---|
|
#18+
nik_x , спасибо! maytonЧто значит рушится? Каким образом? Наверное происходит нечто более серьезное чем окошко со страшной ошибкой, возможно синий экран. Если дадите дня два-три уточню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2008, 17:00:15 |
|
||
|
Как узнать есть ли дискета в дисководе без
|
|||
|---|---|---|---|
|
#18+
Рушится, значит вплоть до синего экрана. Данная проблема решается, если убрать несуществующий флоппи из настроек биоса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2008, 10:34:58 |
|
||
|
Как узнать есть ли дискета в дисководе без
|
|||
|---|---|---|---|
|
#18+
Ну... значит это не баг WindowsXP ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2008, 11:21:18 |
|
||
|
Как узнать есть ли дискета в дисководе без
|
|||
|---|---|---|---|
|
#18+
maytonНу... значит это не баг WindowsXP ?По хорошему ф-ция должна была бы возвращать ошибку, а не вызывать вылет в синий экран ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2009, 16:14:29 |
|
||
|
Как узнать есть ли дискета в дисководе без
|
|||
|---|---|---|---|
|
#18+
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(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2009, 16:59:58 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=127&tid=1344636]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 357ms |

| 0 / 0 |
