Hola.
Espero ayudarte , esto esta funcionado en PB 10.5
// PB 10 / 10.5
//Declare de la Funcion
function long GetVolumeInformationA( ref string ls_RootPath, ref string ls_VolName, long ll_VolLen, ref string ls_volserial, long ll_maxcomplen, long ll_systemflags, ref string ls_SystemName, long ll_SystemLen ) Library 'kernel32' alias for "GetVolumeInformationA;Ansi"
//Scrip
String ls_Volume
String ls_Drive, ls_FileSys, ls_Flags, ls_Serial
Long ll_Max, ll_Flags, ll_RC, ll_FileSys
Long ll_Volume
cunidad=mid(cunidad,3,1)+":\"
ls_Drive = "C:\" //as_Volume
ls_Volume = Space(32)
ls_FileSys = Space(32)
ls_Serial = Space(32)
ll_Volume = Len( ls_Volume )
ll_FileSys = Len( ls_Filesys )
ll_RC = GetVolumeInformationA( ls_Drive, ls_Volume, ll_Volume, ls_Serial, ll_Max, ll_Flags, ls_FileSys, ll_FileSys )
If ll_RC = 0 Then
ls_Volume = ''
Else
ls_Volume = Trim( ls_Volume )
End If
cserial = ls_Serial
//
Integer nalargo, NoSerie[]
Integer posi
nalargo = len(trim(cserial))
For posi = 1 To nalargo
NoSerie[ (nalargo + 1) - posi] = ASC(string(mid (cserial , posi,1) ) )
Next
//Convertido a Hexa -- Yo no lo convierto.
//FOR posi = 1 TO nalargo
// st_serial.text+= f_longtohex(NoSerie[ posi ],2)
// if posi=2 then st_serial.text+="-"
//NEXT
//Long a String
For posi = 1 To nalargo
st_serial.text+=String(NoSerie[ posi ])
Next
Nro_Registro=st_serial.text
Saludos desde Argentina