| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как получить инфу о жестком диске? |
| Автор: Dayana 11.3.2003, 22:50 |
| Подскажите пожалуйста, как получить информацию о том, какие установлены жесткие диски, и какие метки драйвов им соответствуют? Спасибо! |
| Автор: serious 11.3.2003, 23:33 | ||||
Вот пример, как определить, существует ли диск в системе:
Теперь об информации о дисках: исчерпывающую информацию по этому поводу дает функция GetVolumeInformation, посмотри help, там все понятно (там и серийный номер диска, и тип файловой системы, и прочее и прочее). Вот параметры FileSysFlags: FS_CASE_IS_PRESERVED - (при записи на диск сохраняется регистр букв в его имени) FS_CASE_SENSITIVE - (поддерживается поиск файлов с учетом регистра букв) FS_UNICODE_STORED_ON_DISK - (поддерживается сохранение имен файлов в UniCode) FS_PERSISTENT_ACLS - (поддерживаются списки контроля доступа (ACL). Только для NTFS) FS_FILE_COMPRESSION - (поддерживается сжатие файлов на уровне системы) FS_VOL_IS_COMPRESSED - (устройство представляет собой сжатый диск) Определение типа диска:
|
| Автор: Dayana 12.3.2003, 00:34 |
| serious, спасибо! Но это все относится к драйву (логическому диску), а не к жесткому диску... Мне нужна информация именно о жеском диске, и о связи его с логическим.... |
| Автор: AntonSaburov 12.3.2003, 00:47 |
| Посмотри функцию DeviceIoControl - может там что получиться. Я ее мало использовал, но что-то там было. Там есть ссылка на CreateFile - эта функция под NT может действительно вернуть хэндл на физический диск. You can use the CreateFile function to open a disk drive or a partition on a disk drive. The function returns a handle to the disk device; that handle can be used with the DeviceIOControl function. |
| Автор: serious 12.3.2003, 03:03 |
| Что-то не совсем понял вопрос: тебе нужна информация типа серийный номер, объем диска, кластеры.... Так что ли? Поясни конкретнее. |
| Автор: Medved 12.3.2003, 09:19 | ||||
Пример использования:
|
| Автор: Dayana 12.3.2003, 18:33 |
| AntonSaburov, спасибо, посмотрю! Pegas, но это все относится к логическим дискам. serious, типа этого... Например у меня есть 2 жестких диска, один Maxtor объемом 20 Gb и второй WD объемом 15Gb. Первый (Maxtor) разбила на 3 патиции: C, D, E соответственно 10Gb, 4Gb, 6Gb. Второй оставила с одной патицией F. Тем кодом, который привел serious и Pegas, можно получить информацию о том, что у меня в системе есть логические диски C, D, E, F их серийные номера, их объем. А у меня задача узнать сколько винчестеров у меня стоит, т.е. узнать о том, что у меня стоит 2 винчестера. Какие они, т.е., что это Maxtor и WD. Какой у них объем, т.е., что 20Gb и 15Gb. И на какие они патиции (логические диски) разбиты. А уже информацию по логическим дискам можно получить кодом приведенным выше Pegasом и seriousом. Чтобы совсем было понятно: зайдите в Control Panel - Administrative tools - Computer management - Storage - Disk management. Вот в таком виде информацию... |
| Автор: Dayana 12.3.2003, 23:36 |
| AntonSaburov, похоже, это то, что мне надо... Спасибо! :-) |
| Автор: AntonSaburov 12.3.2003, 23:56 | ||
Ну, я, это, типа, завсегда, мы ж понимаем ... Вот |
| Автор: Dayana 13.3.2003, 23:39 |
| AntonSaburov, только это работает для NT, а для 95/98 не работает... :-( Есть ли какой-нибудь способ добраться до информации BIOSа? (для всех систем) Ведь BIOS видит диски. |
| Автор: serious 14.3.2003, 03:41 |
| А что конкретно под NT не работает? Все? Попробую под XP это сделать, если не пойдет, то будем думать дальше. |
| Автор: AntonSaburov 14.3.2003, 19:01 | ||
Я уже очень давно не работаю под такими ОС - предпочитаю с ними не связываться. Так что здесь мало что могу посоветовать. Но с другой стороны эти ОС дырявые и можно что-то с прямым доступом к памяти поискать. |
| Автор: Dayana 16.3.2003, 18:18 |
| serious, для NT все работает. Читай внимательнее... AntonSaburov, у меня просто задача для разных ОС. Поискать можно... вот и ищу... :-) |
| Автор: serious 16.3.2003, 21:14 | ||
Assembler? ЗЫ А вообще, посмотри, не равен ли у тебя 0 дескриптор винта. |
| Автор: serious 16.3.2003, 21:46 | ||
Если ничего не путаю, там немного другой способ получения дескриптора. |
| Автор: Dayana 16.3.2003, 22:25 |
| serious, а какой? |
| Автор: serious 17.3.2003, 03:08 | ||
Может так попробовать:
|
| Автор: serious 17.3.2003, 16:45 | ||
Ну дык надо проверять название каждого винта или их серийные номера, тогда сможешь отличить один от другого. Иных путей не вижу, так что высылаю example, как все это сделать. |
| Автор: Dayana 17.3.2003, 22:18 |
| serious, спасибо большое за пример... но я уже сама разобралась... :-) |