Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
protocoles:smart:smart_rcv_drive_data [30/03/2020 17:54] thierry [Types communs pour les Features] |
protocoles:smart:smart_rcv_drive_data [30/03/2020 18:58] (Version actuelle) thierry [Sources] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== SMART_RCV_DRIVE_DATA ====== | + | ====== SMART_RCV_DRIVE_DATA & SMART_SEND_DRIVE_COMMAND ====== |
<note>Ce qui se trouve sur cette page n'engage que moi, n'ayant trouvé de documentation précise ce contenu découle directement de mes expériences, c'est donc peut etre totalement faux.\\ | <note>Ce qui se trouve sur cette page n'engage que moi, n'ayant trouvé de documentation précise ce contenu découle directement de mes expériences, c'est donc peut etre totalement faux.\\ | ||
Je compte sur vous pour améliorer la qualité des informations contenue sur cette page...</note> | Je compte sur vous pour améliorer la qualité des informations contenue sur cette page...</note> | ||
===== DeviceIOControl ===== | ===== DeviceIOControl ===== | ||
- | SMART_RCV_DRIVE_DATA est un code de controle (''dwIoControlCode'') utilisé dans l'appel a l'API [[https://docs.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-deviceiocontrol|DeviceIoControl]] | + | ''SMART_RCV_DRIVE_DATA'' et ''SMART_SEND_DRIVE_COMMAND'' sont des un codes de contrôle (''dwIoControlCode'') utilisé dans l'appel a l'API [[https://docs.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-deviceiocontrol|DeviceIoControl]] |
==== Déclaration ==== | ==== Déclaration ==== | ||
<code c++> | <code c++> | ||
Ligne 27: | Ligne 27: | ||
... | ... | ||
DeviceIoControl(AHandle, SMART_RCV_DRIVE_DATA, @vSCIP, sizeof(TSendCmdInParams), @vSCOP, sizeof(TSendCmdOutParams)+BufferSize, vOutSize, nil); | DeviceIoControl(AHandle, SMART_RCV_DRIVE_DATA, @vSCIP, sizeof(TSendCmdInParams), @vSCOP, sizeof(TSendCmdOutParams)+BufferSize, vOutSize, nil); | ||
+ | // Ou... | ||
+ | DeviceIoControl(AHandle, SMART_SEND_DRIVE_COMMAND, @vSCIP, sizeof(TSendCmdInParams), @vSCOP, sizeof(TSendCmdOutParams), vOutSize, nil); | ||
+ | |||
</code> | </code> | ||
==== Structures ==== | ==== Structures ==== | ||
Ligne 76: | Ligne 79: | ||
===== Features ===== | ===== Features ===== | ||
+ | ^ SMART_RCV_DRIVE_DATA ^^^^^^ | ||
^IDEREGS Features ^ Rôle ^ SENDCMDINPARAMS BufferSize ^ IDEREGS SectorCount ^ IDEREGS SectorNumber ^ IDEREGS CylLow ^ IDEREGS CylHigh ^ | ^IDEREGS Features ^ Rôle ^ SENDCMDINPARAMS BufferSize ^ IDEREGS SectorCount ^ IDEREGS SectorNumber ^ IDEREGS CylLow ^ IDEREGS CylHigh ^ | ||
| [[#READ_ATTRIBUTES]] $D0 |Récupérer les attributs SMART | ''READ_ATTRIBUTE_BUFFER_SIZE'' (512) | 1 |1 |''SMART_CYL_LOW'' ($4F) |''SMART_CYL_HI'' ($C2) | | | [[#READ_ATTRIBUTES]] $D0 |Récupérer les attributs SMART | ''READ_ATTRIBUTE_BUFFER_SIZE'' (512) | 1 |1 |''SMART_CYL_LOW'' ($4F) |''SMART_CYL_HI'' ($C2) | | ||
Ligne 84: | Ligne 88: | ||
|[[#SMART_READ_LOG]] $D5 |Récupère les Logs. | | | | | | | | |[[#SMART_READ_LOG]] $D5 |Récupère les Logs. | | | | | | | | ||
|[[#SMART_WRITE_LOG]] $D6 |Écrit le nombre indiqué de secteurs de données de 512 octets dans les logs | | | | | | | | |[[#SMART_WRITE_LOG]] $D6 |Écrit le nombre indiqué de secteurs de données de 512 octets dans les logs | | | | | | | | ||
- | |[[#ENABLE_SMART]] $D8 |Active SMART | | | | | | | ||
- | |[[#DISABLE_SMART]] $D9 |Désactive SMART | | | | | | | ||
|[[#RETURN_SMART_STATUS]] $DA |Récupère l'état de fiabilité de l'appareil.| | | | | | | | |[[#RETURN_SMART_STATUS]] $DA |Récupère l'état de fiabilité de l'appareil.| | | | | | | | ||
|[[#ENABLE_DISABLE_AUTO_OFFLINE]] $DB |Active ou Désactive le mode hors ligne | | | | | | | | |[[#ENABLE_DISABLE_AUTO_OFFLINE]] $DB |Active ou Désactive le mode hors ligne | | | | | | | | ||
+ | ^ SMART_SEND_DRIVE_COMMAND ^^^^^^ | ||
+ | ^IDEREGS Features ^ Rôle ^ SENDCMDINPARAMS BufferSize ^ IDEREGS SectorCount ^ IDEREGS SectorNumber ^ IDEREGS CylLow ^ IDEREGS CylHigh ^ | ||
+ | |[[#ENABLE_SMART]] $D8 |Active SMART| 0 | 1 |1 |''SMART_CYL_LOW'' ($4F) |''SMART_CYL_HI'' ($C2) | | ||
+ | |[[#DISABLE_SMART]] $D9 |Désactive SMART | | | | | | | ||
+ | |||
==== Types communs pour les Features ==== | ==== Types communs pour les Features ==== | ||
=== TicSendCmdOutParams === | === TicSendCmdOutParams === | ||
Ligne 107: | Ligne 114: | ||
<code delphi> | <code delphi> | ||
TSCOP_SmartAttrs = packed record | TSCOP_SmartAttrs = packed record | ||
- | SCOP: TTicSendCmdOutParams; | + | SCOP: TTicSendCmdOutParams; (voir ci-dessus) |
A, B: byte; // ??? | A, B: byte; // ??? | ||
Results: TSmartAttrs; //array[0..29] of TSmartAttr; | Results: TSmartAttrs; //array[0..29] of TSmartAttr; | ||
Ligne 115: | Ligne 122: | ||
Avec les types suivants | Avec les types suivants | ||
<code delphi> | <code delphi> | ||
- | TTicSendCmdOutParams = packed record | ||
- | cBufferSize: DWORD; // Size of bBuffer in bytes | ||
- | DriverStatus: TDriverStatus; // Driver status structure. | ||
- | end; | ||
- | |||
TSmartAttr = packed record | TSmartAttr = packed record | ||
ID: byte; | ID: byte; | ||
Ligne 130: | Ligne 132: | ||
TSmartAttrs = array[0..29] of TSmartAttr; // max of 30 attributes | TSmartAttrs = array[0..29] of TSmartAttr; // max of 30 attributes | ||
</code> | </code> | ||
- | === Les Attributs === | + | === Les Membre d'un Attribut === |
D’après ce que je constate il peut y avoir au maximum 30 attributs | D’après ce que je constate il peut y avoir au maximum 30 attributs | ||
== ID == | == ID == | ||
Ligne 169: | Ligne 171: | ||
TSmartThresholds = array[0..C_SMART_MAX_ATTRS] of TSmartThreshold; //12x30 = 360 oct | TSmartThresholds = array[0..C_SMART_MAX_ATTRS] of TSmartThreshold; //12x30 = 360 oct | ||
</code> | </code> | ||
+ | === Les Membres de Threshold === | ||
+ | 30 max comme le nombre d'attributs | ||
+ | == ID == | ||
+ | ID de l'attribut auquel correspond ce Threshold | ||
+ | == Threshold == | ||
+ | Valeur sur 1 octet, seuil indiquant quand un disque est sur le point de tomber en panne. | ||
+ | === Interpretation du Threshold === | ||
+ | Pour l'instant, je ne sais pas trop. | ||
+ | |||
+ | Dés que j'ai plus d'infos je les mettrai ici ! | ||
+ | |||
+ | |||
==== ENABLE_DISABLE_AUTOSAVE ==== | ==== ENABLE_DISABLE_AUTOSAVE ==== | ||
==== SAVE_ATTRIBUTE_VALUES ==== | ==== SAVE_ATTRIBUTE_VALUES ==== | ||
Ligne 174: | Ligne 188: | ||
==== SMART_READ_LOG ==== | ==== SMART_READ_LOG ==== | ||
==== SMART_WRITE_LOG ==== | ==== SMART_WRITE_LOG ==== | ||
- | ==== ENABLE_SMART ==== | + | ==== ENABLE_SMART ==== |
+ | On peut estimer que si la commande DeviceIOControl renvoi ''True'' alors le SMART est activé. | ||
==== DISABLE_SMART ==== | ==== DISABLE_SMART ==== | ||
==== RETURN_SMART_STATUS ==== | ==== RETURN_SMART_STATUS ==== | ||
Ligne 181: | Ligne 196: | ||
* [[https://docs.microsoft.com/en-us/previous-versions/windows/hardware/drivers/ff566204(v%3Dvs.85)]] | * [[https://docs.microsoft.com/en-us/previous-versions/windows/hardware/drivers/ff566204(v%3Dvs.85)]] | ||
* [[https://docs.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-deviceiocontrol]] | * [[https://docs.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-deviceiocontrol]] | ||
+ | * [[https://alexandre-laurent.developpez.com/articles/hardware-disque-smart/]] | ||