Конференция "WinAPI" » Установленные жесткие диски в системе [D7, Win2k, WinXP]
 
  • ivashak (17.04.09 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.

    Объясните пожалуйста что вообще происходит. Совсем не могу вникнуть.
  • Игорь Шевченко © (17.04.09 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.
 
Конференция "WinAPI" » Установленные жесткие диски в системе [D7, Win2k, WinXP]
Есть новые Нет новых   [134435   +38][b:0][p:0.001]