SENDCMDINPARAMS 構造体 (ntdddisk.h)
SENDCMDINPARAMS 構造体には、SMART_SEND_DRIVE_COMMAND要求とSMART_RCV_DRIVE_DATA要求の入力パラメーターが含まれています (「解説」を参照)。
構文
typedef struct _SENDCMDINPARAMS {
ULONG cBufferSize;
IDEREGS irDriveRegs;
UCHAR bDriveNumber;
UCHAR bReserved[3];
ULONG dwReserved[4];
UCHAR bBuffer[1];
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
メンバー
cBufferSize
バッファー サイズをバイト単位で格納します。
irDriveRegs
IDE コントローラー レジスタの内容を報告するために使用される IDEREGS 構造体が含まれています。
bDriveNumber
このメンバーは不透明です。 使用しないでください。 要求を受信する物理ドライブは、要求の作成時に呼び出し元が使用するハンドルによって異なるため、オペレーティング システムはこのメンバーを無視します。
bReserved[3]
予約済み。
dwReserved[4]
予約済み。
bBuffer[1]
入力バッファーへのポインター。
注釈
SENDCMDINPARAMS 構造体は、SMART_SEND_DRIVE_COMMANDおよびSMART_RCV_DRIVE_DATA I/O 制御コード要求と共に使用されます。 これらの IOCTL は、Self-Monitoring 分析およびレポート テクノロジ (SMART) をサポートするドライバーによって処理される必要があります。
SMART_SEND_DRIVE_COMMAND
SMART_SEND_DRIVE_COMMAND制御コードは、次のいずれかの SMART コマンドをデバイスに送信します。
- デバイスでレポートを有効または無効にする
- 属性の自動保存を有効または無効にする
- 現在の属性を今すぐ保存する
- オフライン 診断を実行する
- 現在の SMART 状態を取得する
- SMART ログへの書き込み
入力パラメーター
Irp-AssociatedIrp.SystemBuffer> のバッファーには、デバイスに送信されるコマンドを記述する SENDCMDINPARAMS 構造体が含まれています。 irDriveRegs.bCommandReg メンバーは、SMART_CMDを指定する必要があります。 irDriveRegs.bFeaturesReg メンバーは SMART サブコマンドを指定する必要があります。 サブコマンドの一覧については、「 IDEREGS」を参照してください。
呼び出し元が irDriveRegs.bFeaturesReg でSMART_WRITE_LOGの SMART サブコマンドを指定する場合、呼び出し元は irDriveRegs.bSectorCountReg に書き込むセクターの数も指定する必要があります。 入力バッファーのサイズは = sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE)
である>必要があります。 呼び出し元は、 SENDCMDINPARAMS の bBuffer メンバーによって示されるバッファーに書き込むデータを配置する必要があります。
Parameters.DeviceIoControl.InputBufferLength は、入力バッファーのサイズ (バイト単位) を指定します。これは、 = (sizeof(SENDCMDINPARAMS) - 1)
である>必要があります。
Parameters.DeviceIoControl.OutputBufferLength は、出力バッファーのサイズ (バイト単位) を指定します。これは、 = (sizeof(SENDCMDOUTPARAMS) - 1)
である>必要があります。 SMART 状態が要求されている場合、出力バッファーは = (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS))
である>必要があります。
出力パラメーター
ドライバーは、IRP-AssociatedIrp.SystemBuffer> のバッファーに SENDCMDOUTPARAMS 構造体を返します。 SMART 状態が要求され、デバイスから正常に受信された場合、ドライバーには出力バッファーに IDEREGS 構造体が含まれます。
I/O ステータス ブロック
ドライバーは、[状態] フィールドをSTATUS_SUCCESSに設定すると、SMART 状態を返す場合は [ 情報 ] フィールドを に ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS))
、その他のすべてのコマンドでは を に (sizeof(SENDCMDOUTPARAMS) - 1)
設定します。 ドライバーは、入力パラメーターが正しくない場合は[ 状態] フィールドをSTATUS_INVALID_PARAMETERに設定するか、デバイスがサポートしていないコマンドを中止した場合にSTATUS_IO_DEVICE_ERRORする必要があります。 Status がSTATUS_SUCCESSされていない場合、ドライバーは Information フィールドを 0 に設定します。
SMART_RCV_DRIVE_DATA
SMART_RCV_DRIVE_DATA制御コードは、ATA-2 識別データ、SMART しきい値、またはデバイスの SMART 属性を返します。
SMART_RCV_DRIVE_DATA入力パラメーター
Irp-AssociatedIrp.SystemBuffer> のバッファーには、デバイスに送信される要求を記述する SENDCMDINPARAMS 構造体が含まれています。 irDriveRegs.bCommandReg メンバーは、識別データが要求されたときにID_CMDを指定し、SMART データが要求されたときにSMART_CMDします。 機能レジスタ (irDriveRegs.bFeaturesReg) に割り当てることができる値の一覧については、「 IDEREGS」を参照してください。
Parameters.DeviceIoControl.InputBufferLength は、入力バッファーのサイズ (バイト単位) を指定します。これは、 = (sizeof(SENDCMDINPARAMS) - 1)
である>必要があります。
Parameters.DeviceIoControl.OutputBufferLength は、出力バッファーのサイズ (バイト単位) を指定します。これは、 = (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
である>必要があります。
出力パラメーターのSMART_RCV_DRIVE_DATA
ドライバーは、SENDCMDOUTPARAMS 構造体とドライブ データの 512 バイト バッファーを Irp-AssociatedIrp.SystemBuffer> のバッファーに返します。
呼び出し元が irDriveRegs.bFeaturesReg でSMART_READ_LOGの SMART サブコマンドを指定する場合、呼び出し元は irDriveRegs.bSectorCountReg で読み取るセクターの数も指定する必要があります。 出力バッファー のサイズは、 = 次の値の最大値である>必要があります。 sizeof(SENDCMDOUTPARAMS)
sizeof(SENDCMDINPARAMS)) -1 + (irDriveRegs.bSectorCountReg** * SMART_LOG_SECTOR_SIZE)
ログから読み取られたデータは、SENDCMDOUTPARAMS の bBuffer メンバーによって指定されたバッファーに配置されます。
SMART_RCV_DRIVE_DATA I/O 状態ブロック
ドライバーは、 [状態] フィールドを (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
STATUS_SUCCESSに設定するときに、 [情報] フィールドを に設定します。 それ以外の場合、ドライバーは Information フィールドを 0 に設定し、[ 状態] フィールドをSTATUS_INVALID_PARAMETERまたはSTATUS_INSUFFICIENT_RESOURCES可能性があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 |
Header | ntdddisk.h (Ntdddisk.h を含む) |