IOCTL_SCSI_MINIPORT_HYBRID IOCTL (ntddscsi.h)
IOCTL_SCSI_MINIPORT_HYBRIDコントロール コードは、ハイブリッド ディスク制御要求を HBA 固有のミニポート ドライバーに送信します。 IOCTL_SCSI_MINIPORT_HYBRID要求は、IOCTL_SCSI_MINIPORTのサブ IOCTL です。 この IOCTL は StorPort によって受信および再フォーマットされた後、SRB_FUNCTION_IO_CONTROLの関数型を持つ STORAGE_REQUEST_BLOCK (SRB) としてミニポートに送信されます。 入力データと出力データは、SRB データ ブロックに含まれています。
IOCTL_SCSI_MINIPORT_HYBRID は、暗号化や書き込みスルー動作などのセキュリティ機能を管理するサード パーティ製アプリケーションまたはフィルター ドライブで使用することを目的としています。
メジャー コード
[入力バッファー]
SRB の DataBuffer メンバーで指定されたバッファーには、 SRB_IO_CONTROL 構造体と HYBRID_REQUEST_BLOCK 構造体が含まれている必要があります。 HYBRID_REQUEST_BLOCKの Function メンバーに応じて、追加のデータを指定できます。
入力バッファーの長さ
DataTransferLength は、バッファーのサイズ (バイト単位) を示します。バッファーのサイズは、少なくとも sizeof (SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK) である必要があり、HYBRID_REQUEST_BLOCKの DataBufferLength メンバーが 0 以外の場合は、関数データ用の追加のストレージが必要です。
出力バッファー
更新 されたSRB_IO_CONTROL 構造体が SRB のデータ バッファーに返されます。
出力バッファーの長さ
HYBRID_REQUEST_BLOCKの DataBufferOffset メンバーと DataBufferLengthメンバーは、指定された Function に対してデータが返されるときに 0 以外になります。 要求関数のデータが返されると、SRB の DataTransferLength メンバーが更新されます。
ステータス ブロック
関数要求の結果の状態は、SRB_IO_CONTROLの ReturnCode メンバーに設定 されます。 ハイブリッド ディスク IOCTL 状態コードを次に示します。
リターン コード | 説明 |
---|---|
HYBRID_STATUS_SUCCESS | 関数は正常に終了しました。 |
HYBRID_STATUS_ILLEGAL_REQUEST | 要求に無効な関数コードが含まれています。 |
HYBRID_STATUS_INVALID_PARAMETER | 入力パラメーターまたは出力パラメーターの書式が正しくありません。 |
HYBRID_STATUS_OUTPUT_BUFFER_TOO_SMALL | DataBufferLength で指定されたデータ長が小さすぎて、要求の出力を含めできません。 |
注釈
HYBRID_REQUEST_BLOCK構造体は、データ バッファー内のSRB_IO_CONTROL構造の直後にあります。 HYBRID_REQUEST_BLOCK は ntddscsi.h で次のように定義されています。
typedef struct _HYBRID_REQUEST_BLOCK {
ULONG Version;
ULONG Size;
ULONG Function;
ULONG Flags;
ULONG DataBufferOffset;
ULONG DataBufferLength;
} HYBRID_REQUEST_BLOCK, *PHYBRID_REQUEST_BLOCK;
パラメーターの要件は、ハイブリッド ディスク要求の関数コードによって異なります。 次の表に、各関数に必要なパラメーターを示します。
機能 | 入力パラメーター | 出力パラメーター |
---|---|---|
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 |
HYBRID_REQUEST_BLOCK構造体は、SRB の DataBuffer 内のSRB_IO_CONTROL構造体の後に配置されます。 要求に含まれる関数データは、SRB_IO_CONTROL構造体の開始後の DataBufferOffset のオフセットにあります。
次の例では、HYBRID_FUNCTION_SET_DIRTY_THRESHOLD要求の関数データの取得を示します。
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
HYBRID_FUNCTION_SET_DIRTY_THRESHOLD関数は、入力パラメーターに HYBRID_DIRTY_THRESHOLDS 構造体を使用します。 HYBRID_DIRTY_THRESHOLDS は ntddscsi.h で次のように定義されます。
typedef struct _HYBRID_DIRTY_THRESHOLDS {
ULONG Version;
ULONG Size;
ULONG DirtyLowThreshold;
ULONG DirtyHighThreshold;
} HYBRID_DIRTY_THRESHOLDS, *PHYBRID_DIRTY_THRESHOLDS;
- Version
- 構造体のバージョン。 [HYBRID_REQUEST_INFO_STRUCTURE_VERSION] に設定します。
- Size
- 構造体のサイズ。 sizeof(HYBRID_DIRTY_THRESHOLDS) に設定します。
- DirtyLowThreshold
- ハイブリッド ディスク キャッシュがディスクに同期するための小数の低しきい値。
- DirtyHighThreshold
- ハイブリッド ディスク キャッシュがディスクに同期するための小数の高しきい値。
DirtyLowThreshold と DirtyHighThreshold の値は、しきい値と分数ベースの比率の小さい部分として表されます。 分数ベースは、HYBRID_INFORMATION構造体の FractionBase メンバーによって決定されます。
HYBRID_DEMOTE_BY_SIZE
HYBRID_FUNCTION_DEMOTE_BY_SIZE関数は、入力パラメーターに HYBRID_DEMOTE_BY_SIZE 構造体を使用します。 HYBRID_DEMOTE_BY_SIZE は ntddscsi.h で次のように定義されています。
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
- 構造体のバージョン。 [HYBRID_REQUEST_INFO_STRUCTURE_VERSION] に設定します。
- Size
- 構造体のサイズ。 sizeof(HYBRID_DEMOTE_BY_SIZE) に設定します。
- SourcePriority
- 降格するデータの元の優先度レベル。 この値は、<= HYBRID_FUNCTION_GET_INFO関数要求から返されるHYBRID_INFORMATION構造体の MaximumHybridPriorityLevel メンバーの値である必要があります。 この値は 0 > する必要があります。
- TargetPriority
- SourcePriority レベルから降格するデータのターゲット優先度レベル。 この値は SourcePriority である< 必要があります。
- 予約済み 0
- 予約済み。
- 予約済み 1
- 予約済み。
- LbaCount
- 新しい優先度レベルに降格する LBA の数。
この IOCTL のSRB_IO_CONTROL構造体には、Signature メンバーにIOCTL_MINIPORT_SIGNATURE_HYBRDISKが含まれており、ControlCode メンバーにIOCTL_SCSI_MINIPORT_HYBRIDがあります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1 以降で使用できます。 |
Header | ntddscsi.h (Ntddscsi.h を含む) |