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

Вниз

Инфо о жестком диске   Найти похожие ветки 

 
Insert   (2004-03-25 12:30) [0]

Как узнать ID жесткого диска?


 
Insert   (2004-03-25 12:30) [0]

Как узнать ID жесткого диска?


 
Insert   (2004-03-25 12:41) [1]

Что, никто не знает?


 
Insert   (2004-03-25 12:41) [1]

Что, никто не знает?


 
elshad   (2004-03-25 12:46) [2]

GetVolumeInformation


 
elshad   (2004-03-25 12:46) [2]

GetVolumeInformation


 
Alex Konshin ©   (2004-03-25 20:45) [3]

А что ты имеешь в виду?
VolumeID - серийный номер тома (раздела) или все-таки серийный номер самого винчестера?


 
Alex Konshin ©   (2004-03-25 20:45) [3]

А что ты имеешь в виду?
VolumeID - серийный номер тома (раздела) или все-таки серийный номер самого винчестера?


 
elshad   (2004-03-26 11:24) [4]

How to get the serial number of a HDD?

procedure TForm1.Button1Click(Sender: TObject);
var
 SerialNum : pdword;
 a, b : dword;
 Buffer: array [0..255] of char;
begin
 if GetVolumeInformation("c:\", Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then
   Label1.Caption := IntToStr(SerialNum^);
end;


 
elshad   (2004-03-26 11:24) [4]

How to get the serial number of a HDD?

procedure TForm1.Button1Click(Sender: TObject);
var
 SerialNum : pdword;
 a, b : dword;
 Buffer: array [0..255] of char;
begin
 if GetVolumeInformation("c:\", Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then
   Label1.Caption := IntToStr(SerialNum^);
end;


 
Alex Konshin ©   (2004-03-26 11:50) [5]

Еще один...
Это серийный номер тома
Серийный номер HDD достается совсем по-другому.


 
Alex Konshin ©   (2004-03-26 11:50) [5]

Еще один...
Это серийный номер тома
Серийный номер HDD достается совсем по-другому.


 
elshad   (2004-03-26 12:24) [6]

А это как??
Тоже скажеш что, номер тома

function GetIdeDiskSerialNumber( ControllerNumber, DriveNumber : Integer ) : String;
type
 TSrbIoControl = packed record
   HeaderLength : ULONG;
   Signature    : Array[0..7] of Char;
   Timeout      : ULONG;
   ControlCode  : ULONG;
   ReturnCode   : ULONG;
   Length       : ULONG;
 end;
 SRB_IO_CONTROL = TSrbIoControl;
 PSrbIoControl = ^TSrbIoControl;

 TIDERegs = packed record
   bFeaturesReg     : Byte; // Used for specifying SMART "commands".
   bSectorCountReg  : Byte; // IDE sector count register
   bSectorNumberReg : Byte; // IDE sector number register
   bCylLowReg       : Byte; // IDE low order cylinder value
   bCylHighReg      : Byte; // IDE high order cylinder value
   bDriveHeadReg    : Byte; // IDE drive/head register
   bCommandReg      : Byte; // Actual IDE command.
   bReserved        : Byte; // reserved for future use.  Must be zero.
 end;
 IDEREGS   = TIDERegs;
 PIDERegs  = ^TIDERegs;

 TSendCmdInParams = packed record
   cBufferSize  : DWORD;                // Buffer size in bytes
   irDriveRegs  : TIDERegs;             // Structure with drive register values.
   bDriveNumber : Byte;                 // Physical drive number to send command to (0,1,2,3).
   bReserved    : Array[0..2] of Byte;  // Reserved for future expansion.
   dwReserved   : Array[0..3] of DWORD; // For future use.
   bBuffer      : Array[0..0] of Byte;  // Input buffer.
 end;
 SENDCMDINPARAMS   = TSendCmdInParams;
 PSendCmdInParams  = ^TSendCmdInParams;

 TIdSector = packed record
   wGenConfig                 : Word;
   wNumCyls                   : Word;
   wReserved                  : Word;
   wNumHeads                  : Word;
   wBytesPerTrack             : Word;
   wBytesPerSector            : Word;
   wSectorsPerTrack           : Word;
   wVendorUnique              : Array[0..2] of Word;
   sSerialNumber              : Array[0..19] of Char;
   wBufferType                : Word;
   wBufferSize                : Word;
   wECCSize                   : Word;
   sFirmwareRev               : Array[0..7] of Char;
   sModelNumber               : Array[0..39] of Char;
   wMoreVendorUnique          : Word;
   wDoubleWordIO              : Word;
   wCapabilities              : Word;
   wReserved1                 : Word;
   wPIOTiming                 : Word;
   wDMATiming                 : Word;
   wBS                        : Word;
   wNumCurrentCyls            : Word;
   wNumCurrentHeads           : Word;
   wNumCurrentSectorsPerTrack : Word;
   ulCurrentSectorCapacity    : ULONG;
   wMultSectorStuff           : Word;
   ulTotalAddressableSectors  : ULONG;
   wSingleWordDMA             : Word;
   wMultiWordDMA              : Word;
   bReserved                  : Array[0..127] of Byte;
 end;
 PIdSector = ^TIdSector;

const
 IDE_ID_FUNCTION = $EC;
 IDENTIFY_BUFFER_SIZE       = 512;
 DFP_RECEIVE_DRIVE_DATA        = $0007c088;
 IOCTL_SCSI_MINIPORT           = $0004d008;
 IOCTL_SCSI_MINIPORT_IDENTIFY  = $001b0501;
 DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE;
 BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;
 W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;
var
 hDevice : THandle;
 cbBytesReturned : DWORD;
 s : String;
 pInData : PSendCmdInParams;
 pOutData : Pointer; // PSendCmdInParams;
 Buffer : Array[0..BufferSize-1] of Byte;
 srbControl : TSrbIoControl absolute Buffer;

 procedure ChangeByteOrder( var Data; Size : Integer );
 var ptr : PChar;
     i : Integer;
     c : Char;
 begin
   ptr := @Data;
   for i := 0 to (Size shr 1)-1 do
   begin
     c := ptr^;
     ptr^ := (ptr+1)^;
     (ptr+1)^ := c;
     Inc(ptr,2);
   end;
 end;

begin
 Result := "";
 FillChar(Buffer,BufferSize,#0);
 if Win32Platform=VER_PLATFORM_WIN32_NT then
   begin // Windows NT, Windows 2000
     Str(ControllerNumber,s);
     // Get SCSI port handle
     hDevice := CreateFile(
       PChar("\\.\Scsi"+s+":"),
       GENERIC_READ or GENERIC_WRITE,
       FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
     if hDevice=INVALID_HANDLE_VALUE then RaiseLastOSError;
     try
       srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
       System.Move("SCSIDISK",srbControl.Signature,8);
       srbControl.Timeout      := 2;
       srbControl.Length       := DataSize;
       srbControl.ControlCode  := IOCTL_SCSI_MINIPORT_IDENTIFY;
       pInData := PSendCmdInParams(PChar(@Buffer)+SizeOf(SRB_IO_CONTROL));
       pOutData := pInData;
       with pInData^ do
       begin
         cBufferSize  := IDENTIFY_BUFFER_SIZE;
         bDriveNumber := DriveNumber;
         with irDriveRegs do
         begin
           bFeaturesReg     := 0;
           bSectorCountReg  := 1;
           bSectorNumberReg := 1;
           bCylLowReg       := 0;
           bCylHighReg      := 0;
           bDriveHeadReg    := $A0 or ((DriveNumber and 1) shl 4);
           bCommandReg      := IDE_ID_FUNCTION;
         end;
       end;
       if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT, @Buffer, BufferSize, @Buffer, BufferSize, cbBytesReturned, nil ) then RaiseLastOSError;
     finally
       CloseHandle(hDevice);
     end;
   end
 else
   begin // Windows 95 OSR2, Windows 98
     hDevice := CreateFile( "\\.\SMARTVSD", 0, 0, nil, CREATE_NEW, 0, 0 );
     if hDevice=INVALID_HANDLE_VALUE then RaiseLastOSError;
     try
       pInData := PSendCmdInParams(@Buffer);
       pOutData := PChar(@pInData^.bBuffer);
       with pInData^ do
       begin
         cBufferSize  := IDENTIFY_BUFFER_SIZE;
         bDriveNumber := DriveNumber;
         with irDriveRegs do
         begin
           bFeaturesReg     := 0;
           bSectorCountReg  := 1;
           bSectorNumberReg := 1;
           bCylLowReg       := 0;
           bCylHighReg      := 0;
           bDriveHeadReg    := $A0 or ((DriveNumber and 1) shl 4);
           bCommandReg      := IDE_ID_FUNCTION;
         end;
       end;
       if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA, pInData, SizeOf(TSendCmdInParams)-1, pOutData, W9xBufferSize, cbBytesReturned, nil ) then RaiseLastOSError;
     finally
       CloseHandle(hDevice);
     end;
   end;

 with PIdSector(PChar(pOutData)+16)^ do
 begin
   ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));
   SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
 end;

 Result := Trim(Result);

