次の方法で共有


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_BLOCKFunction メンバーに応じて、追加のデータを指定できます。

入力バッファーの長さ

DataTransferLength は、バッファーのサイズ (バイト単位) を示します。バッファーのサイズは、少なくとも sizeof (SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK) である必要があり、HYBRID_REQUEST_BLOCKDataBufferLength メンバーが 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

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 の 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
ハイブリッド ディスク キャッシュがディスクに同期するための小数の高しきい値。

DirtyLowThresholdDirtyHighThreshold の値は、しきい値と分数ベースの比率の小さい部分として表されます。 分数ベースは、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 を含む)

こちらもご覧ください

HYBRID_INFORMATION

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK