PerlingTheUK has asked for the wisdom of the Perl Monks concerning the following question:

Hello Monks,

I am curently trying to uniquely identify the hardware keys of the systems, my software runs on. I would like to access for example the harddisk serial number. I do not know about any packages that can do this. Requirements are that the scripts run on any recent Windows version. My best bet yet are the values that WIN32::MachineInfo provides, yet those are not necessarily unique.

Cheers,
PerlingTheUK

Replies are listed 'Best First'.
Re: Getting Hardware Keys from Windows
by jimbojones (Friar) on Oct 21, 2004 at 18:54 UTC
    If you want the Windows Drive Serial number, the Win32API::File package can do what you want. I'm not sure if it's current or deprecated.

    Try
    use Win32API::File qw (:Func ); my ( $sRootPath, $osVolName, $lVolName, $ouSerialNum, $ouMaxNameLen, $ +ouFsFlags, $osFsType, $lFsType ); $sRootPath = "C:/"; GetVolumeInformation( $sRootPath, $osVolName, $lVolName, $ouSerialNum, + $ouMaxNameLen, $ouFsFlags, $osFsType, $lFsType ); #---- print "\nRoot:\t$sRootPath\n"; print "VolName:\t$osVolName\n"; print "SerialNumber:\t$ouSerialNum\n"; printf "Hex SerialNumber:\t%x\n", $ouSerialNum;
    For me, this returns
    Root: C:/ VolName: mecano SerialNumber: 2226596281 Hex SerialNumber: 84b729b9
    the stardard 'vol c:' (which you could backtick) returns
    >vol c: Volume in drive C is mecano Volume Serial Number is 84B7-29B9
    -jim

    Update: forgot the 'use' line in the code snippet

      This gets the VOLUME serial number. Not the manufacturers.
      The volume SN changes every time the disk is partitioned or formatted.

      Is there a Perl module for getting the manufacturers SN?

        Another reason that you may need the manufacturer's Serial Number: it's possible to change the volume serial number via software

        I found this when investigating the above post:

        Changing volume's serial number