end;


 
elshad   (2004-03-26 12:24) [6]

А это как??
Тоже скажеш что, номер тома

function GetIdeDiskSerialNumber( ControllerNumber, DriveNumber : Integer ) : String;
type
 TSrbIoControl = packed record
   HeaderLength : ULONG;
   Signature    : Array[0..7] of Char;
   Timeout      : ULONG;
   ControlCode  : ULONG;
   ReturnCode   : ULONG;
   Length       : ULONG;
 end;
 SRB_IO_CONTROL = TSrbIoControl;
 PSrbIoControl = ^TSrbIoControl;

 TIDERegs = packed record
   bFeaturesReg     : Byte; // Used for specifying SMART "commands".
   bSectorCountReg  : Byte; // IDE sector count register
   bSectorNumberReg : Byte; // IDE sector number register
   bCylLowReg       : Byte; // IDE low order cylinder value
   bCylHighReg      : Byte; // IDE high order cylinder value
   bDriveHeadReg    : Byte; // IDE drive/head register
   bCommandReg      : Byte; // Actual IDE command.
   bReserved        : Byte; // reserved for future use.  Must be zero.
 end;
 IDEREGS   = TIDERegs;
 PIDERegs  = ^TIDERegs;

 TSendCmdInParams = packed record
   cBufferSize  : DWORD;                // Buffer size in bytes
   irDriveRegs  : TIDERegs;             // Structure with drive register values.
   bDriveNumber : Byte;                 // Physical drive number to send command to (0,1,2,3).
   bReserved    : Array[0..2] of Byte;  // Reserved for future expansion.
   dwReserved   : Array[0..3] of DWORD; // For future use.
   bBuffer      : Array[0..0] of Byte;  // Input buffer.
 end;
 SENDCMDINPARAMS   = TSendCmdInParams;
 PSendCmdInParams  = ^TSendCmdInParams;

 TIdSector = packed record
   wGenConfig                 : Word;
   wNumCyls                   : Word;
   wReserved                  : Word;
   wNumHeads                  : Word;
   wBytesPerTrack             : Word;
   wBytesPerSector            : Word;
   wSectorsPerTrack           : Word;
   wVendorUnique              : Array[0..2] of Word;
   sSerialNumber              : Array[0..19] of Char;
   wBufferType                : Word;
   wBufferSize                : Word;
   wECCSize                   : Word;
   sFirmwareRev               : Array[0..7] of Char;
   sModelNumber               : Array[0..39] of Char;
   wMoreVendorUnique          : Word;
   wDoubleWordIO              : Word;
   wCapabilities              : Word;
   wReserved1                 : Word;
   wPIOTiming                 : Word;
   wDMATiming                 : Word;
   wBS                        : Word;
   wNumCurrentCyls            : Word;
   wNumCurrentHeads           : Word;
   wNumCurrentSectorsPerTrack : Word;
   ulCurrentSectorCapacity    : ULONG;
   wMultSectorStuff           : Word;
   ulTotalAddressableSectors  : ULONG;
   wSingleWordDMA             : Word;
   wMultiWordDMA              : Word;
   bReserved                  : Array[0..127] of Byte;
 end;
 PIdSector = ^TIdSector;

