"Ist C: eine SSD oder HDD?" per WinAPI auf Win 7
- Könnte jemand untiges Programm auf einer seiner Win7-Installationen testen?
- Gibt es andere Ideen, HDDs ohne Admin-Rechte zuverlässig zu erkennen?
Unser Reporting-Tool soll künftig melden, ob im PC noch echte Festplatten verwendet werden. Es gibt schon Code, der SSDs anhand der Trim-Unterstützung erkennt. Ich habe daraus dieses kleine Programm zum Testen geschrieben. Auf meinem (vollständig gepatchtem) Windows-7-Testsystem versagt leider DeviceIoControl, was laut Quelle nicht sein sollte. Möglicherweise irrt die Quelle, es könnte aber auch an meiner Konfiguration oder einem Fehler im Quelltext liegen.
#pragma comment(lib, "kernel32.lib") {{comment_multi_line:0}}
#pragma comment(lib, "user32.lib") {{comment_multi_line:1}}
#include <windows.h>
#include <winioctl.h> {{comment_multi_line:2}}
int main(void)
{
HANDLE ger; /* Gerät */
STORAGE_PROPERTY_QUERY anfr; /* Anfrage */
DEVICE_TRIM_DESCRIPTOR aw; /* Antwort */
DWORD len; /* Länge der Antwort */
anfr.PropertyId = StorageDeviceTrimProperty;
anfr.QueryType = PropertyStandardQuery;
if ((ger = CreateFile("\\\\.\\C:", 0, 0,
NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
{ MessageBox(0, "creat", "Antwort", 0); return -1; }
/* gibt 0, NtDeviceIoControl = C000000010 */
if (!DeviceIoControl(ger, IOCTL_STORAGE_QUERY_PROPERTY,
&anfr, sizeof(anfr), &aw, sizeof(aw), &len, NULL))
{ MessageBox(0, "ioctl", "Antwort", 0); return -1; }
CloseHandle(ger);
if (len == 0)
{ MessageBox(0, "len=0", "Antwort", 0); return -1; }
MessageBox(0, aw.TrimEnabled ? "ja" : "nein", "Antwort", 0);
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 21809055632
Url: https://administrator.de/contentid/21809055632
Ausgedruckt am: 04.12.2024 um 08:12 Uhr
1 Kommentar
Hi,
schau Dir mal die Microsoft WMI Klasse "MSFT_PhysicalDisk" an. Bei einer SSD ist der mediatype "4" und SpindleSpeed ist "0".
https://learn.microsoft.com/de-de/windows-hardware/drivers/storage/msft- ...
cu,
ipzipzap
EDIT: ARGHH! Sehe gerade Mindestversion ist Windows 8. Sorry
schau Dir mal die Microsoft WMI Klasse "MSFT_PhysicalDisk" an. Bei einer SSD ist der mediatype "4" und SpindleSpeed ist "0".
https://learn.microsoft.com/de-de/windows-hardware/drivers/storage/msft- ...
cu,
ipzipzap
EDIT: ARGHH! Sehe gerade Mindestversion ist Windows 8. Sorry