Arsip: Componen mendapatkan serial number harddisk

more 17 years ago
jimmy_chenchen
saya mau tanya nih ada tidak komponen yang bisa mendapatkan serial numbernya harddisk dan free space harddisk
trima kasih

more 17 years ago
gorillaz
klo buat dapetin serial number harddisk nih kt kasih functionnya,
klo freespace nya kt blom tau tuch....
function GetHardDiskSerial(const DriveLetter: Char): string;
var
NotUsed: DWORD;
VolumeFlags: DWORD;
VolumeInfo: array of Char;
VolumeSerialNumber: DWORD;
begin
GetVolumeInformation(PChar(DriveLetter + ':'),
nil, SizeOf(VolumeInfo), @VolumeSerialNumber, NotUsed,
VolumeFlags, nil, 0);
Result := Format('Label = %s VolSer = %8.8X',
[VolumeInfo, VolumeSerialNumber])
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetHardDiskSerial('c'));
end;
[/code]
more 17 years ago
doditali
coba aja link ke torry
http://www.torry.net/vcl/filedrv/driveinformation/diskinfo4.zip
lengkap kok, ada sourcenya lagi

more 17 years ago
taruna
ada 2 penngertian serial number harddisk :
-yg keluar saat selesai diformat (volume serial number) : nggak permanen
-yg ada pada chip controller circuit harddisk (manufacture serial number) : permanen
kalo untuk tujuan proteksi sw, sebaiknya pake yg permanen karena bakal sering ada masalah saat customer gonta-ganti os atau sering format hd.
semoga membantu..
:wink:

more 17 years ago
DelphiExpert
Yub betul bro Taruna bilang (eh bro elu ni tentara apa mobil daihatsu sih) hihihi...

more 17 years ago
taruna
@DelphiExpert: Yub betul bro Taruna bilang (eh bro elu ni tentara apa mobil daihatsu sih) hihihi...kalo' ini masala sensitip, gw gak mo balez... :twisted:

more 17 years ago
thedelphialwaysthedelphi
om taruna punya function nya nggak biar bisa dapet manufacture serial number HD?

more 17 years ago
LuriDarmawan
eee.. barangkali ada yg suka jajan-jajan komponen
TGetDiskSerial, $15
http://www.devlib.net/tgetdiskserial.htm
MachineID, Euro 50
http://www.ionworx.com/machineid.html

more 17 years ago
LuriDarmawan
kalo yg mo coba-coba sendiri:
referensi:
http://home.earthlink.net/~akonshin/delphi_components.htm
unit IdeSN;
interface
//-------------------------------------------------------------
// Tries to extract the serial number from the first IDE disk that is found in the system.
// Returns an empty string if IDE disk is not found.
function GetIdeSN : String;
//-------------------------------------------------------------
// Tries to extract the serial number from specified IDE disk.
//
// Parameters:
// ControllerNumber - SCSI port number of the controller.
// DriveNumber - Device index (0..4).
//
// Raises OSError exception in case of any error during this operation.
//
// Notes:
// 1. The parameter ControllerNumber is ignored on Windows 9x/ME platforms and should be 0.
// 2. This function CAN NOT extract SCSI disk serial number.
//
function GetIdeDiskSerialNumber( ControllerNumber, DriveNumber : Integer ) : String;
//=============================================================
implementation
uses
Windows,
SysUtils; // only for Win32Platform, SysErrorMessage and class Exception
{$IFDEF VER150}
{$DEFINE VER140}
{$ENDIF}
{$IFNDEF VER140}
procedure RaiseLastOSError;
begin
RaiseLastWin32Error;
end;
{$ENDIF}
//-------------------------------------------------------------
// Tries to extract the serial number from specified IDE disk.
//
// Parameters:
// ControllerNumber - SCSI port number of the controller.
// DriveNumber - SCSI port number of the controller.
// Notes:
// 1. The parameter ControllerNumber is ignored on Windows 9x/ME platforms and should be 0.
// 2. This function CAN NOT extract SCSI disk serial number.
//
function GetIdeDiskSerialNumber( ControllerNumber, DriveNumber : Integer ) : String;
type
TSrbIoControl = packed record
HeaderLength : ULONG;
Signature : Array 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 of Byte; // Reserved for future expansion.
dwReserved : Array of DWORD; // For future use.
bBuffer : Array 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 of Word;
sSerialNumber : Array of Char;
wBufferType : Word;
wBufferSize : Word;
wECCSize : Word;
sFirmwareRev : Array of Char;
sModelNumber : Array 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 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 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;
//-------------------------------------------------------------
function GetIdeSN : String;
var
iController, iDrive, maxController : Integer;
begin
Result := '';
maxController := 15;
if Win32Platform<>VER_PLATFORM_WIN32_NT then maxController := 0;
for iController := 0 to maxController do
begin
for iDrive := 0 to 4 do
begin
try
Result := GetIdeDiskSerialNumber(iController,iDrive);
if Result<>'' then Exit;
except
// ignore exceptions
end;
end;
end;
end;
end.
hasil olah di pc:

more ...
- Pages:
- 1
reply |
Report Obsolete
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 2 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 2 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 3 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 3 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 3 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 11 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 11 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 11 years ago
Random Topic
- [ask] gammu lagiii
by pai_chan in Multimedia & Graphic Enhancement more 15 years ago - if then else pada query
by sepakterjang in Tip n Trik Pemrograman more 13 years ago - buat stored procedure..
by her1z_yu2n in Hal umum tentang Pascal Indonesia more 15 years ago - daftar
by rini in Tip n Trik Pemrograman more 16 years ago - hmm, ada yg tau transfer data tabel dr access ke sql server?
by micrens in Tip n Trik Pemrograman more 16 years ago - Edit, combo Box dan Array
by priki in Tip n Trik Pemrograman more 16 years ago - Tanya soal susunan HEX ARRAY
by dheasy_mns in Tip n Trik Pemrograman more 14 years ago - buat Antivirus sendiri
by om20020 in Tip n Trik Pemrograman more 16 years ago - nanya tentang program penjualan
by Erlangga in Tip n Trik Pemrograman more 16 years ago - [Fatal Error]Internal error LA30
by nekok in Tip n Trik Pemrograman more 12 years ago