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.
Kode utama
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 |
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 |
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) |