Главная страница
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
1-64056
spROOT13
2003-03-09 15:00
2003.03.20
Диалоговое окно замены иконки


1-64085
Reals
2003-03-07 18:42
2003.03.20
Как добавить пункт меню в выпадающее по умолчанию меню TMemo?


14-64332
Supreme 2
2003-03-03 18:10
2003.03.20
Кто какую


8-64236
Noname_
2002-12-06 11:35
2003.03.20
Свойства выходного пина.


1-64109
Kotka
2003-03-10 16:03
2003.03.20
Динамический массив