GetVolumeInformation() - Serialnumber
-
Hi
Versuche mit "GetVolumeInformation()" herauszufinden ob es sich bei einer CD in einem Laufwerk um eine Bestimmte handelt.
Dazu wird auch der Wert "VolumeSerialNumber" von "GetVolumeInformation()" anscheinend korrekt geschrieben (andere Daten sind OK ( z.b Dateisystem, Volumename..)).
Da es sich jetzt um einen DWORD Wert handelt hab ich es wie folgt berabetet:
unsigned int SerialLow = LOWORD(&lpVolumeSerialNumber); unsigned int SerialHigh = HIWORD(&lpVolumeSerialNumber);
Dann geb ich das in einer Message Box als Hexwert aus:
InfoMessage.Format("Volume Bezeichnung: %s\nDateiystem: %s\nSeriennummer: %04x-%04x %d\nmaximale Dateinamen Laenge:%x", lpVolumeNameBuffer, lpFileSystemNameBuffer, SerialHigh, SerialLow, test, lpMaximumComponentLength); MessageBox(InfoMessage.GetBuffer(0), "Volume Info Message", MB_OK);
Das Problem is jetzt das ich mit dem Consolen Commando "vol" das bekomme: "CB4A-19B8" und mit meinem programm das: "0012-f6c8". Die anderen Werte Stimmen alle, obwohl "lpMaximumComponentLength" irgendwie einen extrem hohen Wert hat.
So rufe ich "GetVolumeInformation()" auf:
... LPCTSTR lpRootPathName = "j:\\"; //RootPathName; LPTSTR lpVolumeNameBuffer = new TCHAR[MAX_PATH]; DWORD nVolumeNameSize = MAX_PATH;//(MAX_PATH); LPDWORD lpVolumeSerialNumber = new DWORD; LPDWORD lpMaximumComponentLength = new DWORD; LPDWORD lpFileSystemFlags = new DWORD; LPTSTR lpFileSystemNameBuffer = new TCHAR[MAX_PATH]; DWORD nFileSystemNameSize = MAX_PATH;//(MAX_PATH); LPDWORD lpVolumeSerialNumber = new DWORD; GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize) ...
Danke für alle Tipps
-
Du solltest
LOWORD(&lpVolumeSerialNumber);
durch
LOWORD(*lpVolumeSerialNumber);
ersetzen...
bzw. es gleich so machen:
#include <windows.h> #include <tchar.h> #include <stdio.h> int _tmain() { LPCTSTR lpRootPathName = _T("c:\\"); //RootPathName; TCHAR lpVolumeNameBuffer[MAX_PATH]; DWORD dwMaximumComponentLength; DWORD dwFileSystemFlags; DWORD dwVolumeSerialNumber; TCHAR lpFileSystemNameBuffer[MAX_PATH]; BOOL bRet = GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, MAX_PATH, &dwVolumeSerialNumber, &dwMaximumComponentLength, &dwFileSystemFlags, lpFileSystemNameBuffer, MAX_PATH); _tprintf(_T("%4.4X-%4.4X"), HIWORD(dwVolumeSerialNumber), LOWORD(dwVolumeSerialNumber)); }
-
Danke
Auf so was Blödes kommt man immer am schwersten drauf.