IOCTL_SCSI_MINIPORT_HYBRID IOCTL (ntddscsi.h)

Kode kontrol IOCTL_SCSI_MINIPORT_HYBRID mengirimkan permintaan kontrol disk hibrid ke driver miniport khusus HBA. Permintaan IOCTL_SCSI_MINIPORT_HYBRID adalah sub-IOCTL IOCTL_SCSI_MINIPORT. IOCTL ini diterima dan diformat ulang oleh StorPort, kemudian dikirim ke miniport sebagai STORAGE_REQUEST_BLOCK (SRB) dengan jenis fungsi SRB_FUNCTION_IO_CONTROL. Data input dan output terkandung dalam blok data SRB.

IOCTL_SCSI_MINIPORT_HYBRID ditujukan untuk digunakan oleh aplikasi pihak ketiga atau drive filter yang mengelola fitur keamanan seperti enkripsi atau perilaku write-through.

Peringatan Penggunaan IOCTL_SCSI_MINIPORT_HYBRID untuk memodifikasi perilaku cache hibrid akan bertentangan dengan pengoperasian komponen sistem Windows dan tidak didukung.
 
Catatan Driver port SCSI dan model driver miniport SCSI dapat diubah atau tidak tersedia di masa mendatang. Sebagai gantinya, sebaiknya gunakan driver Storport dan model driver miniport Storport .
 

Kode utama

IRP_MJ_DEVICE_CONTROL

Buffer input

Buffer yang ditentukan dalam anggota DataBuffer SRB harus berisi struktur SRB_IO_CONTROL dan struktur HYBRID_REQUEST_BLOCK . Bergantung pada anggota FungsiHYBRID_REQUEST_BLOCK, data tambahan dapat disediakan.

Panjang buffer input

DataTransferLength menunjukkan ukuran, dalam byte, dari buffer, yang harus setidaknya sizeof (SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK), dengan penyimpanan tambahan untuk data fungsi jika anggota DataBufferLength dari HYBRID_REQUEST_BLOCK bukan nol.

Buffer output

Struktur SRB_IO_CONTROL yang diperbarui dikembalikan ke buffer data di SRB.

Panjang buffer output

Anggota DataBufferOffset dan DataBufferLengthdari HYBRID_REQUEST_BLOCK bukan nol saat data dikembalikan untuk Fungsi yang ditentukan. Anggota DataTransferLength dari SRB diperbarui saat data dikembalikan untuk fungsi permintaan.

Blok status

Status yang dihasilkan dari permintaan fungsi diatur dalam anggota ReturnCodeSRB_IO_CONTROL. Berikut ini adalah kode status IOCTL disk hibrid.

Kode Pengembalian Deskripsi
HYBRID_STATUS_SUCCESS Fungsi berhasil diselesaikan.
HYBRID_STATUS_ILLEGAL_REQUEST Permintaan berisi kode fungsi yang tidak valid.
HYBRID_STATUS_INVALID_PARAMETER Parameter input atau output salah diformat.
HYBRID_STATUS_OUTPUT_BUFFER_TOO_SMALL Panjang data yang diberikan dalam DataBufferLength terlalu kecil untuk berisi output permintaan.

Keterangan

Struktur HYBRID_REQUEST_BLOCK segera mengikuti struktur SRB_IO_CONTROL dalam buffer data. HYBRID_REQUEST_BLOCK didefinisikan dalam ntddscsi.h sebagai berikut.

typedef struct _HYBRID_REQUEST_BLOCK {
    ULONG   Version;
    ULONG   Size;
    ULONG   Function;
    ULONG   Flags;
    ULONG   DataBufferOffset;
    ULONG   DataBufferLength;
} HYBRID_REQUEST_BLOCK, *PHYBRID_REQUEST_BLOCK;

Persyaratan parameter bergantung pada kode fungsi permintaan disk hibrid. Tabel berikut mencantumkan parameter yang diperlukan untuk setiap fungsi.

Fungsi Parameter Input Parameter Output
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

 

Struktur HYBRID_REQUEST_BLOCK terletak setelah struktur SRB_IO_CONTROL di DataBuffer SRB. Data fungsi apa pun yang disertakan dengan permintaan ditemukan pada offset di DataBufferOffset setelah awal struktur SRB_IO_CONTROL .

Contoh berikut menunjukkan pengambilan data fungsi untuk permintaan 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

Fungsi HYBRID_FUNCTION_SET_DIRTY_THRESHOLD menggunakan struktur HYBRID_DIRTY_THRESHOLDS untuk parameter inputnya. HYBRID_DIRTY_THRESHOLDS didefinisikan dalam ntddscsi.h sebagai berikut.

typedef struct _HYBRID_DIRTY_THRESHOLDS {
    ULONG   Version;
    ULONG   Size;
    ULONG   DirtyLowThreshold;
    ULONG   DirtyHighThreshold;
} HYBRID_DIRTY_THRESHOLDS, *PHYBRID_DIRTY_THRESHOLDS;
Versi
Versi struktur. Atur ke HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
Ukuran
Ukuran struktur. Atur ke sizeof(HYBRID_DIRTY_THRESHOLDS).
DirtyLowThreshold
Nilai ambang batas rendah pecahan untuk cache disk hibrid untuk disinkronkan ke disk.
DirtyHighThreshold
Nilai ambang tinggi pecahan untuk cache disk hibrid untuk disinkronkan ke disk.

Nilai DirtyLowThreshold dan DirtyHighThreshold dinyatakan sebagai bagian yang lebih kecil dari rasio antara nilai ambang batas dan basis pecahan. Basis fraksi ditentukan oleh anggota FractionBase dari struktur HYBRID_INFORMATION .

HYBRID_DEMOTE_BY_SIZE

Fungsi HYBRID_FUNCTION_DEMOTE_BY_SIZE menggunakan struktur HYBRID_DEMOTE_BY_SIZE untuk parameter inputnya. HYBRID_DEMOTE_BY_SIZE didefinisikan dalam ntddscsi.h sebagai berikut.

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;
Versi
Versi struktur. Atur ke HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
Ukuran
Ukuran struktur. Atur ke sizeof(HYBRID_DEMOTE_BY_SIZE).
SourcePriority
Tingkat prioritas asli data untuk diturunkan. Nilai ini harus <= nilai di anggota MaximumHybridPriorityLevel dari struktur HYBRID_INFORMATION yang dikembalikan oleh dari permintaan fungsi HYBRID_FUNCTION_GET_INFO . Nilai ini harus > 0.
TargetPriority
Tingkat prioritas target data untuk diturunkan dari tingkat SourcePriority . Nilai ini harus SourcePriority< .
Dicadangkan0
Dicadangkan.
Dicadangkan1
Dicadangkan.
LbaCount
Jumlah LBA yang akan diturunkan ke tingkat prioritas baru.

Struktur SRB_IO_CONTROL untuk IOCTL ini berisi IOCTL_MINIPORT_SIGNATURE_HYBRDISK di anggota Tanda Tangan dan IOCTL_SCSI_MINIPORT_HYBRID di anggota ControlCode .

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows 8.1.
Header ntddscsi.h (termasuk Ntddscsi.h)

Lihat juga

HYBRID_INFORMATION

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK