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

Вниз

Установленные жесткие диски в системе   Найти похожие ветки 

 
ivashak   (2009-04-17 16:56) [0]

Пытаюсь получить со всех физически установленных жестких дисков в системе собрать определенные данные (S.M.A.R.T статистику).

Но у меня большое не понимание одной вещи. Читаю чужие исходники и в них вижу - первоначально получают хэндл:
hSMARTIOCTL:= CreateFile("\\.\PhysicalDrive0", GENERIC_READ or
     GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
     OPEN_EXISTING, 0, 0);

а затем уже с полученным хэндлом в цикле выполняют команды. А в цикле идет перебор всех возможных дисков от 0 до MAX_IDE_DRIVES-1:
 for i:= 0 to (MAX_IDE_DRIVES - 1) do
 begin
    .....
    .....
    bDriveHeadReg    := $A0 or ((bDriveNum and 1) shl 4);

Так вот я не пойму - что такое PhysicalDrive0? Я думал, что PhysicalDriveX - это идентификатор физически установленного жесткого диска в системе, а оказалось что это не так. В то же время в некоторых исходниках сначала перебирают в цикле PhysicalDriveX, а потом уже внутри снова перебирают в цикле по MAX_IDE_DRIVES.

Объясните пожалуйста что вообще происходит. Совсем не могу вникнуть.


 
Игорь Шевченко ©   (2009-04-17 17:38) [1]


> Я думал, что PhysicalDriveX - это идентификатор физически
> установленного жесткого диска в системе, а оказалось что
> это не так.


Это так

You can use the CreateFile function to open a physical disk drive or a volume, which returns a direct access storage device (DASD) handle that can be used with the DeviceIoControl function. This enables you to access the disk or volume directly, for example such disk metadata as the partition table. However, this type of access also exposes the disk drive or volume to potential data loss, because an incorrect write to a disk using this mechanism could make its contents inaccessible to the operating system. To ensure data integrity, be sure to become familiar with DeviceIoControl and how other APIs behave differently with a direct access handle as opposed to a file system handle.

The following requirements must be met for such a call to succeed:

The caller must have administrative privileges. For more information, see Running with Special Privileges.
The dwCreationDisposition parameter must have the OPEN_EXISTING flag.
When opening a volume or floppy disk, the dwShareMode parameter must have the FILE_SHARE_WRITE flag.
Note  The dwDesiredAccess parameter can be zero, allowing the application to query device attributes without accessing a device. This is useful for an application to determine the size of a floppy disk drive and the formats it supports without requiring a floppy disk in a drive, for instance. It can also be used for reading statistics without requiring higher-level data read/write permission.

When opening a physical drive x, the lpFileName string should be the following form: \\.\PhysicalDriveX. Hard disk numbers start at zero. The following table shows some examples of physical drive strings.

String Meaning
\\.\PhysicalDrive0 Opens the first physical drive.
\\.\PhysicalDrive2 Opens the third physical drive.



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

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

Наверх





Память: 0.45 MB
Время: 0.003 c
15-1276250125
WHR
2010-06-11 13:55
2010.09.05
Возможно ли отправить почту, если протокол POP3 закрыт?


15-1276278888
AKE
2010-06-11 21:54
2010.09.05
Когда давно здесь кто-то выкладывал...


15-1272040004
Amoeba_
2010-04-23 20:26
2010.09.05
Антивирус McAfee парализовал десятки тысяч компьютеров


2-1276080161
Анна
2010-06-09 14:42
2010.09.05
DataSet и передача параметров (MySQL5.1)


4-1239772550
SPeller
2009-04-15 09:15
2010.09.05
Как достоверно определить что программа запущена как сервис?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский