Partager via


IOCTL_SCSI_MINIPORT_HYBRID IOCTL (ntddscsi.h)

Le code de contrôle IOCTL_SCSI_MINIPORT_HYBRID envoie une demande de contrôle de disque hybride à un pilote miniport spécifique à HBA. La demande IOCTL_SCSI_MINIPORT_HYBRID est une sous-IOCTL de IOCTL_SCSI_MINIPORT. Ce IOCTL est reçu et reformaté par StorPort, puis envoyé au miniport en tant que STORAGE_REQUEST_BLOCK (SRB) avec un type de fonction de SRB_FUNCTION_IO_CONTROL. Les données d’entrée et de sortie sont contenues dans le bloc de données SRB.

IOCTL_SCSI_MINIPORT_HYBRID est destiné à être utilisé par des applications tierces ou des lecteurs de filtre qui gèrent les fonctionnalités de sécurité telles que le chiffrement ou le comportement d’écriture directe.

Avertissement L’utilisation de IOCTL_SCSI_MINIPORT_HYBRID pour modifier le comportement du cache hybride est en conflit avec le fonctionnement des composants système Windows et n’est pas prise en charge.
 
Note Les modèles de pilote de port SCSI et de pilote miniport SCSI peuvent être modifiés ou indisponibles à l’avenir. Au lieu de cela, nous vous recommandons d’utiliser les modèles de pilote Storport et de pilote Miniport Storport .
 

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d'entrée

La mémoire tampon spécifiée dans le membre DataBuffer du SRB doit contenir une structure SRB_IO_CONTROL et une structure de HYBRID_REQUEST_BLOCK . Selon le membre Function de HYBRID_REQUEST_BLOCK, des données supplémentaires peuvent être fournies.

Longueur de la mémoire tampon d’entrée

DataTransferLength indique la taille, en octets, de la mémoire tampon, qui doit être au moins sizeof (SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK), avec un stockage supplémentaire pour les données de fonction si le membre DataBufferLength du HYBRID_REQUEST_BLOCK est différent de zéro.

Mémoire tampon de sortie

Une structure SRB_IO_CONTROL mise à jour est retournée à la mémoire tampon de données dans le SRB.

Longueur de la mémoire tampon de sortie

Les membres DataBufferOffset et DataBufferLength de HYBRID_REQUEST_BLOCK ne sont pas identiques lorsque les données sont retournées pour la fonction spécifiée. Le membre DataTransferLength du SRB est mis à jour lorsque des données sont retournées pour la fonction de requête.

Bloc d’état

Le status résultant de la demande de fonction est défini dans le membre ReturnCode de SRB_IO_CONTROL. Voici les codes de status du disque hybride IOCTL.

Code de retour Description
HYBRID_STATUS_SUCCESS La fonction s’est terminée avec succès.
HYBRID_STATUS_ILLEGAL_REQUEST La requête contient un code de fonction non valide.
HYBRID_STATUS_INVALID_PARAMETER Les paramètres d’entrée ou de sortie sont mis en forme incorrectement.
HYBRID_STATUS_OUTPUT_BUFFER_TOO_SMALL La longueur des données indiquée dans DataBufferLength est trop petite pour contenir la sortie de la requête.

Remarques

Une structure de HYBRID_REQUEST_BLOCK suit immédiatement la structure SRB_IO_CONTROL dans la mémoire tampon de données. HYBRID_REQUEST_BLOCK est défini dans ntddscsi.h comme suit.

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

Les conditions requises pour les paramètres dépendent du code de fonction de la demande de disque hybride. Le tableau suivant répertorie les paramètres requis pour chaque fonction.

Fonction Paramètres d’entrée Paramètres de sortie
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

 

La structure HYBRID_REQUEST_BLOCK se trouve après la structure SRB_IO_CONTROL dans le DataBuffer du SRB. Toutes les données de fonction incluses dans la requête se trouvent au décalage dans DataBufferOffset après le début de la structure SRB_IO_CONTROL .

L’exemple suivant illustre la récupération des données de fonction pour une demande de 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

La fonction HYBRID_FUNCTION_SET_DIRTY_THRESHOLD utilise la structure HYBRID_DIRTY_THRESHOLDS pour ses paramètres d’entrée. HYBRID_DIRTY_THRESHOLDS est défini dans ntddscsi.h comme suit.

typedef struct _HYBRID_DIRTY_THRESHOLDS {
    ULONG   Version;
    ULONG   Size;
    ULONG   DirtyLowThreshold;
    ULONG   DirtyHighThreshold;
} HYBRID_DIRTY_THRESHOLDS, *PHYBRID_DIRTY_THRESHOLDS;
Version
Version de la structure. Définissez sur HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
Taille
Taille de la structure. Défini sur sizeof(HYBRID_DIRTY_THRESHOLDS).
DirtyLowThreshold
Valeur de seuil faible fractionnaire pour la synchronisation du cache de disque hybride sur le disque.
DirtyHighThreshold
Valeur de seuil élevé fractionnaire pour la synchronisation du cache de disque hybride sur le disque.

Les valeurs de DirtyLowThreshold et DirtyHighThreshold sont exprimées comme la plus petite partie d’un rapport entre la valeur de seuil et une base de fraction. La base de fraction est déterminée par le membre FractionBase de la structure HYBRID_INFORMATION .

HYBRID_DEMOTE_BY_SIZE

La fonction HYBRID_FUNCTION_DEMOTE_BY_SIZE utilise la structure HYBRID_DEMOTE_BY_SIZE pour ses paramètres d’entrée. HYBRID_DEMOTE_BY_SIZE est défini dans ntddscsi.h comme suit.

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
Version de la structure. Définissez sur HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
Taille
Taille de la structure. Défini sur sizeof(HYBRID_DEMOTE_BY_SIZE).
SourcePriority
Niveau de priorité d’origine des données à rétrograder. Cette valeur doit être <= la valeur dans le membre MaximumHybridPriorityLevel de la structure HYBRID_INFORMATION retournée par une demande de fonction HYBRID_FUNCTION_GET_INFO . Cette valeur doit être > 0.
TargetPriority
Niveau de priorité cible des données à rétrograder à partir du niveau SourcePriority . Cette valeur doit être < SourcePriority.
Réservé0
Réservé.
Réservé1
Réservé.
LbaCount
Nombre de LBA à rétrograder au nouveau niveau de priorité.

La structure SRB_IO_CONTROL de ce IOCTL contient IOCTL_MINIPORT_SIGNATURE_HYBRDISK dans son membre Signature et IOCTL_SCSI_MINIPORT_HYBRID dans le membre ControlCode .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 8.1.
En-tête ntddscsi.h (inclure Ntddscsi.h)

Voir aussi

HYBRID_INFORMATION

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK