![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| VictorBondarenko |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 14.2.2005 Репутация: нет Всего: нет |
Написал процедуру для сбора статистики работы сидюка (привожу ее ниже).
Она не работает. DeviceIoControl после правильной работы должна выдавать True, a у меня всегда False. Чтобы проверить можно ли так вообще что-то делать с сидюком, я поставил константу IOCTL_DISK_PERFORMANCE=$74808; (этот код приказывает сидюку "высунь язык"). Больше ничего не менял. Все сработало сидюк высунул язык. В чем же проблема??? Перепроверил код $70020. Все правильно. Посмотрите пожалуйста процедуру, может что-то заметите. Заранее благодарен за внимание и помощь. И еще, работаю я очень по идиотски: залажу в DDK 2600 в его .h файлы, ищу в них нужные структуры и константы, перевожу с С++ в Delphi. Может подскажите какой-то unit , где бы все, что может понадобиться для работы с СД уже было. С уважением и благодарностью, Виктор // Эта процедура для сбора статистики работы сидюка // не работает
Это сообщение отредактировал(а) Girder - 15.2.2005, 14:07 |
|||
|
||||
| Girder |
|
||||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 25 Всего: 155 |
1)
2)Добавь вывод ошибки (если она возникнет)
3)открой командную строку и набери: "diskperf -y" 4)Также проверь работу данной процедуры на жестком диске, т.е. DriveLetter := 'C'; //Или какой он у тебя там PS: Для CD... работать не будет -------------------- Как слышим, так и пишим. Истина где-то там... |
||||
|
|||||
| VictorBondarenko |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 14.2.2005 Репутация: нет Всего: нет |
Глубокоуважаемый Girder !
Большое спасибо за участие в моих проблемах, внес все 4 твои идеи но, к сожалению, результаты пока мрачные: 1. На diskperf -y Система отвечает: " Счетчики производительности логических и физических дисков на этом компе включаются автоматически. Счетчики грубой оценки также включаются для IOCTL_DISK_PERFORMANCE". 2. Перепробовал работу со всеми устройствами: на А: и F: (Это СД) ошибка 1 на С: Д: Е: (Это все НЖМД) ошибка 122. Не знаю где посмотреть, что означают эти коды коды. Я уже полностью иссяк, если у тебя еще будут какие-либо идеи по этому поводу, приму их с большой признательностью. С глубоким уважением Виктор |
|||
|
||||
| Girder |
|
||||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 25 Всего: 155 |
PS: У меня для дисков... код работал на ура Приведи свой код... а то мож что не так ты перенес! Это сообщение отредактировал(а) Girder - 16.2.2005, 12:12 -------------------- Как слышим, так и пишим. Истина где-то там... |
||||
|
|||||
| VictorBondarenko |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 14.2.2005 Репутация: нет Всего: нет |
Дорогой Girder!
Все ра-бо-та-ет!!!!!!! Спасибо!!!!!!!!!!!!!!!!!!!! Но, к сожалению, головная боль осталась. Я же все это делал чтобы добраться до СD, а IOCTL_DISK_PERFORMANCE как выяснилось с СД не работает. Но я видел команду IOCTL_CDROM_TOC_ATIP (пишу по памяти может не очень точно), для чтения ATIP на CD, а там требуется такая структура.
Здесь, как видно, первые 13 переменных битовые. Но как задать в записи Delphi переменную из 1 или 3 бит черт его знает, ума не приложу. Може ты или кто-то другй подскажет. Прошу прощения если вопросы покажутся уж очень детским. С большой благодарностью и уважением, Виктор Это сообщение отредактировал(а) Alex - 26.2.2005, 10:50 |
|||
|
||||
| Soldat |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.12.2004 Репутация: нет Всего: нет |
Дальше, при помощи логических операций и операторов сдвига считывать или записывать. Ex:
|
||||
|
|||||
| VictorBondarenko |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 14.2.2005 Репутация: нет Всего: нет |
Уважаемые Girder, Soldat и другие!
Я все пытаюсь напрямую что-нибудь прочитать с СД. Но головная боль все не проходит. Ничерта не получается. Ниже привожу процедуру для чтения ATIP c сидюка. Я поставил GetLastError, которая выдает ошибку 87 выполнения функции DeviceIoControl. Заранее благодарю если кто чего заметит и подскажет. С уважением, Виктор
Высвечивается Ошибка 87 Это сообщение отредактировал(а) Girder - 3.3.2005, 22:22 |
|||
|
||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
Нужно вместо строк:
написать:
Но я сколько дисков не пробовал, всегда ATIP - пустой (out_data.Length = 2)... Если в поле Format (in_data.par1) ставить не 4, а 0,1,2 или 5 - то возвращаются различные данные... а ATIP не получается... Это сообщение отредактировал(а) p0s0l - 6.3.2005, 14:42 -------------------- С уважением, г-н Посол. |
||||
|
|||||
| VictorBondarenko |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 14.2.2005 Репутация: нет Всего: нет |
Уважаемый p0s0l и другие уважаемые люди!
Я внес рекомендованые тобой изменения, но все равно выскакивает Ошибка 97. Не читается даже пустой ATIP. Пробовал другой формат для чтения с СД текстовой информации CDROM_READ_TOC_EX_FORMAT_CDTEXT=$5; Конечно поменял и var out_data: CDROM_TOC_CD_TEXT_DATA; сделал все как положено ( с моей точки зрения), но выскакивает Ошибка 1. Я уже думаю может что-то с операционной системой У меня стоит ХР , а Delphi 7.0 Еще раз привожу полный текст процедуры для чтения ATIP может кто-то что-то заметит. С уважением, Виктор
|
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
У меня работает этот код, ничего не менял...
Мож у тебя CD-диск какой глючный ? Или CDROM недоделанный ? Попробуй установить виртуальный CDRom - я проверял Alcohol, Daemon и VirtualCD4 - со всеми работает... -------------------- С уважением, г-н Посол. |
|||
|
||||
| VictorBondarenko |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 14.2.2005 Репутация: нет Всего: нет |
Уважаемый Posol и другие умные люди!
Я что-то пощелкал, код тоже не менял и РА-БО-ТА-ЕТ!!!!!!!!!!!!!!!!!!!!!!!!!!! ATIP читается нормально, но Алкоголь120% вносит какую-то фигню. Когда он стоял, то ATIP давал все нули и Length=2 как ты писал. Я его снял и стало читаться нормально. Кроме того, я читал ATIP программой CDRIdentifier v.1.63 результаты совпадают с моей прогой. Так когда стоял Алкоголь CDRIdentifier v.1.63 перестает работать все выдает unknown. Так что с этим Алкоголем надо быть осторожным. Но вот, дальше пошли какие-то чудеса, какая-то фигня. Я со своей прогой, которая у меня правильно читает ATIP, со своим проверенным СД-диском, пошел поработать на другие компы. Два компа, как и мой, под ХР показали: первый ATIP - 0, второй - совершенно другое значение ATIP этого же диска чем читалось на моем компе????????????!!!!!!!!! Комп под 2000 выдал Ошибку 1. Два компа под 98 там прога даже не добралась до DeviceIoControl, была ошибка 2 в CreateFile. Что это за фигня может каких-то dll-ок надо поставить? Уже голова отказывется что-то понимать. Может кто что присоветует? С уважением и благодарностью за помощь, Виктор |
|||
|
||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
Наверное, придётся заюзать ASPI, т.к. это универсальный метод для работы под любой виндой... Правда, придётся таскать с собой DLL-ку... (хотя возможно обойтись и без DLL, если напрямую работать с драйвером через DeviceIoControl, но этим я не занимался)... Щас у себя попробовал - тоже якобы "читается" ATIP (т.е. Length = 2):
Добавлено @ 00:09 ЗЫ: Просьба, плиз, юзай функцию SysErrorMessage( <код ошибки> ), она возвратит текстовое описание ошибки... В форуме пиши не код ошибки, а её название... -------------------- С уважением, г-н Посол. |
||||
|
|||||
| Guest |
|
|||
|
Unregistered |
Бью еще раз челом Послу и другим не менее уважаемым людям!
А фигня вот такая получается: 1. Я пытался получить информацию о SCSI –устройстве TargetId, Lun, Host , но получил сообщение 1-Неверная функция. Коды процедуры привожу ниже. Может быть кто-то что-то подскажет. 2. Попробовал с помощью ASPI читать ATIP, но не получилось. Я установил Adaptec ASPI, но при установке написано, что он для NT, а у меня ХР. Может быть в этом дело? Хотя было сообщение о том, что установлено сексессфул.У кого-то есть такие сведения? 3. Где ( в каких структурах) находиться название фирмы-производителя СД диска и тип материала поверхности СД ( к примеру, какой-то там Фтор….циан…)? Перерыл весь DDK 2600, но чего-то не заметил. Может кто знает? C уважением и благодарностью за внимание, Виктор
Это сообщение отредактировал(а) p0s0l - 28.3.2005, 11:59 |
|||
|
||||
| ArkaNN |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 9.7.2005 Где: Санкт-Петербург Репутация: нет Всего: нет |
Здравствуйте, уважаемые!!!
Код, приведенный в сообщении от 10.3.2005, 14:41 у меня тоже работает. Только, как из out_data вытащить серийный номер диска. Заранее спасибо, Аркадий... |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |