Freigeben über


IOCTL_SCSI_MINIPORT_HYBRID IOCTL (ntddscsi.h)

Der IOCTL_SCSI_MINIPORT_HYBRID-Steuerungscode sendet eine Hybriddatenträgersteuerungsanforderung an einen HBA-spezifischen Miniporttreiber. Die IOCTL_SCSI_MINIPORT_HYBRID-Anforderung ist eine Sub-IOCTL von IOCTL_SCSI_MINIPORT. Diese IOCTL wird von StorPort empfangen und neu formatiert und dann als STORAGE_REQUEST_BLOCK (SRB) mit dem Funktionstyp SRB_FUNCTION_IO_CONTROL an den Miniport gesendet. Die Eingabe- und Ausgabedaten sind im SRB-Datenblock enthalten.

IOCTL_SCSI_MINIPORT_HYBRID ist für die Verwendung durch Drittanbieteranwendungen oder Filterlaufwerke vorgesehen, die Sicherheitsfeatures wie Verschlüsselung oder Schreibverhalten verwalten.

Warnung Die Verwendung von IOCTL_SCSI_MINIPORT_HYBRID zum Ändern des Hybridcacheverhaltens führt zu Konflikten mit dem Betrieb von Windows-Systemkomponenten und wird nicht unterstützt.
 
Hinweis Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle können in Zukunft geändert oder nicht mehr verfügbar sein. Stattdessen wird empfohlen, die Modelle Storport-Treiber und Storport-Miniporttreiber zu verwenden.
 

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabepuffer

Der im DataBuffer-Member des SRB angegebene Puffer muss eine SRB_IO_CONTROL-Struktur und eine HYBRID_REQUEST_BLOCK-Struktur enthalten. Abhängig vom Funktionselementvon HYBRID_REQUEST_BLOCK können zusätzliche Daten bereitgestellt werden.

Eingabepufferlänge

DataTransferLength gibt die Größe des Puffers in Bytes an, die mindestens sizeof (SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK) sein muss, mit zusätzlichem Speicher für Funktionsdaten, wenn das DataBufferLength-Element des HYBRID_REQUEST_BLOCK nonzero ist.

Ausgabepuffer

Eine aktualisierte SRB_IO_CONTROL Struktur wird an den Datenpuffer im SRB zurückgegeben.

Länge des Ausgabepuffers

Die DataBufferOffset - und DataBufferLength-Member von HYBRID_REQUEST_BLOCK sind nonzero, wenn Daten für die angegebene Funktion zurückgegeben werden. Das DataTransferLength-Element des SRB wird aktualisiert, wenn Daten für die Anforderungsfunktion zurückgegeben werden.

Statusblock

Die resultierende status der Funktionsanforderung wird im ReturnCode-Member von SRB_IO_CONTROL festgelegt. Im Folgenden finden Sie die IOCTL-Status-Codes für Hybriddatenträger.

Code zurückgeben BESCHREIBUNG
HYBRID_STATUS_SUCCESS Die Funktion wurde erfolgreich abgeschlossen.
HYBRID_STATUS_ILLEGAL_REQUEST Die Anforderung enthält einen ungültigen Funktionscode.
HYBRID_STATUS_INVALID_PARAMETER Die Eingabe- oder Ausgabeparameter sind falsch formatiert.
HYBRID_STATUS_OUTPUT_BUFFER_TOO_SMALL Die in DataBufferLength angegebene Datenlänge ist zu klein, um die Anforderungsausgabe zu enthalten.

Hinweise

Eine HYBRID_REQUEST_BLOCK-Struktur folgt sofort der SRB_IO_CONTROL-Struktur im Datenpuffer. HYBRID_REQUEST_BLOCK wird in ntddscsi.h wie folgt definiert.

typedef struct _HYBRID_REQUEST_BLOCK {
    ULONG   Version;
    ULONG   Size;
    ULONG   Function;
    ULONG   Flags;
    ULONG   DataBufferOffset;
    ULONG   DataBufferLength;
} HYBRID_REQUEST_BLOCK, *PHYBRID_REQUEST_BLOCK;

Die Parameteranforderungen hängen vom Funktionscode der Hybriddatenträgeranforderung ab. In der folgenden Tabelle sind die parameter aufgeführt, die für jede Funktion erforderlich sind.

Funktion Eingabeparameter Ausgabeparameter
HYBRID_FUNCTION_GET_INFO

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK +

HYBRID_INFORMATION

HYBRID_FUNCTION_DISABLE_CACHING_MEDIUM

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK

SRB_IO_CONTROL

HYBRID_FUNCTION_ENABLE_CACHING_MEDIUM

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK

SRB_IO_CONTROL

HYBRID_FUNCTION_SET_DIRTY_THRESHOLD

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK +

HYBRID_DIRTY_THRESHOLDS

SRB_IO_CONTROL

HYBRID_FUNCTION_DEMOTE_BY_SIZE

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK +

HYBRID_DEMOTE_BY_SIZE

SRB_IO_CONTROL

 

