![]() |
Re: Problem beim auslesen der Festplatten Seriennummer
Zitat:
|
Re: Problem beim auslesen der Festplatten Seriennummer
Auch die anderen Tools, die den "dritten Weg" benutzen, benötigen Admin Rechte. Allerdings nur während des Setups der Anwendung wenn ein Treiber installiert wird. Ein Treiber wie GiveIO.sys oder ähnlichem. Denn der "dritte Weg" greift auf die IDE direkt und physikalisch auf die Ports der Laufwerke zu. Wurde also einmalig dieser Treiber installiert (nur unter NT nötig) dann kann später als normaler Benutzer die Funktionalität dieses Treibers benutzt werden, und ergo direkt auf die HD zugegriffen werden und finally somit direkt die HD Register ausgelsen werden, inklusive physikalsicher Serial Nummer.
Der "vierte Weg" für Dummies ist einfach in der Registry nachzuschauen. Am besten mal in der Registry die HD Serialnummer manuell ändern und du wirst sehen das viele der sogenannten "Hardware-Utilities" sich die Daten nur aus der Registry holen ;) Gruß Hagen |
Re: Problem beim auslesen der Festplatten Seriennummer
Die nutzen einen Porttreiber bei IDE? Oh, das wäre doch mehr als kreuz-gefährlich, weil wie wollen sie anstehende bzw. gerade aktive Zugriffe des OS auf die Festplatte mitbekommen? Auch müssen sie sich die nötigen Zugriffe und Informationen für den PIC und DMA Controller holen bzw. über eine API ansprechen. Damit funken diese doch aber ganz schön Windows dazwischen. Das würde die Datensicherheit und Stabilität doch deutlich reduzieren - der Weg wäre mir als Firma/Entwickler einer Info-Software viel zu heikel...
|
Re: Problem beim auslesen der Festplatten Seriennummer
Hallo,
danke für eure Antworten :) Die Methode die ich oben benutze ist ja über die S.M.A.R.T. features der Festplatte (und brauch leider admin rechte). Die nächste Methode ist über WMI, geht ganz einfach, 5 Zeilen Code ... aber leider erst ab WinXP :( Die dritte Methode die auch KEINE Admin rechte brauch geht direkt auf die Win API, soviel konnte ich herausfinden. Aber ich habe leider nicht den Ansatz eines Codeschnippsels gefunden :( @negaH: Also HD-Tune braucht definitiv keine Admin rechte und wird nicht installiert. Probier es aus ( ![]() Und in der registry steht meines wissens nicht die wirkliche HDD Seriennummer, sondern nur die der logischen Laufwerke. Ich lasse mich aber gerne eines besseren belehren, registry wäre optimal für mich da ich ja keinen kopierschutz bauen will und es nicht mit böswilligen Usern zu tun habe. Aber vielleicht kommt ja noch ein WinAPI Guru vorbei der mir sagen kann wie man mit Hilfe der WinAPI vielleicht da ran kommen könnte. Gruß Oliver |
Re: Problem beim auslesen der Festplatten Seriennummer
Zitat:
Vllt. könnte negaH nettwerweise einen kleinen Codeschnipsel posten um die Keys zu erreichen. |
Re: Problem beim auslesen der Festplatten Seriennummer
Es würde reichen die Schlüssel zu nennen. ;)
|
Re: Problem beim auslesen der Festplatten Seriennummer
Zitat:
ich habe die registry schon einmal nach meiner HDD Seriennummer durchsucht, also im Reintext hab ich sie nicht gefunden. Gruß Oliver |
Re: Problem beim auslesen der Festplatten Seriennummer
schau mal hier
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\I DE |
Re: Problem beim auslesen der Festplatten Seriennummer
Zitat:
|
Re: Problem beim auslesen der Festplatten Seriennummer
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe jetzt eine Möglichkeit gefunden. Naja so halb ... *g Ich habe eine Möglichkeit in c++ gefunden die funktioniert und kämpfe mit der Übersetzung :wall: Hab leider nur rudimentäre c++ kenntnisse :cry: Also die c++ Lösung gibt es hier: ![]() Es wird im Prinzip auch die S.M.A.R.T. Werte ausgelesen wie ich es schon mache, nur das man es über eine Backdoor als angebliches scsi laufwerk anspricht und so windows austrickst *so habe ich das verstanden* Falls sich jemand berufen fühlt mir bei der Übersetzung zu helfen :dp: Es hapert im Moment an der Übersetzung der
Delphi-Quellcode:
Das ist ein selbstdefiniertes struct von ihm weiter oben das auf eine(für mich nicht verständliche) Weise von IOCTL_STORAGE_BASE erbt. Oder so *g
STORAGE_PROPERTY_QUERY query;
Ich würde mich freuen wenn mir jemand helfen könnte :) Ich hänge mal den c++ code als attachment an und hier ist die fragliche Funktion
Code:
Gruß Oliver
int ReadPhysicalDriveInNTWithZeroRights (void)
{ int done = FALSE; int drive = 0; for (drive = 0; drive < MAX_IDE_DRIVES; drive++) { HANDLE hPhysicalDriveIOCTL = 0; // Try to get a handle to PhysicalDrive IOCTL, report failure // and exit if can't. char driveName [256]; sprintf (driveName, "\\\\.\\PhysicalDrive%d", drive); // Windows NT, Windows 2000, Windows XP - admin rights not required hPhysicalDriveIOCTL = CreateFile (driveName, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); // if (hPhysicalDriveIOCTL == INVALID_HANDLE_VALUE) // printf ("Unable to open physical drive %d, error code: 0x%lX\n", // drive, GetLastError ()); if (hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE) { STORAGE_PROPERTY_QUERY query; DWORD cbBytesReturned = 0; char buffer [10000]; memset ((void *) & query, 0, sizeof (query)); query.PropertyId = StorageDeviceProperty; query.QueryType = PropertyStandardQuery; memset (buffer, 0, sizeof (buffer)); if ( DeviceIoControl (hPhysicalDriveIOCTL, IOCTL_STORAGE_QUERY_PROPERTY, & query, sizeof (query), & buffer, sizeof (buffer), & cbBytesReturned, NULL) ) { STORAGE_DEVICE_DESCRIPTOR * descrip = (STORAGE_DEVICE_DESCRIPTOR *) & buffer; char serialNumber [1000]; char modelNumber [1000]; strcpy (serialNumber, flipAndCodeBytes ( & buffer [descrip -> SerialNumberOffset])); strcpy (modelNumber, & buffer [descrip -> ProductIdOffset]); if (0 == HardDriveSerialNumber [0] && // serial number must be alphanumeric // (but there can be leading spaces on IBM drives) (isalnum (serialNumber [0]) || isalnum (serialNumber [19]))) { strcpy (HardDriveSerialNumber, serialNumber); strcpy (HardDriveModelNumber, modelNumber); done = TRUE; } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz