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.
Hauptcode
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 |
HYBRID_REQUEST_BLOCK |
HYBRID_REQUEST_BLOCK + |
HYBRID_FUNCTION_DISABLE_CACHING_MEDIUM |
HYBRID_REQUEST_BLOCK |
|
HYBRID_FUNCTION_ENABLE_CACHING_MEDIUM |
HYBRID_REQUEST_BLOCK |
|
HYBRID_FUNCTION_SET_DIRTY_THRESHOLD |
HYBRID_REQUEST_BLOCK + HYBRID_DIRTY_THRESHOLDS |
|
HYBRID_FUNCTION_DEMOTE_BY_SIZE |
HYBRID_REQUEST_BLOCK + HYBRID_DEMOTE_BY_SIZE |
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) |