Главная страница
    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
2-1276185461
Artemon
2010-06-10 19:57
2010.09.05
Вывод времени в QRDBText


15-1276201773
Юрий
2010-06-11 00:29
2010.09.05
С днем рождения ! 11 июня 2010 пятница


15-1276204135
AKE
2010-06-11 01:08
2010.09.05
Интерпретатор "текстового" Паскаля для мобильного...


15-1276195781
AKE
2010-06-10 22:49
2010.09.05
Где можно найти какой-нибудь исходный код


15-1276194359
zlodey
2010-06-10 22:25
2010.09.05
неопределенное DNS-имя





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