Seriennummer der Festplatte auslesen
-
Hallo,
ich möchte gerne die Seriennummer der Festplatte auslesen. Dabei beziehe ich mich nicht auf die Seriennummer, die vom Bertriebssystem generiert wird, sondern auf die des Herstellers der Festplatte.
Gibt es eine Möglichkeit diese zu bekommen?
Ich hatte es mit der Funktion GetVolumeInformation() probiert. Lieferte mir aber NICHT das gewünschte Ergebniss.
Bitte um Hilfe.
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
steht in
HEY_KEY_LOCAL_MACHINE\Hardware\DeviceMap\AtDisk
nur bei NT-Systemen.. also ab w2k, denke ich.
-
Leider gillt das nicht bei mir, obwohl ich Win XP nutze.
Habe mich schon mal mit WMI beschäftigt. Komme damit nicht klar. Hat jemand nicht ein Quelltextbeispiel?
-
WMI ist krass... irgendwo hab ich mal was damit gemacht.. wenn ichs finde poste ichs noch...
-
Wäre dir sehr dankbar...
Bin ich auch jetzt schon.
-
bool IsDiskInDrive(AnsiString slDrive, AnsiString &slVolName, DWORD& dwVolumeSerial) { bool blRetVal = false; UINT iErrMode; TCHAR szVolName[256]; DWORD dwMaxComSize; DWORD dwFlags; TCHAR szFS[256]; if(slDrive.Length() > 0) { iErrMode = SetErrorMode(SEM_FAILCRITICALERRORS); blRetVal = GetVolumeInformation((slDrive.SubString(1,1)+ ":\\").c_str(), szVolName, sizeof(szVolName), &dwVolumeSerial, &dwMaxComSize, &dwFlags, szFS, sizeof(szFS)); SetErrorMode(iErrMode); } slVolName = blRetVal ? AnsiString(szVolName) : EmptyStr; return blRetVal; }
Referenz dwVolumeSerial
-
VergissEs schrieb:
bool IsDiskInDrive(AnsiString slDrive, AnsiString &slVolName, DWORD& dwVolumeSerial) { bool blRetVal = false; UINT iErrMode; TCHAR szVolName[256]; DWORD dwMaxComSize; DWORD dwFlags; TCHAR szFS[256]; if(slDrive.Length() > 0) { iErrMode = SetErrorMode(SEM_FAILCRITICALERRORS); blRetVal = GetVolumeInformation((slDrive.SubString(1,1)+ ":\\").c_str(), szVolName, sizeof(szVolName), &dwVolumeSerial, &dwMaxComSize, &dwFlags, szFS, sizeof(szFS)); SetErrorMode(iErrMode); } slVolName = blRetVal ? AnsiString(szVolName) : EmptyStr; return blRetVal; }
Referenz dwVolumeSerial
Das Problem dabei ist, dwVolumeSerial ist die Serial, die bei Formatierung angegeben wurde. Er will aber direkt die Herstellerserial...
-
Geht leider nur über die WMI
-
Erstmal danke, dass alle viele Ideen eingebracht haben. Das Meiste war nicht neu für mich. Problem ist eigentlich nur WMI!
Da steige ich einfach nicht ganz durch. Muss dazu sagen, dass mein Englisch nicht besonders ist und ich auf der MSDN-Seite nur in leere laufe.
Wäre also super toll, wenn jemand ein Beispiel zu dem Thema hat und es hier Online stellen könnte.
-
Hallo.
Also ein C++ Beisüiel um WMI Daten vom lokalen Computer auszulesen gibt es hier
http://msdn2.microsoft.com/en-us/library/aa390423(VS.85).aspxUm die Seriennummer deiner Festplatte zu bekommen musst du dir die passende WMI Klasse raussuchen. In deinem Fall könnte es die sein
http://msdn2.microsoft.com/en-us/library/aa394132(VS.85).aspxAus dieser Klasse suchst du dir dann die Eigenschaft die du benötigst. Die Festplattenserial könnte in der Eigenschaft "DeviceID" enthalten sein. Also ersetzt du im obigen Codebespiel "Win32_OperatingSystem" durch "Win32_DiskDrive"
// Step 6: -------------------------------------------------- // Use the IWbemServices pointer to make requests of WMI ---- // For example, get the name of the operating system IEnumWbemClassObject* pEnumerator = NULL; hres = pSvc->ExecQuery( bstr_t("WQL"), bstr_t("SELECT * FROM Win32_DiskDrive"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
und um die Eigenschaft zu bekommen "Name" durch "DeviceID"
// Get the value of the Name property hr = pclsObj->Get(L"DeviceID", 0, &vtProp, 0, 0); wcout << " Serial is : " << vtProp.bstrVal << endl; VariantClear(&vtProp);
Diese Ausgabe funktioniert natürlich nur so langde du einen string als Eigenschaft hast.
-
und hier mal die ganze sache ohne wmi: http://www.codeproject.com/KB/mcpp/DriveInfoEx.aspx