次の方法で共有


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 は、暗号化やライトスルー動作などのセキュリティ機能を管理するサード パーティ製アプリケーションまたはフィルター ドライブで使用することを目的としています。

警告 ハイブリッド キャッシュの動作を変更するための IOCTL_SCSI_MINIPORT_HYBRID の使用は、Windows システム コンポーネントの操作と競合し、サポートされていません。
 
SCSI ポート ドライバーと SCSI ミニポート ドライバー モデルは、今後変更されたり使用できなくなったりする可能性があります。 代わりに、Storport ドライバー を使用し、Storport ミニポート ドライバー モデル することをお勧めします。
 

メジャー コード

IRP_MJ_DEVICE_CONTROL

入力バッファー

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_BLOCKDataBufferOffset および dataBufferLength メンバーは、指定した 関数のデータが返されるときに 0 以外になります。 DataTransferLength SRB のメンバーは、要求関数のデータが返されるときに更新されます。

状態ブロック

関数要求の結果の状態は、SRB_IO_CONTROLReturnCode メンバーで設定されます。 ハイブリッド ディスク 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

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

 

HYBRID_REQUEST_BLOCK 構造体は、SRB の DataBufferSRB_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 を含む)

関連項目

HYBRID_INFORMATION

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK