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 à l’adaptateur 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.
Code principal
Mémoire tampon d’entrée
La mémoire tampon spécifiée dans le DataBuffer membre du SRB doit contenir une structure SRB_IO_CONTROL et une structure HYBRID_REQUEST_BLOCK. En fonction de la fonction membre 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 DataBufferLength membre du HYBRID_REQUEST_BLOCK n’est pas égal à 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 la SRB.
Longueur de la mémoire tampon de sortie
Les membres DataBufferOffset et DataBufferLength membres de HYBRID_REQUEST_BLOCK ne sont pas zéro lorsque les données sont retournées pour le de fonctionspécifié. Le DataTransferLength membre du SRB est mis à jour lorsque les données sont retournées pour la fonction de requête.
Bloc d’état
L’état résultant de la requête de fonction est défini dans le membre ReturnCode de SRB_IO_CONTROL. Voici les codes d’état IOCTL de disque hybride.
Retour du code | Description |
---|---|
HYBRID_STATUS_SUCCESS | La fonction s’est terminée correctement. |
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 de manière incorrecte. |
HYBRID_STATUS_OUTPUT_BUFFER_TOO_SMALL | La longueur des données donnée dans DataBufferLength est trop petite pour contenir la sortie de la requête. |
Remarques
Une structure 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 ntdddscsi.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;
La configuration requise pour les paramètres dépend du code de fonction de la requête 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 de 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 requête 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éfini sur HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
- taille de
- Taille de la structure. Défini sur taille de(HYBRID_DIRTY_THRESHOLDS).
- DirtyLowThreshold
- Valeur de seuil faible fractionnaire pour le cache de disque hybride à synchroniser avec le disque.
- DirtyHighThreshold
- Valeur de seuil élevé fractionnaire pour le cache de disque hybride à synchroniser avec le disque.
Les valeurs de DirtyLowThreshold et DirtyHighThreshold sont exprimées sous la forme d’une partie inférieure d’un rapport entre la valeur de seuil et une fraction de base. La base de fractions 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éfini sur HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
- taille de
- Taille de la structure. Défini sur taille de(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 requête 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 d’ABA à 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.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible à partir de Windows 8.1. |
d’en-tête | ntddscsi.h (include Ntddscsi.h) |