const
 IDE_ID_FUNCTION = $EC;
 IDENTIFY_BUFFER_SIZE       = 512;
 DFP_RECEIVE_DRIVE_DATA        = $0007c088;
 IOCTL_SCSI_MINIPORT           = $0004d008;
 IOCTL_SCSI_MINIPORT_IDENTIFY  = $001b0501;
 DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE;
 BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;
 W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;
var
 hDevice : THandle;
 cbBytesReturned : DWORD;
 s : String;
 pInData : PSendCmdInParams;
 pOutData : Pointer; // PSendCmdInParams;
 Buffer : Array[0..BufferSize-1] of Byte;
 srbControl : TSrbIoControl absolute Buffer;

 procedure ChangeByteOrder( var Data; Size : Integer );
 var ptr : PChar;
     i : Integer;
     c : Char;
 begin
   ptr := @Data;
   for i := 0 to (Size shr 1)-1 do
   begin
     c := ptr^;
     ptr^ := (ptr+1)^;
     (ptr+1)^ := c;
     Inc(ptr,2);
   end;
 end;

begin
 Result := "";
 FillChar(Buffer,BufferSize,#0);
 if Win32Platform=VER_PLATFORM_WIN32_NT then
   begin // Windows NT, Windows 2000
     Str(ControllerNumber,s);
     // Get SCSI port handle
     hDevice := CreateFile(
       PChar("\\.\Scsi"+s+":"),
       GENERIC_READ or GENERIC_WRITE,
       FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
     if hDevice=INVALID_HANDLE_VALUE then RaiseLastOSError;
     try
       srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
       System.Move("SCSIDISK",srbControl.Signature,8);
       srbControl.Timeout      := 2;
       srbControl.Length       := DataSize;
       srbControl.ControlCode  := IOCTL_SCSI_MINIPORT_IDENTIFY;
       pInData := PSendCmdInParams(PChar(@Buffer)+SizeOf(SRB_IO_CONTROL));
       pOutData := pInData;
       with pInData^ do
       begin
         cBufferSize  := IDENTIFY_BUFFER_SIZE;
         bDriveNumber := DriveNumber;
         with irDriveRegs do
         begin
           bFeaturesReg     := 0;
           bSectorCountReg  := 1;
           bSectorNumberReg := 1;
           bCylLowReg       := 0;
           bCylHighReg      := 0;
           bDriveHeadReg    := $A0 or ((DriveNumber and 1) shl 4);
           bCommandReg      := IDE_ID_FUNCTION;
         end;
       end;
       if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT, @Buffer, BufferSize, @Buffer, BufferSize, cbBytesReturned, nil ) then RaiseLastOSError;
     finally
       CloseHandle(hDevice);
     end;
   end
 else
   begin // Windows 95 OSR2, Windows 98
     hDevice := CreateFile( "\\.\SMARTVSD", 0, 0, nil, CREATE_NEW, 0, 0 );
     if hDevice=INVALID_HANDLE_VALUE then RaiseLastOSError;
     try
       pInData := PSendCmdInParams(@Buffer);
       pOutData := PChar(@pInData^.bBuffer);
       with pInData^ do
       begin
         cBufferSize  := IDENTIFY_BUFFER_SIZE;
         bDriveNumber := DriveNumber;
         with irDriveRegs do
         begin
           bFeaturesReg     := 0;
           bSectorCountReg  := 1;
           bSectorNumberReg := 1;
           bCylLowReg       := 0;
           bCylHighReg      := 0;
           bDriveHeadReg    := $A0 or ((DriveNumber and 1) shl 4);
           bCommandReg      := IDE_ID_FUNCTION;
         end;
       end;
       if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA, pInData, SizeOf(TSendCmdInParams)-1, pOutData, W9xBufferSize, cbBytesReturned, nil ) then RaiseLastOSError;
     finally
       CloseHandle(hDevice);
     end;
   end;

 with PIdSector(PChar(pOutData)+16)^ do
 begin
   ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));
   SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
 end;

 Result := Trim(Result);

