![]() |
Betriebssystem: Win XP,Win Vista,Win 7,Win 8,Win 8.1,Win 10
Windows - Festspeicher-Schnittstelle ermitteln
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? |
AW: Windows - Festspeicher-Schnittstelle ermitteln
Schau mal bitte hier, ob was brauchbares dabei ist:
![]() |
AW: Windows - Festspeicher-Schnittstelle ermitteln
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) |
AW: Windows - Festspeicher-Schnittstelle ermitteln
Literatur dazu (um dann mit den Infos konkret weiterzusuchen):
![]() Und wenn's nicht so aufwändig sein soll, dann hier im Forum mal nach Smart suchen: ![]() und da dann das Relevante raussuchen: ![]() ![]() Frei nach dem Motto: Der Tag ist gerettet, da kommt nun keine Langeweile mehr auf ;-) |
AW: Windows - Festspeicher-Schnittstelle ermitteln
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!!! |
AW: Windows - Festspeicher-Schnittstelle ermitteln
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; |
AW: Windows - Festspeicher-Schnittstelle ermitteln
Vielleicht lohnt sich mal ein Blick
![]() ![]() |
AW: Windows - Festspeicher-Schnittstelle ermitteln
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? |
AW: Windows - Festspeicher-Schnittstelle ermitteln
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. |
AW: Windows - Festspeicher-Schnittstelle ermitteln
Zitat:
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:
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 :twisted:
{*******************************************************}
{ 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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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