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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per