Seriennummer der Festplatte auslesen
-
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