AGB  ·  Datenschutz  ·  Impressum  







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

Seriennummer der Systemplatte...

Ein Thema von Z4ppy · begonnen am 9. Okt 2010 · letzter Beitrag vom 29. Apr 2012
Antwort Antwort
Seite 1 von 3  1 23      
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#1

Seriennummer der Systemplatte...

  Alt 9. Okt 2010, 18:22
Ich möchte gerne die Seriennummer derjenigen Festplatte auslesen, auf der das Windoof installiert ist.
Allerdings die echte (vom Hersteller vergebene) Seriennummer, da sich die beim Formatieren ja nicht ändert. Also bitte kein Hinweis auf Themen wie dieses

Ich bin nun auf WMI gestossen und schaffe es auch, darüber (mit der Query 'SELECT Model,SerialNumber FROM Win32_DiskDrive') Modell und Seriennummer auszulesen.
Aber wie finde ich nun herraus, auf welchem der zurückgegebenen Geräte Windoof installiert ist?

MfG Z4ppy
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

AW: Seriennummer der Systemplatte...

  Alt 9. Okt 2010, 18:29
Frage doch die Systemvariable "SystemRoot" ab.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Seriennummer der Systemplatte...

  Alt 9. Okt 2010, 18:36
Und weiter? Wie finde ich dann raus, auf welchem Gerät die Partition liegt?

MfG Z4ppy

€dit: OK, ich habe hier einen entsprechenden Weg gefunden. Nun hab ich versucht, das in Delphi umzusetzen, allerdings bekomme ich bei der zweiten Query ('ASSOCIATORS OF {Win32_DiskDrive.DeviceID="'+strDeviceID+'"} WHERE AssocClass = Win32_DiskDriveToDiskPartition') den Fehler "Ungültiger Objektpfad" :S

€dit2: Ich habs hingekriegt...

Geändert von Z4ppy ( 9. Okt 2010 um 23:57 Uhr)
  Mit Zitat antworten Zitat
Joerginger

Registriert seit: 22. Jan 2009
Ort: Wien
38 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Seriennummer der Systemplatte...

  Alt 7. Mär 2011, 09:30
@Z4ppy: würdest Du uns an Deinem Erfolg teilhaben lassen? Ich täte nämlich so eine Routine suchen... Wenn ich mir das von Dir verlinkte VBScript auf dem TechNet Blog ansehe verzweifle ich jetzt schon...

GLG, Joerginger
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#5

AW: Seriennummer der Systemplatte...

  Alt 7. Mär 2011, 10:17
Frage:
Aber wie finde ich nun herraus, auf welchem der zurückgegebenen Geräte Windoof installiert ist?

Antwort:
Bei Win32_SystemOperatingSystem - PartComponent stehen die Infos.

Delphi-Quellcode:
uses OleServer, WbemScripting_TLB;
procedure TForm1.Button6Click(Sender: TObject);
resourcestring
  cWQL = 'SELECT PartComponent ' + 'FROM Win32_SystemOperatingSystem';
var
FLocator : ISWbemLocator;
  aSrv : ISWbemServices;
  aObjSet : ISWbemObjectSet;
  pEnum : IEnumVARIANT;
  vOut : OleVariant;
  dwRetrieved : LongWord;
  st : String;
const Computer : String = 'SUPER'; // dein computername
begin
FLocator := CoSWbemLocator.CreateRemote(Computer);
    if FLocator <> nil then
    begin
      aSrv := FLocator.ConnectServer('','','','','','',0,nil);
      aObjSet := aSrv.ExecQuery(cWQL, 'WQL', 0, nil);
      pEnum := aObjSet.Get__NewEnum as IEnumVARIANT;
      pEnum.Next(1, vOut, dwRetrieved);
  end;
 st:= VarToStr(vOut.PartComponent);
 Memo1.lines.add(' PartComponent : '+ st);
 Memo1.lines.add(' HardDisk : '+ Copy(st,Pos('Device\\',st)+8,9));
 Memo1.lines.add(' Partition : '+ Copy(st,Pos('Device\\',st)+19,10));
end;

