Freigeben über


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)

Weitere Informationen

IDEREGS

SENDCMDOUTPARAMS