IOCTL_VOLUME_READ_PLEX IOCTL (ntddvol.h)
Führt einen Lesevorgang für einen bestimmten Plex eines Volumes aus. Da alle Plexes identisch sind, kann der Volume-Manager während eines normalen Lesevorgangs Daten aus den Plexes eines Volumes abrufen. Der Volume-Manager verteilt Lesevorgänge auf die Plexes eines Volumes, um die E/A-Last auf den physischen Medien auszugleichen und die Leseleistung zu maximieren.
Wenn jedoch eine Anwendung oder Kernelmoduskomponente Daten aus einem bestimmten Plex lesen muss, anstatt den Volume-Manager auswählen zu lassen, kann er dazu diese IOCTL verwenden.
Hauptcode
Eingabepuffer
Der Aufrufer fügt die VOLUME_READ_PLEX_INPUT-Struktur, die den logischen Offset enthält, am Anfang des Puffers bei Irp-AssociatedIrp.SystemBuffer> ein.
Eingabepufferlänge
Parameters.DeviceIoControl.InputBufferLength in der E/A-Stapelposition des IRP gibt die Größe des Eingabepuffers in Bytes an, die größer oder gleich dem Wert von sizeof(VOLUME_READ_PLEX_INPUT) sein muss.Ausgabepuffer
Wie IRP_MJ_READ speichert diese IOCTL die Lesedaten im Speicherpuffer, der als Speicherdeskriptorliste (Memory Descriptor List, MDL) im Feld Irp-MdlAddress> übergeben wird.
Länge des Ausgabepuffers
Die Länge des Puffers.
Statusblock
Wenn der Vorgang erfolgreich ist, legt der Volume-Manager das Feld Status auf STATUS_SUCCESS fest.
Die VOLUME_READ_PLEX_INPUT-Struktur bei Irp-AssociatedIrp.SystemBuffer> verfügt über einen Length-Member, der an einer 512-Byte-Grenze ausgerichtet werden muss. Wenn Length nicht die richtige Ausrichtung aufweist, schlägt der Vorgang fehl, und der Volume-Manager legt das Feld Status auf VKE_EINVAL fest.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows XP. |
Kopfzeile | ntddvol.h (include Ntddvol.h) |