![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Здравствуйте !
Допустим, мы берем диск ( например CD ) и тремя способами пробуем получить его "размер". DeviceIoControl(..., IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, ...., PDISK_GEOMETRY_EX,..... Size_Ex := PDISK_GEOMETRY_EX.DiskSize.QuadPart; // первый вариант with PDISK_GEOMETRY_EX.Geometry do Size_Calc := Cylinders.QuadPart * TracksPerCylinder * SectorsPerTrack * BytesPerSector; // второй вариант и GetDiskFreeSpaceEx(PChar('\\.\CdRom0\), ..., Size_Total, ...) // третий вариант Сравниваем результаты: Size_Calc = 725 614 592 Size_Total = 728 975 360 Size_Ex = 729 282 560 Объясните мне, пожалуйста, почему они различаются и что каждый из них под собой подразумевает ? Почему отличается результат, полученный GetDiskFreeSpaceEx, еще, худо-бедно, предположить можно (служебная информация и все такое), но почему различаются Size_Ex и Size_Calc, мне совсем непонятно :( P.S. CD-диск взят как пример. Для дискеты: Size_Calc = 1 474 560 Size_Total = 1 457 664 Size_Ex = получить не удается из-за EX-кода. Для флешки: Size_Calc = 123 379 200 Size_Total = 124 559 360 Size_Ex = 125 829 120 |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Riply,
Ну ты бы могла хоть структурки с константами описать... :( Ну это так, лирика, очень уж лениво было. А так по сути топа, накатал примерчик:
1й и 3й вариант у меня одинаковы. Почему отличается 2й будем думать... p.s. уже завтра. Добавлено через 6 минут и 4 секунды PSS: Пример не совсем удачный, непинайте если что Это сообщение отредактировал(а) Rennigth - 7.6.2007, 17:10 -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
IOCTL_DISK_GET_DRIVE_GEOMETRY_EX для флопиков не перекрыт в драйвере. Ну а остальное очень хорошо описано в DDK в том-же месте откуда взяты сами константы DeviceIoControl запросов.
|
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Sorry. Думала, если кто-то заинтересуется вопросом, то приведу. У меня на некоторых CD дисках, тоже совпадают, но не на всех.
У мненя не получилось найти там пояснения, что подразумевается под "размером диска" И еще вопрос. Наблюдается такой эффект: Иногда DeviceIoControl на Floppy (в основном на нем ставлю эксперименты) начинает выдавать ошибку: ERROR_MEDIA_CHANGED ( Media in drive may have changed. ) при любом Io - коде. Лечится открыванием флоппика в Explorer-е. В чем может быть дело ? P.S. Открываю с доступом только на чтение(ну и читаю, разумеется). Используемые команды в DeviceIoControl: IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, IOCTL_DISK_GET_PARTITION_INFO_EX, IOCTL_STORAGE_QUERY_PROPERTY, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS. |
|||
|
||||
![]()
|
| Правила форума "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. |