Seite 1 von 3

Seriennummer der HDD Ermitteln

Verfasst: 23.11.2004 21:54
von MVXA
Hallo
Ich hab nach nem Codeschnippsel gesucht um die Seriennummer der Festplatte zu ermitteln. Leider funktionierte der Code im CodeArchiv nur unter Windows NT. Hier ne möglichkeit um es auch unter Windows98 zu ermitteln:

Code: Alles auswählen

Procedure.s ReturnHDDSerial(Laufwerk.s)
    DefType.l tmpSerial
    DefType.s tmpLfwrk, tmpFileSystem
    
    tmpLfwrk      = Left(Laufwerk, 1) + ":\"
    tmpFileSystem = Space(256)
    GetVolumeInformation_(@tmpLfwrk, @tmpFileSystem, 255, @tmpSerial, 0, 0, @tmpFileSystem, 255)
    Debug Hex(tmpSerial)
    
    ProcedureReturn Hex(tmpSerial)
EndProcedure


MessageRequester("Festplatte", ReturnHDDSerial("c"))
MessageRequester("Festplatte", ReturnHDDSerial("d"))
Den Code hab ich aus nem VB Beispiel übernomen.

[Edt.]
Habs nochmal in ner Funktion gekapselt
[Edt2:]
Die Seriennummer wird nun in Hexform zurück gegeben. Der zurückgegebener Wert stimmt mit dem Wert in AIDA überein. Daraus schließe ich das der Code nun funktionieren sollte.

Verfasst: 23.11.2004 22:30
von orange-blue
Ne Frage:
Wenn ich 2 Partitionen hab, die auf der selben HDD, müsste ich doch die selbe Seriennummer zurück bekommen oder?

Verfasst: 23.11.2004 22:45
von ts-soft
@orange-blue
ja

Verfasst: 23.11.2004 22:53
von orange-blue
lol
Ich bekomm bei der ersten ne 10 stellige nummer 10 stellige Nummer und bei der 2. auch ne stellige aber ne andere mit einem Minus davor. Könnte eine Seriennummer nicht außerdem Buchstaben enthalten?
Wo kann ich ma die seriennummer noch anzeigen lassen?

Verfasst: 23.11.2004 23:03
von ts-soft
Mir scheint der Rückgabewert des Codes von Little-Furz ist verkehrt

Unter XP kommt auf jeden Fall ein ganz anderes Ergebnis wie mit Ring seiner Routine. Werde das jetzt gleich nochmal unter 98 Testen

Verfasst: 23.11.2004 23:09
von ts-soft
Eigentlich beginnt die SerienNr. mit Buchstaben und endet mit Zahlen.

Der Code von LittleFurz gibt nur Zahlen zurück, unter XP negative, und für verschieden Partionen derselben Platte unterschiedliche. Unter Win98 kann ich nur mit einer Platte testen. Der Wert ist Positiv, enthält aber nur Ziffern.

Ich würde sagen der Code müßte nochmal kontrolliert werden

Verfasst: 23.11.2004 23:19
von MVXA
Das Problem ist halt, das diese API (laut ner HP) eine dword variable als tmpSerial dort erwartet(unter win98 und winXP funktioniert das etwas utnerschiedlich :freak:). Unter win98 funktioniert das mit Float GARNICHT aber dafür unter winXP "etwas".

Die Routine von Rings hat ein kleines Problem. Sie funktioniert nur unter NT Systemen /:->

Ich nehme mal an, das tmpSerial n Pointer zu einen String im Memory ist. Kann ja mal wer testen, bin grad an nem PC ohne PB :(

Verfasst: 24.11.2004 10:01
von Rings
LittleFurz hat geschrieben:Die Routine von Rings hat ein kleines Problem. Sie funktioniert nur unter NT Systemen /:->
ich seh das als Feature an :

Ausserdem versucht ihr hier Äpfel und Birnen aus der Hdisk zu bekommen.
Meine Routine frägt das Laufwerk (die Firmware) ab, ihr lest jedoch nur die Nummer aus die Windows in der Registry einträgt (Und die verändert werden kann)

Verfasst: 24.11.2004 17:14
von MVXA
Rings hat geschrieben:ich seh das als Feature an :
Ich sehe das mehr als ein Problem an um ein Programm unter mehreren Systemen lauffähig zu machen. Außerdem hab ich schon gehant, dass das was die beiden Codes zurück geben schon richtig ist.AIDA zeigt die Seriennummer einmal in Hex und einmal in String form an. Darauf schließe ich einfach mal das es die Seriennummer in Hex form und Text form gibt

Verfasst: 24.11.2004 19:59
von ts-soft
@Rings

Wenn sich Deine Routine nicht an Win9x anpassen läßt, ist sie auch nicht besonders flexibel. Wer bereits jetzt Win9x außer Acht läßt, verliert dadurch viele Kunden. Sogar MS bietet inzwischen wieder Updates für Win9x an. Die haben Ausnahmsweise mal einen Fehler korrigiert. Ich selber verwende Win9x allerdings nur noch zu Testzwecken