Page 1 sur 1
Lib InfoHD retourne des informations physique du disque dur
Publié : dim. 16/oct./2005 9:00
par julien
Voici ma nouvelle lib : InfoHD()
Cette librairie permet d'avoir des informations sur le disque dur :
- Numero de serie physique (pas du volume)
- Nom d'usine du disque dur
- Version du Firmware
Le lien :
http://purebasic.free.fr/Purebasic/userlib/infoHd.zip
Je l'ai testé sous Windows 2000 et XP avec des disque dur recent. Si vous pouviez la tester sous Win98 et avec vos disque dur !
Dîtes moi ce que vous en pensez
Voici un exemple d'utilisation
Code : Tout sélectionner
; Exemple
MessageRequester("Model",InfoHD(0,#HD_Model),0)
MessageRequester("Numero de série physique",InfoHD(0,#HD_Serie),0)
MessageRequester("Version du Firmware",InfoHD(0,#HD_Firmware),0)
MessageRequester("Toutes les informations",InfoHD(0,#HD_tout),0)
Publié : dim. 16/oct./2005 9:04
par bernard13
tu es bon pour crée les lib toi
Bravo felicitation
j'aime beaucoup tes libs
Publié : dim. 16/oct./2005 9:59
par Remy Vincent
Mon dieu, j'ai quatres messages vides, est-ce normal ... ?
par contre les titres sont exactement les mêmes que dans le code!
Je suis trop frustré.., mais je peux pas tester plus sur mon Windows 98 ( sans les sources de "InfoHD" ).
Bon courage
PS: VersionLibHD() affiche "1.00", je n'ai peut-être pas téléchargé la bonne version??
Publié : dim. 16/oct./2005 11:19
par gansta93
Malgré son message plus qu'idiot parce que provocateur, il a raison... marche pas sous Win 98.
Publié : dim. 16/oct./2005 11:22
par julien
C'est quoi le model de votre disque dur, je pense que ça ne fonctionne pas sur les disque ne supportant pas la tech. smart
Edit : Normalement si ça echoue la fonction retourne "-1"
Publié : dim. 16/oct./2005 23:01
par KarLKoX
Pas mal, lib en opensource ?

J'aimerais bien y jeter un oeil (simple curiosité)

Publié : lun. 17/oct./2005 8:08
par gnozal
Exemple pour le numéro de série du disque dur (d'après un code de Rings).
Fonctionne aussi sous Win9x.
Code : Tout sélectionner
Procedure.s ChangeHighLowByte(Instring.s) ;Change Big-Little Endian
Protected sdummy.s, l.l, I.l
l = Len(Instring)
For I = 1 To l Step 2
If (I + 1) <= l
sdummy = sdummy + Mid(Instring, I + 1, 1) + Mid(Instring, I, 1)
EndIf
Next I
ProcedureReturn sdummy
EndProcedure
Structure IDEREGS
bFeaturesReg.b
bSectorCountReg.b
bSectorNumberReg.b
bCylLowReg.b
bCylHighReg.b
bDriveHeadReg.b
bCommandReg.b
bReserved.b
EndStructure
Structure DRIVERSTATUS
bDriveError.b
bIDEStatus.b
bReserved.b[2]
dwReserved.l[2]
EndStructure
Structure SENDCMDINPARAMS
cBufferSize.l
irDriveRegs.IDEREGS
bDriveNumber.b
bReserved.b[3]
dwReserved.l[4]
EndStructure
Structure SENDCMDOUTPARAMS
cBufferSize.l
DStatus.DRIVERSTATUS
bBuffer.b[512]
EndStructure
#DFP_RECEIVE_DRIVE_DATA = $7C088
ProcedureDLL.s GetDriveSerial(PhysicalDrive.l) ; Retrieves physical drive serial [empty string if failed]
Protected mvarCurrentDrive.l, VersionInfo.OSVERSIONINFO, Platform.l, hdh.l, br.l, Result.l
Protected bin.SENDCMDINPARAMS, bout.SENDCMDOUTPARAMS, Serial.s
If PhysicalDrive >= 0 And PhysicalDrive <= 255
VersionInfo\dwOSVersionInfoSize = SizeOf(OSVERSIONINFO)
Platform = GetVersionEx_(VersionInfo)
If Platform
If VersionInfo\dwPlatformId = #VER_PLATFORM_WIN32_WINDOWS ; Win9x/Me
hdh = CreateFile_("\\.\SMARTVSD", #GENERIC_READ, #FILE_SHARE_READ, 0, #OPEN_EXISTING, 0, 0)
Else ; NT kernel
hdh = CreateFile_("\\.\PhysicalDrive" + Str(PhysicalDrive), #GENERIC_READ | #GENERIC_WRITE, #FILE_SHARE_READ | #FILE_SHARE_WRITE, 0, #OPEN_EXISTING, 0, 0)
EndIf
EndIf
If hdh <> #INVALID_HANDLE_VALUE
bin\bDriveNumber = PhysicalDrive
bin\cBufferSize = 512
If PhysicalDrive & 1
bin\irDriveRegs\bDriveHeadReg = $B0
Else
bin\irDriveRegs\bDriveHeadReg = $A0
EndIf
bin\irDriveRegs\bCommandReg = $EC
bin\irDriveRegs\bSectorCountReg = 1
bin\irDriveRegs\bSectorNumberReg = 1
Result = DeviceIoControl_(hdh, #DFP_RECEIVE_DRIVE_DATA, bin, SizeOf(SENDCMDINPARAMS), bout, SizeOf(SENDCMDOUTPARAMS), @br, 0)
If br > 0
Serial = Trim(ChangeHighLowByte(PeekS(@bout\bBuffer[0] + 20, 20)))
EndIf
EndIf
EndIf
ProcedureReturn Serial
EndProcedure
Debug GetDriveSerial(0)
Publié : lun. 17/oct./2005 9:17
par KarLKoX
Ok, c'est juste que j'avais codé et
posté un truc similaire et je voulais voire comment Rings s'y étais pris pour le support win98

Publié : lun. 17/oct./2005 10:52
par gnozal
En fait, le code original de Rings ne le supporte pas !
La solution vient plus tard dans le thread :
http://forums.purebasic.com/english/vie ... php?t=6599
Publié : lun. 17/oct./2005 11:06
par KarLKoX
oui oui, j'avais vu ça

(j'avais rien trouvé sur la MSDN).