Надо определить тип диска в приводе.

Форум для программистов

Сообщение FimanAuthor » Вт авг 17, 2004 9:21 pm

Сабж, желательно через IOCTL_SCSI_PASS_THROUGH, тип устройства вычесляю бз проблем, может мне надопросто список всех команд IOCTL_SCSI_PASS_THROUGH с описанием.
FimanAuthor
Прапор
 
Сообщений: 71
Зарегистрирован: Чт мар 18, 2004 5:50 am
Откуда: Россия
Пункты репутации: 0

Сообщение VadiMGP » Ср авг 18, 2004 7:13 am

2FimanAuthor IOCTL_SCSI_PASS_THROUGH выполняет команды, специфические для данного устройства, посылая просто блок данных в драйвер порта, в обход драйвера класса. Ты что, хочешь список всех команд всех устройств в мире??? :lol: Уточни чего именно надо.
Человеческая жизнь похожа на коробку спичек. Обращаться с ней серьезно - смешно. Обращаться несерьезно - опасно.
А. Рюноскэ
VadiMGP
Подполковник
 
Сообщений: 887
Зарегистрирован: Сб апр 26, 2003 10:32 am
Пункты репутации: 0

Сообщение FimanAuthor » Ср авг 18, 2004 9:34 am

Ну короче просто хочу узнать тип диска(CD-R, CD-RW и т.д), который вставлен в CD/DVD приводе.
FimanAuthor
Прапор
 
Сообщений: 71
Зарегистрирован: Чт мар 18, 2004 5:50 am
Откуда: Россия
Пункты репутации: 0

Сообщение VadiMGP » Ср авг 18, 2004 7:04 pm

Хм... Тяжко это. По идее надо брать через IOCTL_CDROM_GET_CONFIGURATION. Но документации - кот наплакал.
Человеческая жизнь похожа на коробку спичек. Обращаться с ней серьезно - смешно. Обращаться несерьезно - опасно.
А. Рюноскэ
VadiMGP
Подполковник
 
Сообщений: 887
Зарегистрирован: Сб апр 26, 2003 10:32 am
Пункты репутации: 0

Сообщение FimanAuthor » Ср авг 18, 2004 8:29 pm

Спасибо за подсказку вроде надыбал доку <a href='http://www.osr.com/ddk/storage/k307_7jn6.htm' target='_blank'>http://www.osr.com/ddk/storage/k307_7jn6.htm</a>
FimanAuthor
Прапор
 
Сообщений: 71
Зарегистрирован: Чт мар 18, 2004 5:50 am
Откуда: Россия
Пункты репутации: 0

Сообщение VadiMGP » Ср авг 18, 2004 9:34 pm

Кстати, а что насчет других устройств? Не сидюков. У меня есть, например, USB адаптер для 4 типов флешек. В системе он появляется как 4 диска. Коммандер пишет просто 4 раза - removable drive. Когда вставляешь катрочку приходится догадываться в каком из 4-х дисков она находится. Очень неудобно. А эксплорер - пишет честно: CF drive, SD drive и т.д.

Да, вот еще. Глянь сюда <a href='http://support.microsoft.com/default.aspx?scid=kb;en-us;264203' target='_blank'>http://support.microsoft.com/default.aspx?...kb;en-us;264203</a>
Может сгодится для чего-нибудь Это пример опроса всех дисковых устройств через SPTI.
Последний раз редактировалось VadiMGP Ср авг 18, 2004 9:35 pm, всего редактировалось 1 раз.
Человеческая жизнь похожа на коробку спичек. Обращаться с ней серьезно - смешно. Обращаться несерьезно - опасно.
А. Рюноскэ
VadiMGP
Подполковник
 
Сообщений: 887
Зарегистрирован: Сб апр 26, 2003 10:32 am
Пункты репутации: 0

Сообщение FimanAuthor » Ср авг 18, 2004 10:29 pm

Чтож можно другие устройства, но пока у меня нет практики с ними.
FimanAuthor
Прапор
 
Сообщений: 71
Зарегистрирован: Чт мар 18, 2004 5:50 am
Откуда: Россия
Пункты репутации: 0

Сообщение FimanAuthor » Чт авг 19, 2004 1:58 pm

Мне не удалось найти определение IOCTL_CDROM_GET_CONFIGURATION, какой у нее код?
FimanAuthor
Прапор
 
Сообщений: 71
Зарегистрирован: Чт мар 18, 2004 5:50 am
Откуда: Россия
Пункты репутации: 0

Сообщение VadiMGP » Пт авг 20, 2004 8:15 am

Это определено в файлах DDK.


#define IOCTL_CDROM_GET_CONFIGURATION CTL_CODE(IOCTL_CDROM_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS)


