Delphi, how to get serial number of hard disk where installed application. Drive: string; begin.

Hi, I want to get manufacturer's harddisk serial number (note: not' volume serial number'), because with formating it doesn't change. I have searched the newsgroup archives at: codenewsfast.com and groups.google.com; but to no avail. I am not looking for the use of GetVolumeInformation for getting the 'hard disk serial number', because what this function actually gets is the volume serial number, not the manufacturer's hard disk serial number.

The volume serial no. Is assigned and changed during the formatting of the partition. Crestron software torrent. A proper/working code (in Delphi 5) will be highly appreciated. The code should work with Windows 95/98/Me/NT4/2000/XP/7 for both x32 and x64 bit platforms. Many thanks in advance!

Best regards, John. On Wed, 27 Jul 2011 04:58:47 -0700, John Warren wrote: >Hi, > >I want to get manufacturer's harddisk serial number (note: not' volume serial number'), because with formating it doesn't change. > >I have searched the newsgroup archives at: codenewsfast.com and groups.google.com; but to no avail. > >I am not looking for the use of GetVolumeInformation for getting the 'hard disk serial number', because what this function actually gets is the volume serial number, not the manufacturer's hard disk serial number. The volume serial no.

Is assigned and changed during the formatting of the partition. > >A proper/working code (in Delphi 5) will be highly appreciated. The code should work with Windows 95/98/Me/NT4/2000/XP/7 for both x32 and x64 bit platforms.

Many thanks in advance! > >Best regards, >John Hi John, Quick Search on Google gets (among others) the following 2 sites of interest: 1)2)Hope that helps Smurf.

Dear all, I'm trying to read serial no of the hard disk as a unique id of the machine. I tried the code as follows: class function TDeviceUtils.GetDeviceId: 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: LongInt; // Structure with drive register values. IrDriveRegs: TIDERegs; // Physical drive number to send command to (0,1,2,3).

Get Hard Drive Serial Number Delphi

BDriveNumber: BYTE; bReserved: array [0. 2] of BYTE; dwReserved: array [0. 3] of DWORD; bBuffer: array [0. 0] of BYTE; // Input buffer. End; 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: DWORD; wMultSectorStuff: Word; ulTotalAddressableSectors: DWORD; wSingleWordDMA: Word; wMultiWordDMA: Word; bReserved: array [0.

127] of BYTE; end; PIdSector = ^TIdSector; TDriverStatus = packed record bDriverError: BYTE; bIDEStatus: BYTE; bReserved: array [0. 1] of BYTE; dwReserved: array [0. 1] of DWORD; end; TSendCmdOutParams = packed record // bBuffer的大小 cBufferSize: DWORD; DriverStatus: TDriverStatus; bBuffer: array [0. 0] of BYTE; end; var hDevice: Thandle; cbBytesReturned: DWORD; 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; begin Result:= '; // '. PhysicalDrive0 means the first drive, use '.