Festplatten-ID und Systempfad abrufen? Windows
-
Hi,
ich möchte gern mittels Java die Festplatten-ID o. eine andere eineindeutige Seriennummer auslesen. Desweiteren möchte ich den Systempfad der Festplatte auslesen.
Sowas:
\device\harddisk0\partition0
und halt zur Festplatte an sich die Hardware-ID.Das man beim wechseln der Festplatte, also beim physikalischen umstecken der Laufwerke anhand der ID weiß welche Platte es ist und den neuen Pfad kennt.
Das ganze ist für ein Windowssystem gedacht
Geht sowas überhaupt und wenn nicht ginge es mit einer anderen Sprache?
mfg
-
gehen wirds sicherlich ich glaube du kommst aber um betriebssystemrufe nicht drum herum. Daher wird Java nicht die beste sprache dafür sein, ich denke auch in java gibts möglichkeiten funktionen aus einer dll zu rufen.
Ein schneller blick sagt mir das es nicht direkt in Java geht. Man kann sich per JNI eine art Wrapper bauen und über eine andere Sprache (zweckmässig C oder C++) die dll funktion rufen. Aber naja dann kann mans auch gleich in einer anderen sprache machen
-
könnte man die ID eventuell mit ner Batch bekommen? Ich nehm nämlich mal an das die IDs irgendwo in der Regestry stehen da Windows ja auch irgendwie die Laufwerke zuordnen muß.
nachtrag:
Das hab ich nach langem suchen gefunden ... das ist an sich schon in etwa was ich bräuchte, zumindestens sieht es so aus. Das sind befehle aus der Win-API. Kann man darauf aus Java zugreifen?
BOOL GetVolumeInformation( LPCTSTR lpRootPathName, // root directory LPTSTR lpVolumeNameBuffer, // volume name buffer DWORD nVolumeNameSize, // length of name buffer LPDWORD lpVolumeSerialNumber, // volume serial number LPDWORD lpMaximumComponentLength, // maximum file name length LPDWORD lpFileSystemFlags, // file system options LPTSTR lpFileSystemNameBuffer, // file system name buffer DWORD nFileSystemNameSize // length of file system name buffer );
-
nein genau das kann man eben nicht direkt sondern nur über das JNI. Wenn du unbedingt in Java sowas nutzen willst musst du das benutzen.
Es läuft ungefähr so ab.
Du sagt Java das es so eine funktion gibt die du nutzen willst
Lässt eine art JNI compiler drüber laufen. Der Erzeugt nen Header mit einer entsprechenden definition. In C oder C++ schreibst du dann den Quellcode für die im Header definierten funktionen welche dann halt die api funktion aufrufen..Es geht also nur über den zwischenschritt einer anderen Programmiersprache.
In der Registry steht zu den Platten wohl nichts drinnen. Ganz einfach weil sich Windows die infos direkt von der HD holen kann.
-
kenn zwar nichts dementsprechendes aus dem stegreif, könnt mir aber durchaus vorstellen, dass es bereits fertige JNI libs für winapi gibt.
ansonsten ist JNI lib auch nicht so wild. alles, was du im grunde machen musst, ist ein "native" in deine entsprechende methode einzufügen, javah rüberbügeln zu lassen (oder auch nicht, die konvention ist wirklich simpel) und ne DLL zu basteln.