Die HYBRID_REQUEST_BLOCK-Struktur befindet sich nach der SRB_IO_CONTROL-Struktur im DataBuffer des SRB. Alle in der Anforderung enthaltenen Funktionsdaten befinden sich nach Dem Beginn der SRB_IO_CONTROL-Struktur im Offset in DataBufferOffset.

Das folgende Beispiel veranschaulicht den Abruf der Funktionsdaten für eine HYBRID_FUNCTION_SET_DIRTY_THRESHOLD Anforderung.

    PSRB_IO_CONTROL srbIoCtl = (PSRB_IO_CONTROL)srb->DataBuffer;
    PHYBRID_REQUEST_BLOCK hybridRequest = (PHYBRID_REQUEST_BLOCK)(srbIoCtl + 1);
    PHYBRID_DIRTY_THRESHOLDS hybridDirtyThresholds = NULL;

    if (hybridRequest->DataBufferOffset >= sizeof(SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK))
    {
        if (hybridRequest->DataBufferLength >= sizeof(HYBRID_FUNCTION_SET_DIRTY_THRESHOLD))
        {
            hybridDirtyThresholds = (PHYBRID_DIRTY_THRESHOLDS)((PUCHAR)srbIoCtl + hybridRequest->DataBufferOffset);
        }
        else
        {
            srbIoCtl->ReturnCode = HYBRID_STATUS_INVALID_PARAMETER;
        }
    }

HYBRID_DIRTY_THRESHOLDS

Die HYBRID_FUNCTION_SET_DIRTY_THRESHOLD-Funktion verwendet die HYBRID_DIRTY_THRESHOLDS-Struktur für ihre Eingabeparameter. HYBRID_DIRTY_THRESHOLDS wird in ntddscsi.h wie folgt definiert.

typedef struct _HYBRID_DIRTY_THRESHOLDS {
    ULONG   Version;
    ULONG   Size;
    ULONG   DirtyLowThreshold;
    ULONG   DirtyHighThreshold;
} HYBRID_DIRTY_THRESHOLDS, *PHYBRID_DIRTY_THRESHOLDS;
Version
Die Version der Struktur. Auf HYBRID_REQUEST_INFO_STRUCTURE_VERSION festgelegt.
Size
Die Größe der Struktur. Legen Sie auf sizeof(HYBRID_DIRTY_THRESHOLDS) fest.
DirtyLowThreshold
Der bruchteilale niedrige Schwellenwert für den Hybriddatenträgercache, der mit dem Datenträger synchronisiert werden soll.
DirtyHighThreshold
Der bruchreiche hohe Schwellenwert für den Hybriddatenträgercache für die Synchronisierung mit dem Datenträger.

Die Werte von DirtyLowThreshold und DirtyHighThreshold werden als kleinerer Teil eines Verhältnisses zwischen dem Schwellenwert und einer Bruchbasis ausgedrückt. Die Fraktionsbasis wird durch das FractionBase-Element der HYBRID_INFORMATION-Struktur bestimmt.

HYBRID_DEMOTE_BY_SIZE

Die HYBRID_FUNCTION_DEMOTE_BY_SIZE-Funktion verwendet die HYBRID_DEMOTE_BY_SIZE-Struktur für ihre Eingabeparameter. HYBRID_DEMOTE_BY_SIZE wird in ntddscsi.h wie folgt definiert.

typedef struct _HYBRID_DEMOTE_BY_SIZE {
    ULONG       Version;
    ULONG       Size;
    UCHAR       SourcePriority;
    UCHAR       TargetPriority;
    USHORT      Reserved0;
    ULONG       Reserved1;
    ULONGLONG   LbaCount;
} HYBRID_DEMOTE_BY_SIZE, *PHYBRID_DEMOTE_BY_SIZE;
Version
Die Version der Struktur. Auf HYBRID_REQUEST_INFO_STRUCTURE_VERSION festgelegt.
Size
Die Größe der Struktur. Legen Sie auf sizeof(HYBRID_DEMOTE_BY_SIZE) fest.
SourcePriority
Die ursprüngliche Prioritätsebene der daten, die herunterzustufen sind. Dieser Wert muss <= der Wert im MaximumHybridPriorityLevel-Member der HYBRID_INFORMATION Struktur sein, die von einer HYBRID_FUNCTION_GET_INFO Funktionsanforderung zurückgegeben wird. Dieser Wert muss > 0 sein.
TargetPriority
Die Zielprioritätsebene der Daten, die von der SourcePriority-Ebene herabstufen sollen. Dieser Wert muss SourcePriority sein< .
Reserviert0
Reserviert.
Reserviert1
Reserviert.
LbaCount
Die Anzahl der LBAs, die auf die neue Prioritätsebene herabstufen sollen.

Die SRB_IO_CONTROL-Struktur für diese IOCTL enthält IOCTL_MINIPORT_SIGNATURE_HYBRDISK im Signature-Member und IOCTL_SCSI_MINIPORT_HYBRID im ControlCode-Element .

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 8.1.
Kopfzeile ntddscsi.h (einschließen von Ntddscsi.h)

Weitere Informationen

HYBRID_INFORMATION

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK