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の 関数 メンバーに応じて、追加のデータを指定できます。
入力バッファーの長さ
DataTransferLength は、バッファーのサイズ (バイト単位) を示します。これは、HYBRID_REQUEST_BLOCK の dataBufferLength SRB_IO_CONTROL メンバーが 0 以外の 場合に、 + sizeof(HYBRID_REQUEST_BLOCK) 以上である必要があります。
出力バッファー
更新された SRB_IO_CONTROL 構造体が SRB のデータ バッファーに返されます。
出力バッファーの長さ
HYBRID_REQUEST_BLOCK の DataBufferOffset および dataBufferLength メンバーは、指定した 関数のデータが返されるときに 0 以外になります。 DataTransferLength SRB のメンバーは、要求関数のデータが返されるときに更新されます。
状態ブロック
関数要求の結果の状態は、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;
- バージョン
- 構造体のバージョン。 HYBRID_REQUEST_INFO_STRUCTURE_VERSIONに設定します。
- サイズ
- 構造体のサイズ。 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;
- バージョン
- 構造体のバージョン。 HYBRID_REQUEST_INFO_STRUCTURE_VERSIONに設定します。
- サイズ
- 構造体のサイズ。 sizeof (HYBRID_DEMOTE_BY_SIZE) に設定します。
- SourcePriority の
- 降格するデータの元の優先度レベル。 この値は、<= HYBRID_FUNCTION_GET_INFO 関数要求から返される HYBRID_INFORMATION 構造体の MaximumHybridPriorityLevel メンバーの値である必要があります。 この値は 0 > する必要があります。
- TargetPriority
- SourcePriority レベルから降格するデータのターゲット優先度レベル。 この値は SourcePriority< する必要があります。
- 予約済み
- 引っ込み思案。
- 予約済み 1
- 引っ込み思案。
- LbaCount の
- 新しい優先度レベルに降格する LBA の数。
この IOCTL の SRB_IO_CONTROL 構造体には、Signature メンバーのIOCTL_MINIPORT_SIGNATURE_HYBRDISKと、ControlCode メンバーの IOCTL_SCSI_MINIPORT_HYBRID が含まれています。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8.1 以降で使用できます。 |
ヘッダー | ntddscsi.h (Ntddscsi.h を含む) |