Disk-Seriennummer schreiben geht doch!


[ Nachträge ] [ Nachtrag schicken ] [ Profan² News Board ]

Von Thomas Hölzer am 27 April, 1998 um 02:22:15:

Die Neugier hat schließlich über die Angst triumphiert (siehe früheren Beitrag zum Thema), und siehe da,
es geht doch - sogar ganz ohne Abstürze beim Ausprobieren!
Mit diesem Code läßt sich die Seriennummer eines
Datenträgers NUR unter Windows 95 (nicht NT !!) und nur
mit Profan32 schreiben ( ein Listing für NT wird folgen).
Nebenbei ein kleines Beispiel dafür, wie DOS-Interrupts mitten im 32 Bit-Land nach wie vor munter ihr Wesen treiben.
Es funktioniert bei mir mit sämtlichen Festplatten und dem ZIP-Drive, die jetzt alle die Seriennummer 12345 haben ;-(, weil ich blöderweise die alte Seriennummer vorher nicht ermittelt und notiert habe!
Beim Diskettenlaufwerk scheint die Funktion nur etwas zu bewirken, wenn das Medium bereits eine Seriennummer hat. Jedenfalls meldet die Funktion bei mir bei werksfrisch formatierten Disketten ohne
Seriennummer zwar Vollzug und das LW schnurrt, anschließend läßt sich aber trotzdem nichts lesen.  Nach normaler Formatierung unter Win95 geht es dann
auf einmal doch. Keine Ahnung, warum.
Bitte unbedingt beachten:
Dieser Code arbeitet ohne Netz und doppelten Boden und sollte keinesfalls in Programmen "einfach mal so eingesetzt" werden, schon gar nicht in solchen,
die auf die Öffentlichkeit losgelassen werden.
Man/frau sollte auch wirklich genau wissen, was er/sie tut und ansonsten wirklich lieber die Finger davon lassen!
Der Code dient lediglich zu Demonstrationszwecken und wird von mir ohne jegliche Gewähr zur Verfügung gestellt. Jede/r, der/die ihn einsetzt, handelt auf eigene Gefahr! Residente Virenwächter werden übrigens Alarm schlagen (mein NAV 4.0 tuts jedenfalls).
Die aktuelle Einstellung im Listing gilt für Laufwerk A: (also bitte vorher eine Diskette einlegen und ggf. Schreibschutz entfernen!)

MfG
Thomas

DEF CloseHandle(1) !"KERNEL32","CloseHandle"
DEF CreateFile(7) !"KERNEL32","CreateFileA"
DEF DeviceIoControl(8) !"KERNEL32","DeviceIoControl"
Cls
Declare VWIN32_DIOC_DOS_IOCTL%
Let  VWIN32_DIOC_DOS_IOCTL% = 1  ' DOS-Interrupt 21
Declare Vxd&,Device#,REGISTERS#,MediaData#,InOutput#
Dim Device#,14
Dim Registers#,28
Dim MediaData#,8
Dim InOutput#,4
String device#,0=ADD$("\\\\.\\vwin32",Chr$(0))
Let Vxd&=CreateFile(Device#,40000000,3,0,3,128,0)
' Virtuellen Gerätetreiber ansprechen (*vwin32 ist intern in vmm32.vxd)
' Print Vxd&, "= VXD-Handle"
Long MediaData#,2=12345      ' die Seriennummer
Long Registers#,12=$440D     ' EAX    - DOS-Funktion
Long Registers#,0=1          ' EBX    - Das Laufwerk (0=Aktuelles, 1 = A:,3=
C: usw.)
Long Registers#,8=$46        ' ECX    - Unterfunktion (Set Media ID)
Long Registers#,4=MediaData# ' EDX    - Struktur mit Datenträgerinfos

IF Equ(0,\
   DeviceIoControl(Vxd&,VWIN32_DIOC_DOS_IOCTL%,Registers#,28,\
     Registers#,28,Mediadata#,0))
  print "Fehler!"
Else
  print "Seriennummer geschrieben für Disk",
Chr$(Add(Long(Registers#,0),64));":"
EndIf
CloseHandle(Vxd&)
Dispose Device#
Dispose Registers#
Dispose MediaData#
Dispose InOutPut#
WaitInput



Nachträge:



Nachtrag schreiben

Name:
E-Mail:

Subject:

Nachricht:

Link Adresse:
Link Titel:
Bild Adresse:


[ Nachtrag ] [ Nachtrag schreiben ] [ Profan² News Board ]