AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Windows - Festspeicher-Schnittstelle ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Windows - Festspeicher-Schnittstelle ermitteln

Ein Thema von KodeZwerg · begonnen am 18. Mär 2018 · letzter Beitrag vom 2. Apr 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

Windows - Festspeicher-Schnittstelle ermitteln

  Alt 18. Mär 2018, 20:55
Betriebssystem: Win XP,Win Vista,Win 7,Win 8,Win 8.1,Win 10
Ich wusste nicht in welche Kategorie ich diese Frage stellen soll, bitte verschieben falls es hier unangebracht ist.

Ich entwickle eine kleine App die mir folgendes auflisten soll, Cluster/Köpfe/Seriennummer usw (für mechanische HDD) bzw das Pendant dazu für SSD.
Ich habe mir WMI dafür "ausgeborgt" um an diese Daten zu gelangen, klappt auch alles soweit ganz prächtig.
Nun bin ich dabei herauszufinden wie denn die HDD/SSD/USB-Stick/USB-Platte überhaupt mit dem System verbunden ist,
ich kann momentan nur zwischen "Intern verbaut" oder "USB" unterscheiden,
aber ich würde gerne die Schnittstelle (Beispiel ATA/133, S-ATA, S-ATAe/m.2, RAID-Verbund usw) erfahren.
Hat dazu jemand eine Idee wie ich das mit Delphi bewerkstelligen könnte?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.441 Beiträge
 
Delphi 7 Professional
 
#2

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 18. Mär 2018, 23:59
Schau mal bitte hier, ob was brauchbares dabei ist: Bei Google suchenWmi Delphi Code Creator
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 19. Mär 2018, 01:10
Olala, das hätte ich mal schon vor einer Woche Wissen müssen.
Ich Tüftel und Recherchiere mir alles einzeln zurecht, war irgendwie auch stolz das ich das mit WMI soweit ich konnte in Eigenregie hinbekam, aber das ..... Mann-O-Mann, haut mich vom Hocker.
Dein Tipp mit dem Creator ist Gold wert!
Ich kann zwar noch nicht beurteilen ob das was ich Suche dabei ist, dafür ist es zu Umfangreich, aber ich habe ein sehr gutes Gefühl dabei.
Dank voriger selbstständiger rumbastelei mit WMI fällt es mir zumindest leichter das alles zu verstehen und zu interpretieren.
Ich vertiefe mich mal in den Creator, Vielen vielen vielen, sagte ich schon vielen?, Dank!
Du bist mein Held des Tages bzw der Nacht, apropo, Gute Nacht ;D

PS: Falls jemand eventuell etwas ohne WMI zu benutzen für klüger empfindet um an solche Informationen zu gelangen, bitte hier melden. (gemeint sind umfangreiche Laufwerks-Informationen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.441 Beiträge
 
Delphi 7 Professional
 
#4

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 19. Mär 2018, 10:31
Literatur dazu (um dann mit den Infos konkret weiterzusuchen): S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology)

Und wenn's nicht so aufwändig sein soll, dann hier im Forum mal nach Smart suchen:

https://www.delphipraxis.net/dp_sear...ch_matchmode=0

und da dann das Relevante raussuchen:

https://www.delphipraxis.net/72013-s...rte-lesen.html
https://www.delphipraxis.net/69743-u...erk-smart.html

Frei nach dem Motto: Der Tag ist gerettet, da kommt nun keine Langeweile mehr auf
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 19. Mär 2018, 12:11
Der "Stoff" ist gut, Delphi ist ja eh eine Droge und Du Unterstützt meine Sucht ^-^
Damit bin ich erstmal längere Zeit beschäftigt und werde wahrscheinlich beides angehen, mit und ohne WMI, rein aus Neugier.
Danke für's sammeln und posten der links!!!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#6

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 1. Apr 2018, 13:09
wie wär's damit :

Delphi-Quellcode:
const
  IOCTL_STORAGE_QUERY_PROPERTY = $002D1400;

type
  STORAGE_QUERY_TYPE = (PropertyStandardQuery = 0, PropertyExistsQuery, PropertyMaskQuery, PropertyQueryMaxDefined);
  TStorageQueryType = STORAGE_QUERY_TYPE;

  STORAGE_PROPERTY_ID = (StorageDeviceProperty = 0, StorageAdapterProperty);
  TStoragePropertyID = STORAGE_PROPERTY_ID;

  STORAGE_PROPERTY_QUERY = packed record
    PropertyId: STORAGE_PROPERTY_ID;
    QueryType: STORAGE_QUERY_TYPE;
    AdditionalParameters: array [0..9] of AnsiChar;
  end;
  TStoragePropertyQuery = STORAGE_PROPERTY_QUERY;

  STORAGE_BUS_TYPE = (BusTypeUnknown = 0, BusTypeScsi, BusTypeAtapi, BusTypeAta, BusType1394, BusTypeSsa, BusTypeFibre,
    BusTypeUsb, BusTypeRAID, BusTypeiScsi, BusTypeSas, BusTypeSata, BusTypeMaxReserved = $7F);
  TStorageBusType = STORAGE_BUS_TYPE;

  STORAGE_DEVICE_DESCRIPTOR = packed record
    Version: DWORD;
    Size: DWORD;
    DeviceType: Byte;
    DeviceTypeModifier: Byte;
    RemovableMedia: Boolean;
    CommandQueueing: Boolean;
    VendorIdOffset: DWORD;
    ProductIdOffset: DWORD;
    ProductRevisionOffset: DWORD;
    SerialNumberOffset: DWORD;
    BusType: STORAGE_BUS_TYPE;
    RawPropertiesLength: DWORD;
    RawDeviceProperties: array [0..0] of AnsiChar;
  end;
  
  TStorageDeviceDescriptor = STORAGE_DEVICE_DESCRIPTOR;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetBusType(Drive: AnsiChar): TStorageBusType;
var
  H: THandle;
  Query: TStoragePropertyQuery;
  dwBytesReturned: DWORD;
  Buffer: array [0..1023] of Byte;
  sdd: TStorageDeviceDescriptor absolute Buffer;
  OldMode: UINT;
begin
  Result := BusTypeUnknown;

  OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    H := CreateFile(PChar(Format('\\.\%s:', [AnsiLowerCase(Drive)])), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
      OPEN_EXISTING, 0, 0);
    if H <> INVALID_HANDLE_VALUE then
    begin
      try
        dwBytesReturned := 0;
        FillChar(Query, SizeOf(Query), 0);
        FillChar(Buffer, SizeOf(Buffer), 0);
        sdd.Size := SizeOf(Buffer);
        Query.PropertyId := StorageDeviceProperty;
        Query.QueryType := PropertyStandardQuery;
        if DeviceIoControl(H, IOCTL_STORAGE_QUERY_PROPERTY, @Query, SizeOf(Query), @Buffer, SizeOf(Buffer), dwBytesReturned, nil) then
          Result := sdd.BusType;
      finally
        CloseHandle(H);
      end;
    end;
  finally
    SetErrorMode(OldMode);
  end;
end;
Markus H.
  Mit Zitat antworten Zitat
Antwort Antwort


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:40 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