end;


 
Игорь Шевченко ©   (2004-03-26 15:23) [7]

elshad   (26.03.04 12:24)

А автор кто ? :)))


 
Игорь Шевченко ©   (2004-03-26 15:23) [7]

elshad   (26.03.04 12:24)

А автор кто ? :)))


 
Alex Konshin ©   (2004-03-26 21:33) [8]

Игорь Шевченко ©   (26.03.04 15:23) [7]
Ну это уже даже не оригинально :)

elshad   (26.03.04 12:24) [6]
Если бы ты сохранял копирайты, то не попал бы в дурацкое положение.
Есть и более свежая версия.
http://home.earthlink.net/~akonshin/
А также экспериментальный вариант
http://home.earthlink.net/~akonshin/files/IdeSN3b.zip


 
Alex Konshin ©   (2004-03-26 21:33) [8]

Игорь Шевченко ©   (26.03.04 15:23) [7]
Ну это уже даже не оригинально :)

elshad   (26.03.04 12:24) [6]
Если бы ты сохранял копирайты, то не попал бы в дурацкое положение.
Есть и более свежая версия.
http://home.earthlink.net/~akonshin/
А также экспериментальный вариант
http://home.earthlink.net/~akonshin/files/IdeSN3b.zip


 
elshad   (2004-03-27 10:26) [9]


