Re: hard drive serial numbers
- Posted by c.k.lester <euphoric at ck?e?ter.com> Oct 31, 2007
- 581 views
Here's what I use for a Win32 app: --include dll.e --include machine.e --include get.e constant kernel32 = open_dll( "kernel32.dll" ), xGetVolumeInfo = define_c_func( kernel32, "GetVolumeInformationA", {C_POINTER, C_POINTER, C_UINT, C_POINTER, C_POINTER, C_POINTER, C_POINTER, C_UINT }, C_INT) global function get_drive(sequence s) integer i s = reverse( s ) i = match( "\\", s ) if i > 0 then s = s[i..$] end if s = reverse( s ) return s end function global function getVolSerial( object root_dir ) -- Input: A string that contains the root directory of the volume to be described. -- A trailing backslash is required. For example, you would specify -- \\MyServer\MyShare as "\\\\MyServer\\MyShare\\", or the C drive as "C:\\". -- Output: Volume Serial Number atom rootPathName, volSerNum sequence ret_val if atom(root_dir) then root_dir = root_dir & ":\\" end if rootPathName = allocate_string( root_dir ) volSerNum = allocate( 4 ) if not c_func( xGetVolumeInfo, { rootPathName, NULL, NULL, volSerNum, NULL, NULL, NULL, NULL } ) then --puts( 1, "\n**xGetVolumeInfo failed in function getVolSerial**\n" ) --puts(1, root_dir) end if ret_val = { peek4u( volSerNum ) } free( rootPathName ) free( volSerNum ) return ret_val end function