Но лучше всего установить весь DDK. Черт его знает, какие там зависимости выползут. У меня WinXPSP1 DDK.

На всякий случай <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
Последний раз редактировалось VadiMGP Пт авг 20, 2004 9:28 am, всего редактировалось 1 раз.
Человеческая жизнь похожа на коробку спичек. Обращаться с ней серьезно - смешно. Обращаться несерьезно - опасно.
А. Рюноскэ
VadiMGP
Подполковник
 
Сообщений: 887
Зарегистрирован: Сб апр 26, 2003 10:32 am
Пункты репутации: 0

Сообщение FimanAuthor » Сб авг 21, 2004 8:21 pm

отлично! Тока как я понел то это дело не поддерживается в win2k?
Поскоку качал сначала DDK для 2k, и не нашел там этих определений.
FimanAuthor
Прапор
 
Сообщений: 71
Зарегистрирован: Чт мар 18, 2004 5:50 am
Откуда: Россия
Пункты репутации: 0

Сообщение VadiMGP » Вс авг 22, 2004 4:36 am

Не обязательно. Вполне может оказаться, что поддерживается, просто не документировано. Такие вещи, как правило, требуют экспериментальной проверки. В любом случае, надо быть готовым к тому, что команды, передаваемые напрямую на устройство, могут не поддерживаться самим устройством. Напрмер, обычный сидюк почти наверняка не распознает CDRW.
Человеческая жизнь похожа на коробку спичек. Обращаться с ней серьезно - смешно. Обращаться несерьезно - опасно.
А. Рюноскэ
VadiMGP
Подполковник
 
Сообщений: 887
Зарегистрирован: Сб апр 26, 2003 10:32 am
Пункты репутации: 0

Сообщение FimanAuthor » Пт авг 27, 2004 9:39 pm

Короче потестировал я на нескольких устройствах, на половине GetLastError() = 1117 <!--emo&:(-->[img]style_emoticons/<#EMO_DIR#>/sad.gif[/img]<!--endemo-->

CD-RW
DVD-RAM
COMBO
CD-ROM
Последний раз редактировалось FimanAuthor Пт авг 27, 2004 9:43 pm, всего редактировалось 1 раз.
FimanAuthor
Прапор
 
Сообщений: 71
Зарегистрирован: Чт мар 18, 2004 5:50 am
Откуда: Россия
Пункты репутации: 0

Сообщение VadiMGP » Сб авг 28, 2004 10:29 am

А на второй половине что?

И может исходники покажешь как ты это делаешь?
Человеческая жизнь похожа на коробку спичек. Обращаться с ней серьезно - смешно. Обращаться несерьезно - опасно.
А. Рюноскэ
VadiMGP
Подполковник
 
Сообщений: 887
Зарегистрирован: Сб апр 26, 2003 10:32 am
Пункты репутации: 0

Сообщение FimanAuthor » Сб авг 28, 2004 8:40 pm

swprintf(Root, L"\\\\.\\%c:", path[0]);
HANDLE hDrive = CreateFile(Root, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);

if(hDrive != INVALID_HANDLE_VALUE)
{
GET_CONFIGURATION_IOCTL_INPUT gcii;
BYTE Data[4096];
DWORD s = 0;

gcii.Feature = FeatureProfileList;
gcii.RequestType = SCSI_GET_CONFIGURATION_REQUEST_TYPE_CURRENT;

if(DeviceIoControl(hDrive, IOCTL_CDROM_GET_CONFIGURATION, &gcii,sizeof(GET_CONFIGURATION_IOCTL_INPUT), &Data, 4096, &s, NULL))
{
MessageBox(0,"OK",0,0);
}
else MessageBox(0,"Error",0,0);
}
FimanAuthor
Прапор
 
Сообщений: 71
Зарегистрирован: Чт мар 18, 2004 5:50 am
Откуда: Россия
Пункты репутации: 0

Сообщение VadiMGP » Вт авг 31, 2004 7:25 pm

Действительно, какая-то хрень получается. Похоже, на 9х только через ASPI а на NT/2000 через SPTI можно добраться. А это такая муть... я глянул пример в DDK - тошно стало. Правда, на ХР есть IMAPI, но это только на ХР <!--emo&:(-->[img]style_emoticons/<#EMO_DIR#>/sad.gif[/img]<!--endemo-->

Можно конечно, попробовать поковыряться в открытых исходниках типа cdrtool или cdrdao, но тоже та еще радость, да и неизвестно, что там с DVD. В общем, плюнь до лучших времен.
Человеческая жизнь похожа на коробку спичек. Обращаться с ней серьезно - смешно. Обращаться несерьезно - опасно.
А. Рюноскэ
VadiMGP
Подполковник
 
Сообщений: 887
Зарегистрирован: Сб апр 26, 2003 10:32 am
Пункты репутации: 0


Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16