Code : Tout sélectionner
Procedure.s get_disk_info(letter.s="C:\",search.s="LABEL")
Protected VNB$=Space(100);Volume Name Buffer
Protected VNS=100;Volume Name Size
Protected VSN=0;Volume Serial Number (Hex)
Protected MCL=0;Max.File Name Len
Protected FSF=0;File System Flags
Protected FSNB$=Space(100);File System Name Buffer (FAT/NTFS usw)
Protected FSNS=100;File System Name BufferSize
GetVolumeInformation_(@letter.s,@VNB$,VNS,@VSN,@MCL,@FSF,@FSNB$,FSNS)
Protected temp.s=Hex(vsn)
If Len(temp.s)>8
temp.s=Mid(temp.s,4)
EndIf
Protected serial.s=Mid(temp.s,1,4)+"-"+Mid(temp.s,5)
temp.s=""
Select search.s
Case "LABEL"
ProcedureReturn VNB$
Case "SERIAL"
ProcedureReturn serial.s;give 0, if there is no disk
Case "MAXCASENAME"
ProcedureReturn Str(mcl)
Case "FILESYSTEMNAME"
ProcedureReturn FSNB$
Case "FILESYSTEMFLAG"
ProcedureReturn Hex(fsf)
EndSelect
EndProcedure
Procedure.s hardwarekey()
Protected drive.s=Mid(GetPathPart(ProgramFilename()),1,1)
Protected label.s=get_disk_info(drive.s)
Protected serial.s=get_disk_info(drive.s,"SERIAL")
Protected maxlongname.l=Val(get_disk_info(drive.s,"MAXCASENAME"))
Protected fstype.s=get_disk_info(drive.s,"FILESYSTEMNAME")
Protected fsflag.s=get_disk_info(drive.s,"FILESYSTEMFLAG")
Protected sortie.s=hmac_sha512(drive.s+label.s+serial.s+Str(maxlongname.l),fstype.s+fsflag.s+UserName())
ProcedureReturn sortie.s
EndProcedure
MessageRequester("Votre clé materiel est : ",hardwarekey())