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
Seite 1 von 2  1 2      
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, 21: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.508 Beiträge
 
Delphi 7 Professional
 
#2

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 19. Mär 2018, 00: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, 02: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.508 Beiträge
 
Delphi 7 Professional
 
#4

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 19. Mär 2018, 11: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, 13: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, 14: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
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 1. Apr 2018, 14:56
Vielleicht lohnt sich mal ein Blick hierauf. Mit der Trial geht ja auch schon viel. Ich habe die Lizenz für die Vollversion schon seit 17 Jahren. Der Michal steckt da wirklich viel Hirnschmalz rein. Was damit machbar ist kann man sich beim System Information X anschauen. Das Teil ist besser als manches kostenpflichtige Tool wie Sisoft Sandra etc.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 1. Apr 2018, 18:10
markus5766h, Danke für Deinen WMI-less Code! Der ergänzt meinen für die Schnittstellen wenn ich ihn denn nutzen darf!
Codehunter, Danke für die Vorstellung der Komponente, ich hab da gerade mal einen kleinen Blick drauf geworfen, unheimlich komplex all-in-one System Information, schaut auch prima aus! Am Dienstag sollte Delphi 10.2.3 ankommen (DVD), da probiere ich mal die Trial aus. Da Du das Vollprodukt besitzt, darf ich Dich fragen ob die Komponente auf WMI aufbaut?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 1. Apr 2018, 22:00
Welche Schnittstelle?
Mein BIOS kann auch so tun, als wenn mein SATA ein IDE wäre
und in der Standardeinstellung sieht die SSD sogar aus wie eine komplett andere stinknormale HDD.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Windows - Festspeicher-Schnittstelle ermitteln

  Alt 1. Apr 2018, 23:23
Da Du das Vollprodukt besitzt, darf ich Dich fragen ob die Komponente auf WMI aufbaut?
So weit ich das überblicken kann verwendet er kein WMI an der Stelle die dich interessieren dürfte sondern greift Low-Level über WinIOCtl darauf zu:
Delphi-Quellcode:
{*******************************************************}
{                 MiTeC Common Routines                 }
{                 Low-Level Disk Access                 }
{                                                       }
{         Copyright (c) 1997-2016 Michal Mutl           }
{                                                       }
{*******************************************************}

{$INCLUDE Compilers.inc}

unit MiTeC_Disk;

interface

uses {$IFDEF RAD9PLUS}
     WinAPI.Windows, System.SysUtils, System.Classes,
     {$ELSE}
     Windows, SysUtils, Classes,
     {$ENDIF}
     MiTeC_WinIOCTL;
Delphi-Quellcode:
{*******************************************************}
{               MiTeC Common Routines                   }
{          Storage Device Detection routines            }
{                                                       }
{         Copyright (c) by 1997-2018 Michal Mutl        }
{                                                       }
{*******************************************************}

{$INCLUDE Compilers.inc}

{$IFDEF RAD7PLUS}
{$WARN IMPLICIT_STRING_CAST OFF}
{$WARN IMPLICIT_STRING_CAST_LOSS OFF}
{$WARN WIDECHAR_REDUCED OFF}
{$ENDIF}

unit MiTeC_Storage;

interface

uses {$IFDEF RAD9PLUS}
     WinAPI.Windows, System.SysUtils, System.Classes,
     {$ELSE}
     Windows, SysUtils, Classes,
     {$ENDIF}
     MiTeC_WinIOCTL, MiTeC_Routines;
WMI kommt in den ganzen die Disks betreffenden Units nicht vor. Ich habe vor vielen Jahren einen (ich traus mich kaum zu sagen ^^) Floppy-basierten Kopierschutz verwendet. Die Floppy hab ich damals außerhalb des Dateisystems beschrieben und gelesen. Daran ist sogar das gute alte VGACopy gescheitert
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:20 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