Get Hard Drive Serial Number Delphi
Function GetHDDSerialNumber(NomDriv e:byte): String; const IDENTIFY_BUFFER_SIZE = 512; type 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; TSendCmdInParams = packed record // Buffer size in bytes cBufferSize: DWORD; // Structure with drive register values. IrDriveRegs: TIDERegs; // Physical drive number to send command to (0,1,2,3).
BDriveNumber: BYTE; bReserved: Array[0.2] of Byte; dwReserved: Array[0.3] of DWORD; bBuffer: Array[0.0] of Byte; // Input buffer. UlTotalAddressableSectors: DWORD; wSingleWordDMA: Word; wMultiWordDMA: Word; bReserved: Array[0.127] of BYTE; end; PIdSector = ^TIdSector; TDriverStatus = packed record // Error code from driver, or 0 if no error.
Autocad2012englishwin64bit keygen free download. Getting unique disk serial number with delphi Is there any way to explore the unique values of a computer HD with a straight forward Delphi 7 (or compatible) version Status.
BDriverError: Byte; // Contents of IDE Error register. Only valid when bDriverError is SMART_IDE_ERROR. BIDEStatus: Byte; bReserved: Array[0.1] of Byte; dwReserved: Array[0.1] of DWORD; end; TSendCmdOutParams = packed record // Size of bBuffer in bytes cBufferSize: DWORD; // Driver status structure. DriverStatus: TDriverStatus; // Buffer of arbitrary length in which to store the data read from the drive. BBuffer: Array[0.0] of BYTE; end; var hDevice: THandle; cbBytesReturned: DWORD; // ptr: PChar; SCIP: TSendCmdInParams; aIdOutCmd: Array [0.(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1] of Byte; IdOutCmd: TSendCmdOutParams absolute aIdOutCmd; 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; const IdeDriveNom='. PhysicalDrive'; begin Result:='Error'; // return empty string on error.
Do The code you writen get manufatctor serial number and no body can clone it on other PC and it is Safe! Or what I do ( write in 1st Q? Thanks, //-------------------------------- function GetDiskSerialNumber(Disk: char): string; var VolumeSerialNumber, MaximumComponentLength, FileSystemFlags: DWORD; SerialNumber: string; begin GetVolumeInformation(PChar(Disk + ': '), nil, 0, @VolumeSerialNumber, MaximumComponentLength, FileSystemFlags, nil, 0); SerialNumber:= Format('%.4X-%.4X', [HiWord(VolumeSerialNumber), LoWord(VolumeSerialNumber)]); Result:= SerialNumber; end; Please give a point.
Oasis@eurosoft.lv beginner! Thanks to all, Alikhany ( halikhany@yahoo.com ) http://www.alikhany.tk/. Just my 2 (Euro) cents to the topic. The routines based on GetVolumeInformation is not reliable to identify a PC, as it gives you the number, the disk got while formating it. If you use a disk image program (DiskImage, Nortom Ghost) to clone the drive, you will have 2 drives with identical information. Plus this information can be changed by software.
Okay, direct disk access or fumbling with a disk editor is not for everyone but I'm sure there are some programs to be found on the net. IMHO the method that uses SMART technology is more reliable as it accesses the serialnumber and information the HDD manufacturer gave the drive and that is sored in hardware. Not sure if they can be changed by software. But be aware: we had one case of changing data on a Win2000 laptop after switching of without shutdown - it did the Scandisk on boot and voila - the data changed. So it may be unique, but is not 100% stable HTH ) Verence.