STRUCTURE SENDCMDINPARAMS (ntdddisk.h)
La structure SENDCMDINPARAMS contient les paramètres d’entrée pour les requêtes SMART_SEND_DRIVE_COMMAND et SMART_RCV_DRIVE_DATA (voir Remarques).
Syntaxe
typedef struct _SENDCMDINPARAMS {
ULONG cBufferSize;
IDEREGS irDriveRegs;
UCHAR bDriveNumber;
UCHAR bReserved[3];
ULONG dwReserved[4];
UCHAR bBuffer[1];
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
Membres
cBufferSize
Contient la taille de la mémoire tampon, en octets.
irDriveRegs
Contient une structure IDEREGS utilisée pour signaler le contenu des registres du contrôleur IDE.
bDriveNumber
Ce membre est opaque. Ne pas l'utiliser. Le système d’exploitation ignore ce membre, car le lecteur physique qui reçoit la demande dépend du handle que l’appelant utilise lors de la demande.
bReserved[3]
Réservé.
dwReserved[4]
Réservé.
bBuffer[1]
Pointeur vers la mémoire tampon d’entrée.
Remarques
La structure SENDCMDINPARAMS est utilisée avec les demandes de code de contrôle SMART_SEND_DRIVE_COMMAND et SMART_RCV_DRIVE_DATA . Ces IOCTL doivent être gérées par des pilotes qui prennent en charge Self-Monitoring Analysis and Reporting Technology (SMART).
SMART_SEND_DRIVE_COMMAND
Le code de contrôle SMART_SEND_DRIVE_COMMAND envoie l’une des commandes SMART suivantes à l’appareil :
- Activer ou désactiver les rapports sur l’appareil
- Activer ou désactiver l’enregistrement automatique des attributs
- Enregistrer les attributs actuels maintenant
- Exécuter des diagnostics hors connexion
- Obtenir les status SMART actuels
- Écrire dans le journal SMART
Paramètres d’entrée
La mémoire tampon dans Irp-AssociatedIrp.SystemBuffer> contient une structure SENDCMDINPARAMS qui décrit la commande envoyée à l’appareil. Le membre irDriveRegs.bCommandReg doit spécifier SMART_CMD. Le membre irDriveRegs.bFeaturesReg doit spécifier une sous-commande SMART. Pour obtenir la liste des sous-commandes, consultez IDEREGS.
Si l’appelant spécifie une sous-commande SMART de SMART_WRITE_LOG dans irDriveRegs.bFeaturesReg, l’appelant doit également indiquer le nombre de secteurs à écrire dans irDriveRegs.bSectorCountReg. La taille de la mémoire tampon d’entrée doit être >= sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE)
. L’appelant doit placer les données à écrire dans la mémoire tampon indiquée par le membre bBuffer de SENDCMDINPARAMS.
Parameters.DeviceIoControl.InputBufferLength spécifie la taille en octets de la mémoire tampon d’entrée, qui doit être >= (sizeof(SENDCMDINPARAMS) - 1)
.
Parameters.DeviceIoControl.OutputBufferLength spécifie la taille, en octets, de la mémoire tampon de sortie, qui doit être >= (sizeof(SENDCMDOUTPARAMS) - 1)
. Si smart status est demandé, la mémoire tampon de sortie doit être >= (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS))
.
Paramètres de sortie
Le pilote retourne la structure SENDCMDOUTPARAMS à la mémoire tampon sur Irp-AssociatedIrp.SystemBuffer>. Si smart status a été demandé et reçu avec succès à partir de l’appareil, le pilote inclut la structure IDEREGS dans la mémoire tampon de sortie.
Bloc d’état E/S
Lorsque le pilote définit le champ État sur STATUS_SUCCESS, il définit le champ ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS))
Informations sur pour renvoyer l’status SMART et sur (sizeof(SENDCMDOUTPARAMS) - 1)
pour toutes les autres commandes. Le pilote doit définir le champ État sur STATUS_INVALID_PARAMETER si un paramètre d’entrée est incorrect ou pour STATUS_IO_DEVICE_ERROR si l’appareil abandonne une commande qu’il ne prend pas en charge. Si l’état n’est pas STATUS_SUCCESS, le pilote définit le champ Informations sur zéro.
SMART_RCV_DRIVE_DATA
Le code de contrôle SMART_RCV_DRIVE_DATA retourne les données d’identification ATA-2, les seuils SMART ou les attributs SMART pour l’appareil.
paramètres d’entrée SMART_RCV_DRIVE_DATA
La mémoire tampon dans Irp-AssociatedIrp.SystemBuffer> contient une structure SENDCMDINPARAMS qui décrit la demande envoyée à l’appareil. Le membre irDriveRegs.bCommandReg spécifie ID_CMD lorsque les données d’identification sont demandées et SMART_CMD lorsque des données SMART sont demandées. Pour obtenir la liste des valeurs qui peuvent être affectées au registre de fonctionnalités (irDriveRegs.bFeaturesReg), consultez IDEREGS.
Parameters.DeviceIoControl.InputBufferLength spécifie la taille, en octets, de la mémoire tampon d’entrée, qui doit être >= (sizeof(SENDCMDINPARAMS) - 1)
.
Parameters.DeviceIoControl.OutputBufferLength spécifie la taille, en octets, de la mémoire tampon de sortie, qui doit être >= (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
.
paramètres de sortie SMART_RCV_DRIVE_DATA
Le pilote retourne la structure SENDCMDOUTPARAMS et une mémoire tampon de 512 octets de données de lecteur à la mémoire tampon sur Irp-AssociatedIrp.SystemBuffer>.
Si l’appelant spécifie une sous-commande SMART de SMART_READ_LOG dans irDriveRegs.bFeaturesReg, l’appelant doit également indiquer le nombre de secteurs à lire dans irDriveRegs.bSectorCountReg. La taille de la mémoire tampon de sortie doit être >= le maximum des valeurs suivantes : sizeof(SENDCMDOUTPARAMS)
ou sizeof(SENDCMDINPARAMS)) -1 + (irDriveRegs.bSectorCountReg** * SMART_LOG_SECTOR_SIZE)
Les données lues à partir du journal seront placées dans la mémoire tampon spécifiée par le membre bBuffer de SENDCMDOUTPARAMS.
SMART_RCV_DRIVE_DATA bloc d’état d’E/S
Le pilote définit le champ Informations sur (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
lorsqu’il définit le champ État sur STATUS_SUCCESS. Sinon, le pilote définit le champ Information sur zéro et le champ État sur STATUS_INVALID_PARAMETER ou STATUS_INSUFFICIENT_RESOURCES.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 |
En-tête | ntdddisk.h (inclure Ntdddisk.h) |