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;
Angehörige
cBufferSize
Enthält die Puffergröße in Byte.
irDriveRegs
Enthält eine IDEREGS- Struktur, die verwendet wird, um den Inhalt des IDE-Controllerregisters zu melden.
bDriveNumber
Dieses Element ist undurchsichtig. Verwenden Sie sie nicht. Das Betriebssystem ignoriert dieses Element, da das physische Laufwerk, das die Anforderung empfängt, vom Handle abhängt, das der Aufrufer beim Senden der Anforderung verwendet.
bReserved[3]
Reserviert.
dwReserved[4]
Reserviert.
bBuffer[1]
Zeiger auf den Eingabepuffer.
Bemerkungen
Die SENDCMDINPARAMS- Struktur wird zusammen mit den SMART_SEND_DRIVE_COMMAND- und SMART_RCV_DRIVE_DATA E/A-Steuerelementcodeanforderungen 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-Steuerelementcode 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 der Offlinediagnose
- Aktuellen SMART-Status abrufen
- Schreiben in SMART Log
Eingabeparameter
Der Puffer bei Irp->AssociatedIrp.SystemBuffer enthält eine SENDCMDINPARAMS- Struktur, die den Befehl beschreibt, der an das Gerät gesendet wird. Der irDriveRegs.bCommandReg Member muss SMART_CMD angeben. Der irDriveRegs.bFeaturesReg Member 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.bFeaturesRegangibt, muss der Aufrufer auch die Anzahl der Sektoren angeben, die in irDriveRegs.bSectorCountReggeschrieben werden sollen. Die Größe des Eingabepuffers muss >= sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE)
sein. Der Aufrufer muss die Daten in den Puffer einfügen, der durch das bBuffer-Element von SENDCMDINPARAMSangegeben wird.
Parameters.DeviceIoControl.InputBufferLength gibt die Größe des Eingabepuffers in Byte 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 der 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.SystemBufferzurück. Wenn der SMART-Status vom Gerät angefordert und erfolgreich empfangen wurde, enthält der Treiber die IDEREGS- Struktur im Ausgabepuffer.
E/A-Statusblock
Wenn der Treiber das Feld "Status" auf STATUS_SUCCESS festlegt, wird das Feld Information auf ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS))
festgelegt, um den SMART-Status zurückzugeben und für alle anderen Befehle (sizeof(SENDCMDOUTPARAMS) - 1)
. 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, der nicht unterstützt wird. Wenn Status- nicht STATUS_SUCCESS ist, legt der Treiber das Feld Information auf Null fest.
SMART_RCV_DRIVE_DATA
Der SMART_RCV_DRIVE_DATA-Steuerelementcode gibt die ATA-2-Identifikationsdaten, 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 an das Gerät gesendete Anforderung beschreibt. Der irDriveRegs.bCommandReg Member gibt ID_CMD an, wann Daten angefordert werden, und SMART_CMD, wenn SMART-Daten angefordert werden. Eine Liste der Werte, die dem Featureregister (irDriveRegs.bFeaturesReg) 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-Puffer von Laufwerksdaten an den Puffer bei Irp->AssociatedIrp.SystemBufferzurück.
Wenn der Aufrufer einen SMART-Unterbefehl von SMART_READ_LOG in irDriveRegs.bFeaturesRegangibt, muss der Aufrufer auch die Anzahl der Sektoren angeben, die in irDriveRegs.bSectorCountReggelesen 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 den durch das bBuffer Member von SENDCMDOUTPARAMSangegebenen Puffer platziert.
SMART_RCV_DRIVE_DATA E/A-Statusblock
Der Treiber legt das Feld Information auf (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
fest, 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 |
---|---|
mindestens unterstützte Client- | Windows 2000 |
Header- | ntdddisk.h (include Ntdddisk.h) |