AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem beim auslesen der Festplatten Seriennummer
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim auslesen der Festplatten Seriennummer

Ein Thema von dbdeath74 · begonnen am 20. Okt 2006 · letzter Beitrag vom 26. Sep 2015
Antwort Antwort
Seite 2 von 4     12 34      
Muetze1
(Gast)

n/a Beiträge
 
#11

Re: Problem beim auslesen der Festplatten Seriennummer

  Alt 23. Okt 2006, 22:33
Zitat von dbdeath74:
Ich denke es muss über S.M.A.R.T. gehen.
Ich kann dir versichern, dass S.M.A.R.T. die gleichen Rechte braucht, da es genauso ein Handle für das PhysicalDrive braucht.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#12

Re: Problem beim auslesen der Festplatten Seriennummer

  Alt 24. Okt 2006, 10:18
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: Problem beim auslesen der Festplatten Seriennummer

  Alt 24. Okt 2006, 11:55
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...
  Mit Zitat antworten Zitat
dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#14

Re: Problem beim auslesen der Festplatten Seriennummer

  Alt 24. Okt 2006, 12:53
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 (HD Tune)
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: Problem beim auslesen der Festplatten Seriennummer

  Alt 24. Okt 2006, 13:56
Zitat von dbdeath74:
Und in der registry steht meines wissens nicht die wirkliche HDD Seriennummer, sondern nur die der logischen Laufwerke.
Nein, die Hardwaredaten werden dort mit abgelegt - u.a. auch die wichtigsten Daten des DEVICE INQUIRY bei den Laufwerken.

Vllt. könnte negaH nettwerweise einen kleinen Codeschnipsel posten um die Keys zu erreichen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Problem beim auslesen der Festplatten Seriennummer

  Alt 24. Okt 2006, 14:08
Es würde reichen die Schlüssel zu nennen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#17

Re: Problem beim auslesen der Festplatten Seriennummer

  Alt 24. Okt 2006, 16:16
Zitat von Luckie:
Es würde reichen die Schlüssel zu nennen.
ja das würde reichen
ich habe die registry schon einmal nach meiner HDD Seriennummer durchsucht, also im Reintext hab ich sie nicht gefunden.

Gruß Oliver
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#18

Re: Problem beim auslesen der Festplatten Seriennummer

  Alt 24. Okt 2006, 17:02
schau mal hier

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\I DE
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#19

Re: Problem beim auslesen der Festplatten Seriennummer

  Alt 24. Okt 2006, 17:26
Zitat von ACE-ppc:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\I DE
Die hatte ich so halb auch im Sinn, habe sie aber nicht gepostet, da dort keine Seriennummer zu finden ist.
  Mit Zitat antworten Zitat
dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#20

Re: Problem beim auslesen der Festplatten Seriennummer

  Alt 26. Okt 2006, 13:47
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

Hab leider nur rudimentäre c++ kenntnisse

Also die c++ Lösung gibt es hier:

diskid32, ist freeware und darf weiterverwendet werden.

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

Es hapert im Moment an der Übersetzung der
STORAGE_PROPERTY_QUERY query; 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

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:
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;
          }
Gruß Oliver
Angehängte Dateien
Dateityp: cpp diskid32_208.cpp (36,6 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz