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.
Code principal
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 |
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 |
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) |