SENDCMDINPARAMS-Struktur (ntdddisk.h)
Die SENDCMDINPARAMS-Struktur enthält die Eingabeparameter für die SMART_SEND_DRIVE_COMMAND - und SMART_RCV_DRIVE_DATA-Anforderungen (siehe Hinweise).
Syntax
typedef struct _SENDCMDINPARAMS {
ULONG cBufferSize;
IDEREGS irDriveRegs;
UCHAR bDriveNumber;
UCHAR bReserved[3];
ULONG dwReserved[4];
UCHAR bBuffer[1];
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
Member
cBufferSize
Enthält die Puffergröße in Bytes.
irDriveRegs
Enthält eine IDEREGS-Struktur , die zum Melden des Inhalts der IDE-Controllerregister verwendet wird.
bDriveNumber
Dieser Member ist undurchsichtig. Verwenden Sie sie nicht. Das Betriebssystem ignoriert diesen Member, da das physische Laufwerk, das die Anforderung empfängt, von dem Handle abhängt, das der Aufrufer bei der Anforderung verwendet.
bReserved[3]
Reserviert.
dwReserved[4]
Reserviert.
bBuffer[1]
Zeiger auf den Eingabepuffer.
Hinweise
Die SENDCMDINPARAMS-Struktur wird mit SMART_SEND_DRIVE_COMMAND- und SMART_RCV_DRIVE_DATA E/A-Steuerungscodeanforderungen verwendet. Diese IOCTLs müssen von Treibern verarbeitet werden, die Self-Monitoring Analysis and Reporting Technology (SMART) unterstützen.
SMART_SEND_DRIVE_COMMAND
Der SMART_SEND_DRIVE_COMMAND Steuercode sendet einen der folgenden SMART-Befehle an das Gerät:
- Aktivieren oder Deaktivieren der Berichterstellung auf dem Gerät
- Aktivieren oder Deaktivieren der automatischen Speicherung von Attributen
- Aktuelle Attribute jetzt speichern
- Ausführen von Offline-Diagnose
- Abrufen der aktuellen SMART status
- Schreiben in smart log
Eingabeparameter
Der Puffer bei Irp-AssociatedIrp.SystemBuffer> enthält eine SENDCMDINPARAMS-Struktur, die den an das Gerät gesendeten Befehl beschreibt. Der irDriveRegs.bCommandReg-Member muss SMART_CMD angeben. Das irDriveRegs.bFeaturesReg-Element muss einen SMART-Unterbefehl angeben. Eine Liste der Unterbefehle finden Sie unter IDEREGS.
Wenn der Aufrufer einen SMART-Unterbefehl von SMART_WRITE_LOG in irDriveRegs.bFeaturesRegsReg angibt, muss der Aufrufer auch die Anzahl der Sektoren angeben, die in irDriveRegs.bSectorCountReg geschrieben werden sollen. Die Größe des Eingabepuffers muss = sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE)
sein>. Der Aufrufer muss die zu schreibenden Daten in den Puffer einfügen, der durch den bBuffer-Member von SENDCMDINPARAMS angegeben wird.
Parameters.DeviceIoControl.InputBufferLength gibt die Größe in Bytes des Eingabepuffers an, die = (sizeof(SENDCMDINPARAMS) - 1)
sein >muss.
Parameters.DeviceIoControl.OutputBufferLength gibt die Größe des Ausgabepuffers in Bytes an, die = (sizeof(SENDCMDOUTPARAMS) - 1)
sein >muss. Wenn SMART status angefordert wird, muss der Ausgabepuffer = (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS))
sein>.
Ausgabeparameter
Der Treiber gibt die SENDCMDOUTPARAMS-Struktur an den Puffer bei Irp-AssociatedIrp.SystemBuffer> zurück. Wenn SMART status angefordert und erfolgreich vom Gerät empfangen wurde, schließt der Treiber die IDEREGS-Struktur in den Ausgabepuffer ein.
E/A-Statusblock
Wenn der Treiber das Feld Status auf STATUS_SUCCESS festlegt, wird das Feld Information auf ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS))
für die Rückgabe von SMART status und für alle anderen Befehle auf (sizeof(SENDCMDOUTPARAMS) - 1)
festgelegt. Der Treiber sollte das Feld Status auf STATUS_INVALID_PARAMETER festlegen, wenn ein Eingabeparameter falsch ist, oder auf STATUS_IO_DEVICE_ERROR, wenn das Gerät einen Befehl abbricht, den es nicht unterstützt. Wenn Status nicht STATUS_SUCCESS ist, legt der Treiber das Feld Information auf 0 (Null) fest.
SMART_RCV_DRIVE_DATA
Der SMART_RCV_DRIVE_DATA-Steuerungscode gibt die ATA-2-Identifizierungsdaten, die SMART-Schwellenwerte oder die SMART-Attribute für das Gerät zurück.
SMART_RCV_DRIVE_DATA-Eingabeparameter
Der Puffer bei Irp-AssociatedIrp.SystemBuffer> enthält eine SENDCMDINPARAMS-Struktur, die die Anforderung beschreibt, die an das Gerät gesendet wird. Das irDriveRegs.bCommandRegReg-Element gibt ID_CMD an, wenn Identifizierte Daten angefordert werden, und SMART_CMD, wenn SMART-Daten angefordert werden. Eine Liste der Werte, die dem Featureregister (irDriveRegs.bFeaturesRegsReg) zugewiesen werden können, finden Sie unter IDEREGS.
Parameters.DeviceIoControl.InputBufferLength gibt die Größe des Eingabepuffers in Bytes an, die = (sizeof(SENDCMDINPARAMS) - 1)
sein >muss.
Parameters.DeviceIoControl.OutputBufferLength gibt die Größe des Ausgabepuffers in Bytes an, die = (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
sein >muss.
SMART_RCV_DRIVE_DATA Ausgabeparameter
Der Treiber gibt die SENDCMDOUTPARAMS-Struktur und einen 512-Byte-Laufwerkdatenpuffer an den Puffer bei Irp-AssociatedIrp.SystemBuffer> zurück.
Wenn der Aufrufer einen SMART-Unterbefehl von SMART_READ_LOG in irDriveRegs.bFeaturesRegsReg angibt, muss der Aufrufer auch die Anzahl der Sektoren angeben, die in irDriveRegs.bSectorCountRegreg gelesen werden sollen. Die Ausgabepuffergröße muss = das Maximum der folgenden Werte sein >: sizeof(SENDCMDOUTPARAMS)
oder sizeof(SENDCMDINPARAMS)) -1 + (irDriveRegs.bSectorCountReg** * SMART_LOG_SECTOR_SIZE)
Die aus dem Protokoll gelesenen Daten werden in dem Puffer platziert, der vom bBuffer-Member von SENDCMDOUTPARAMS angegeben wird.
SMART_RCV_DRIVE_DATA E/A-Statusblock
Der Treiber legt das Feld Information auf fest (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
, wenn das Feld Status auf STATUS_SUCCESS festgelegt wird. Andernfalls legt der Treiber das Feld Information auf null und das Feld Status auf möglicherweise STATUS_INVALID_PARAMETER oder STATUS_INSUFFICIENT_RESOURCES fest.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 2000 |
Kopfzeile | ntdddisk.h (include Ntdddisk.h) |