Geändert von hathor ( 7. Mär 2011 um 11:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DelphiSecurity
DelphiSecurity

Registriert seit: 10. Jan 2011
170 Beiträge
 
Delphi XE Architect
 
#6

AW: Seriennummer der Systemplatte...

  Alt 7. Mär 2011, 10:25
Mich würde der Quellcode auch interessieren.

(C) DelphiSecurity 2011 | Delphi XE
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#7

AW: Seriennummer der Systemplatte...

  Alt 7. Mär 2011, 11:37
Delphi-Quellcode:
function GetIdeHddSn: string;
const
    IDENTIFY_BUFFER_SIZE = 512;
type
    TIDERegs = packed record
        bFeaturesReg: BYTE; // Used for specifying SMART "commands".
        bSectorCountReg: BYTE; // IDE sector count register
        bSectorNumberReg: BYTE; // IDE sector number register
        bCylLowReg: BYTE; // IDE low order cylinder value
        bCylHighReg: BYTE; // IDE high order cylinder value
        bDriveHeadReg: BYTE; // IDE drive/head register
        bCommandReg: BYTE; // Actual IDE command.
        bReserved: BYTE; // reserved for future use. Must be zero.
    end;
    TSendCmdInParams = packed record
        cBufferSize: DWORD; // Buffer size in bytes
        irDriveRegs: TIDERegs; // Structure with drive register values.
        bDriveNumber: BYTE; // Physical drive number to send command to (0,1,2,3).
        bReserved: array [0..2] of Byte;
        dwReserved: array [0..3] of DWORD;
        bBuffer: array [0..0] of Byte; // Input buffer.
    end;
    TIdSector = packed record
        wGenConfig: Word;
        wNumCyls: Word;
        wReserved: Word;
        wNumHeads: Word;
        wBytesPerTrack: Word;
        wBytesPerSector: Word;
        wSectorsPerTrack: Word;
        wVendorUnique: array [0..2] of Word;
        sSerialNumber: array [0..19] of CHAR;
        wBufferType: Word;
        wBufferSize: Word;
        wECCSize: Word;
        sFirmwareRev: array [0..7] of Char;
        sModelNumber: array [0..39] of Char;
        wMoreVendorUnique: Word;
        wDoubleWordIO: Word;
        wCapabilities: Word;
        wReserved1: Word;
        wPIOTiming: Word;
        wDMATiming: Word;
        wBS: Word;
        wNumCurrentCyls: Word;
        wNumCurrentHeads: Word;
        wNumCurrentSectorsPerTrack: Word;
        ulCurrentSectorCapacity: DWORD;
        wMultSectorStuff: Word;
        ulTotalAddressableSectors: DWORD;
        wSingleWordDMA: Word;
        wMultiWordDMA: Word;
        bReserved: array [0..127] of BYTE;
    end;
    PIdSector = ^TIdSector;
    TDriverStatus = packed record
        bDriverError: Byte;
        bIDEStatus: Byte; // IDE SMART_IDE_ERROR
        bReserved: array [0..1] of Byte;
        dwReserved: array [0..1] of DWORD;
    end;
    TSendCmdOutParams = packed record
        cBufferSize: DWORD; // bBuffer
        DriverStatus: TDriverStatus;
        bBuffer: array [0..0] of BYTE;
    end;

var
    hDevice : THandle;
    cbBytesReturned : DWORD;
    SCIP : TSendCmdInParams;
    aIdOutCmd : array [0..( SizeOf( TSendCmdOutParams ) +
        IDENTIFY_BUFFER_SIZE -
        1 ) - 1] of Byte;
    IdOutCmd : TSendCmdOutParams absolute aIdOutCmd;

    procedure ChangeByteOrder( var Data; Size: Integer );
    var
        ptr : PChar;
        i : Integer;
        c : Char;
    begin
        ptr := @Data;
        for i := 0 to ( Size shr 1 ) - 1 do
        begin
            c := ptr^;
            ptr^ := ( ptr + 1 )^;
            ( ptr + 1 )^ := c;
            Inc( ptr, 2 );
        end;
    end;

begin
    Result := '';
    if SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT then // Windows NT, Windows 2000
    begin
        // '\\.\PhysicalDrive1\'
        hDevice := CreateFile( '\\.\PhysicalDrive0', GENERIC_READ or
            GENERIC_WRITE,
            FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
    end
    else // Version Windows 95 OSR2, Windows 98
        hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
    if hDevice = INVALID_HANDLE_VALUE then
        Exit;
    try
        FillChar( SCIP, SizeOf( TSendCmdInParams ) - 1, #0 );
        FillChar( aIdOutCmd, SizeOf( aIdOutCmd ), #0 );
        cbBytesReturned := 0;
        // Set up data structures for IDENTIFY command.
        with SCIP do
        begin
            cBufferSize := IDENTIFY_BUFFER_SIZE; // bDriveNumber := 0;
            with irDriveRegs do
            begin
                bSectorCountReg := 1;
                bSectorNumberReg := 1;
                // if Win32Platform=VER_PLATFORM_WIN32_NT then bDriveHeadReg := $A0
                // else bDriveHeadReg := $A0 or ((bDriveNum and 1) shl 4);
                bDriveHeadReg := $A0;
                bCommandReg := $EC;
            end;
        end;
        if not DeviceIoControl( hDevice, $0007C088, @SCIP, SizeOf(
            TSendCmdInParams ) - 1,
            @aIdOutCmd, SizeOf( aIdOutCmd ), cbBytesReturned, nil ) then
            Exit;
    finally
        CloseHandle( hDevice );
    end;
    with PIdSector( @IdOutCmd.bBuffer )^ do
    begin
        ChangeByteOrder( sSerialNumber, SizeOf( sSerialNumber ) );
        ( PChar( @sSerialNumber ) + SizeOf( sSerialNumber ) )^ := #0;
        Result := PChar( @sSerialNumber );
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:= GetIdeHddSn;
end;

Geändert von hathor ( 7. Mär 2011 um 12:09 Uhr)
  Mit Zitat antworten Zitat
Joerginger

Registriert seit: 22. Jan 2009
Ort: Wien
38 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Seriennummer der Systemplatte...

  Alt 7. Mär 2011, 13:00
Ich danke herzlich für die CodeSpende(n)!

GLG, Joerginger
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Seriennummer der Systemplatte...

  Alt 7. Mär 2011, 13:25
google code search findet auch genau diese function: http://www.google.com/codesearch?as_...ense=&as_case=
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#10

AW: Seriennummer der Systemplatte...

  Alt 7. Mär 2011, 17:42
Ich bin nun auf WMI gestossen und schaffe es auch, darüber (mit der Query 'SELECT Model,SerialNumber FROM Win32_DiskDrive') Modell und Seriennummer auszulesen.
MfG Z4ppy
SerialNumber
Data type: string
Access type: Read-only
Number allocated by the manufacturer to identify the physical media.
Example: WD-WM3493798728
Windows Server 2003, Windows XP, Windows 2000, and Windows NT 4.0:
This property is not available.


Deshalb function GetIdeHddSn - Siehe oben.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 16:19 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