Struttura SENDCMDINPARAMS (ntdddisk.h)

La struttura SENDCMDINPARAMS contiene i parametri di input per le richieste di SMART_SEND_DRIVE_COMMAND e SMART_RCV_DRIVE_DATA (vedere Osservazioni).

Sintassi

typedef struct _SENDCMDINPARAMS {
  ULONG   cBufferSize;
  IDEREGS irDriveRegs;
  UCHAR   bDriveNumber;
  UCHAR   bReserved[3];
  ULONG   dwReserved[4];
  UCHAR   bBuffer[1];
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;

Members

cBufferSize

Contiene le dimensioni del buffer, in byte.

irDriveRegs

Contiene una struttura IDEREGS usata per segnalare il contenuto dei registri del controller IDE.

bDriveNumber

Questo membro è opaco. Non usarlo. Il sistema operativo ignora questo membro, perché l'unità fisica che riceve la richiesta dipende dall'handle usato dal chiamante durante l'esecuzione della richiesta.

bReserved[3]

Riservato.

dwReserved[4]

Riservato.

bBuffer[1]

Puntatore al buffer di input.

Commenti

La struttura SENDCMDINPARAMS viene usata con la SMART_SEND_DRIVE_COMMAND e SMART_RCV_DRIVE_DATA richieste di codice di controllo I/O. Questi IOCTLs devono essere gestiti dai driver che supportano Self-Monitoring Analysis and Reporting Technology (SMART).

SMART_SEND_DRIVE_COMMAND

Il codice di controllo SMART_SEND_DRIVE_COMMAND invia uno dei comandi SMART seguenti al dispositivo:

  • Abilitare o disabilitare la creazione di report nel dispositivo
  • Abilitare o disabilitare il salvataggio automatico degli attributi
  • Salvare gli attributi correnti ora
  • Eseguire la diagnostica offline
  • Ottenere lo stato SMART corrente
  • Scrivere nel log SMART

Parametri di input

Il buffer in Irp-AssociatedIrp.SystemBuffer> contiene una struttura SENDCMDINPARAMS che descrive il comando inviato al dispositivo. Il membro irDriveRegs.bCommandReg deve specificare SMART_CMD. Il membro irDriveRegs.bFeaturesReg deve specificare un sottocomando SMART. Per un elenco di sottocomandi, vedere IDEREGS.

Se il chiamante specifica un sottocomand smart di SMART_WRITE_LOG in irDriveRegs.bFeaturesReg, il chiamante deve anche indicare il numero di settori da scrivere in irDriveRegs.bSectorCountReg. Le dimensioni del buffer di input devono essere >= sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE). Il chiamante deve inserire i dati da scrivere nel buffer indicato dal membro bBuffer di SENDCMDINPARAMS.

Parameters.DeviceIoControl.InputBufferLength specifica le dimensioni in byte del buffer di input, che deve essere >= (sizeof(SENDCMDINPARAMS) - 1).

Parameters.DeviceIoControl.OutputBufferLength specifica le dimensioni, in byte, del buffer di output, che deve essere >= (sizeof(SENDCMDOUTPARAMS) - 1). Se viene richiesto lo stato SMART, il buffer di output deve essere >= (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS)).

Parametri di output

Il driver restituisce la struttura SENDCMDOUTPARAMS nel buffer in Irp-AssociatedIrp.SystemBuffer>. Se lo stato SMART è stato richiesto e ricevuto correttamente dal dispositivo, il driver include la struttura IDEREGS nel buffer di output.

Blocco dello stato I/O

Quando il driver imposta il campo Stato su STATUS_SUCCESS, imposta il campo Informazioni su ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS)) per restituire lo stato SMART e su (sizeof(SENDCMDOUTPARAMS) - 1) per tutti gli altri comandi. Il driver deve impostare il campo Stato su STATUS_INVALID_PARAMETER se un parametro di input non è corretto o su STATUS_IO_DEVICE_ERROR se il dispositivo interrompe un comando che non supporta. Se lo stato non è STATUS_SUCCESS, il driver imposta il campo Informazioni su zero.

SMART_RCV_DRIVE_DATA

Il codice di controllo SMART_RCV_DRIVE_DATA restituisce i dati di identificazione ATA-2, le soglie SMART o gli attributi SMART per il dispositivo.

parametri di input SMART_RCV_DRIVE_DATA

Il buffer in Irp-AssociatedIrp.SystemBuffer> contiene una struttura SENDCMDINPARAMS che descrive la richiesta inviata al dispositivo. Il membro irDriveRegs.bCommandReg specifica ID_CMD quando vengono richiesti i dati e SMART_CMD quando vengono richiesti dati SMART. Per un elenco di valori che possono essere assegnati al registro delle funzionalità (irDriveRegs.bFeaturesReg), vedere IDEREGS.

Parameters.DeviceIoControl.InputBufferLength specifica le dimensioni, in byte, del buffer di input, che deve essere >= (sizeof(SENDCMDINPARAMS) - 1).

Parameters.DeviceIoControl.OutputBufferLength specifica le dimensioni, in byte, del buffer di output, che deve essere >= (sizeof(SENDCMDOUTPARAMS) - 1 + 512).

parametri di output SMART_RCV_DRIVE_DATA

Il driver restituisce la struttura SENDCMDOUTPARAMS e un buffer di unità a 512 byte nel buffer in Irp-AssociatedIrp.SystemBuffer>.

Se il chiamante specifica un subcommand SMART di SMART_READ_LOG in irDriveRegs.bFeaturesReg, il chiamante deve anche indicare il numero di settori da leggere in irDriveRegs.bSectorCountRegReg. Le dimensioni del buffer di output devono essere >= il massimo dei valori seguenti: sizeof(SENDCMDOUTPARAMS) o sizeof(SENDCMDINPARAMS)) -1 + (irDriveRegs.bSectorCountReg** * SMART_LOG_SECTOR_SIZE)

I dati letti dal log verranno inseriti nel buffer specificato dal membro bBuffer di SENDCMDOUTPARAMS.

SMART_RCV_DRIVE_DATA blocco di stato di I/O

Il driver imposta il campo Informazioni su (sizeof(SENDCMDOUTPARAMS) - 1 + 512) quando imposta il campo Stato su STATUS_SUCCESS. In caso contrario, il driver imposta il campo Informazioni su zero e il campo Stato su possibilmente STATUS_INVALID_PARAMETER o STATUS_INSUFFICIENT_RESOURCES.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000
Intestazione ntdddisk.h (include Ntdddisk.h)

Vedi anche

IDEREGS

SENDCMDOUTPARAMS