> Игорь Шевченко ©   (26.03.04 15:23) [7]

Это функция скопирована с инета. А копирайта под ним не было...
По моему здес форум и в форуме просто помогают друг другу чем могут. Если бы здес был ученый совет и я зашищал дисертацию на тему серийного номера HDD, то тогда и насчет автора спросили бы...


> Alex Konshin ©   (26.03.04 21:33) [8]

А что, отвечать в форуме это - попасть в дурацкое положение??? Ну если так, то наверное не стоило мне отвечать(((
И спасибо за более свежую версию.


 
elshad   (2004-03-27 10:26) [9]


> Игорь Шевченко ©   (26.03.04 15:23) [7]

Это функция скопирована с инета. А копирайта под ним не было...
По моему здес форум и в форуме просто помогают друг другу чем могут. Если бы здес был ученый совет и я зашищал дисертацию на тему серийного номера HDD, то тогда и насчет автора спросили бы...


> Alex Konshin ©   (26.03.04 21:33) [8]

А что, отвечать в форуме это - попасть в дурацкое положение??? Ну если так, то наверное не стоило мне отвечать(((
И спасибо за более свежую версию.


 
Alex Konshin ©   (2004-03-27 11:51) [10]

Прежде чем советовать другим нужно самому знать правильный ответ.
Но чтобы знать правильный ответ, нужно еще и знать правильный вопрос.
Я попытался спросить автора вопроса, чего же он все-таки хочет. А ты стал давать советы даже не поняв до конца вопроса.
В этом разница.


 
Alex Konshin ©   (2004-03-27 11:51) [10]

Прежде чем советовать другим нужно самому знать правильный ответ.
Но чтобы знать правильный ответ, нужно еще и знать правильный вопрос.
Я попытался спросить автора вопроса, чего же он все-таки хочет. А ты стал давать советы даже не поняв до конца вопроса.
В этом разница.



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

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

Наверх




Память: 0.54 MB
Время: 0.038 c
1-1082424190
kaif
2004-04-20 05:23
2004.05.09
Как узнать текущий номер билда?


14-1082558962
Frozzen
2004-04-21 18:49
2004.05.09
Объявление процедуры


6-1079419590
pavlov
2004-03-16 09:46
2004.05.09
Передача сообщение на другой компьютер


3-1081586401
Laymer
2004-04-10 12:40
2004.05.09
Lookup в DBE


3-1081877364
nika_ufc
2004-04-13 21:29
2004.05.09
проблема с АДО и TFileStream





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