Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];

Вниз

IOCTL_DISK_GET_DRIVE_GEOMETRY - ошибка   Найти похожие ветки 

 
Oleg--   (2003-01-22 14:24) [0]

проблема такая:

-- вырезано
DeviceIoControl(hDevice,
IOCTL_DISK_GET_DRIVE_GEOMETRY,
NULL, 0, и.т.д..
-- вырезано

при компиляции пишет: Undeclared identifier: "IOCTL_DISK_GET_DRIVE_GEOMETRY"

Что я забыл подключить то?


 
Hip Hop Music   (2003-01-22 15:10) [1]

Нет такого в дельфях!
Для Сей определено в winioctl.h, вот так:

#define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)


 
Oleg--   (2003-01-22 19:56) [2]

хм.. DeviceIoControl есть а этого параметра нет? И как быть? Как получить геометрию диска?


 
Hip Hop Music   (2003-01-23 10:06) [3]

Это не параметр. Это константа, вроде число типа Cardinal (UINT).
Возьмите winioctl.h да и распишите его:

#define CTL_CODE( DeviceType, Function, Method, Access )
(
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2)| (Method)
)

#define IOCTL_DISK_BASE FILE_DEVICE_DISK
#define FILE_DEVICE_DISK 0x00000007
#define METHOD_BUFFERED 0
#define FILE_ANY_ACCESS 0

#define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE (IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)

Re: #define A B --- значит, B это A;
"<<" --- это "shl";
"|" --- это "or";
конструкция CTL_CODE, грубо говоря, макрос с подстановкой параметров.

Так что, всё легко и просто


 
Oleg--   (2003-01-23 10:41) [4]

Спасибо за терпение и за ответ :) т.е. если я правильно понял (сорри, но маленький опыт программирования), то таким образом вычисляется эта константа. остался вопрос. FILE_DEVICE_DISK - эта константа тоже должна иметь какое-либо значение . Какое? Или это как раз тот самый hDevice открытого физического диска?


 
Hip Hop Music   (2003-01-23 10:46) [5]

1,2,3,4,5...10. Уф! Я совершенно спокоен!

поправка: #define A B --- значит, A это B;

Итак, ещё раз:
#define FILE_DEVICE_DISK 0x00000007
#define IOCTL_DISK_BASE FILE_DEVICE_DISK

Т.е.

const
FILE_DEVICE_DISK : Cardinal = $00000007;
IOCTL_DISK_BASE : Cardinal = FILE_DEVICE_DISK;

и т.д. :)


 
Oleg--   (2003-01-23 10:53) [6]

опс.. :))) совсем я плохой стал :((( посмотрел что константа FILE_DEVICE_DISK не определена и приравнивается к IOCTL_DISK_BASE ... дальше только бегло просмотрел :(

тут все понятно:
#define FILE_DEVICE_DISK 0x00000007
#define IOCTL_DISK_BASE FILE_DEVICE_DISK



 
Oleg--   (2003-01-23 11:22) [7]

Кстати.. на SCSI дисках это пройдет?


 
Hip Hop Music   (2003-01-23 11:32) [8]

Не могу сказать, со SCSI не работал :)



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
14-64388
bom
2003-03-05 21:48
2003.03.20
Создание программой своей копии


1-64175
Эли
2003-03-07 18:29
2003.03.20
Найти слово в RichEdit


1-64056
spROOT13
2003-03-09 15:00
2003.03.20
Диалоговое окно замены иконки


14-64285
phantom2040
2003-03-06 10:12
2003.03.20
Помогите с созданием инсталяции


1-64127
OlegM
2003-03-11 08:06
2003.03.20
Прозрачный фон у текста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский