Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.20;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
14-64296
Странник
2003-03-06 11:32
2003.03.20
Продолжение выступления Тату в Америке


7-64409
Владимир
2003-01-26 00:42
2003.03.20
Отцентрировать форму


14-64344
Мазут Береговой
2003-03-05 03:30
2003.03.20
Чем отличается MS SQL 2000 Developer Edition - Media Only


3-63944
vixic
2003-03-03 18:15
2003.03.20
ДАЖЕ НЕЗНАЮ: Table DLL DataSource!


14-64359
qwert-AP
2003-03-05 10:25
2003.03.20
Округления и с чем иго едят