STRUCTURE SENDCMDINPARAMS (ntdddisk.h)
La structure SENDCMDINPARAMS contient les paramètres d’entrée des 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 l’utilisez pas. 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 requête.
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 requêtes de code d’E/S SMART_RCV_DRIVE_DATA et SMART_SEND_DRIVE_COMMAND. Ces IOCTL doivent être gérés par les pilotes qui prennent en charge Self-Monitoring'analyse et la technologie de création de rapports (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 la création de 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 l’état SMART actuel
- Écrire dans le journal SMART
Paramètres d’entrée
La mémoire tampon à >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 l’état SMART est demandé, la mémoire tampon de sortie doit être >= (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS))
.
Paramètres de sortie
Le pilote retourne la structureSENDCMDOUTPARAMSà la mémoire tampon à >AssociatedIrp.SystemBuffer. Si l’état SMART 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 d’E/S
Lorsque le pilote définit le champ État sur STATUS_SUCCESS, il définit le champ Information est défini sur ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS))
pour renvoyer l’état SMART et (sizeof(SENDCMDOUTPARAMS) - 1)
pour toutes les autres commandes. Le pilote doit définir le champ Status sur STATUS_INVALID_PARAMETER si un paramètre d’entrée est incorrect ou STATUS_IO_DEVICE_ERROR si l’appareil abandonne une commande qu’il ne prend pas en charge. Si 'état n’est pas STATUS_SUCCESS, le pilote définit le champ Informations de 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 de l’appareil.
paramètres d’entrée SMART_RCV_DRIVE_DATA
La mémoire tampon à 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 les données SMART sont demandées. Pour obtenir la liste des valeurs qui peuvent être affectées au registre des 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 vers la mémoire tampon à 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 sont 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 de sur (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
lorsqu’il définit le champ Status sur STATUS_SUCCESS. Dans le cas contraire, le pilote définit le champ Informations de sur zéro et le champ État de sur STATUS_INVALID_PARAMETER ou STATUS_INSUFFICIENT_RESOURCES.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 2000 |
d’en-tête | ntdddisk.h (include Ntdddisk.h) |