SENDCMDINPARAMS 結構 (ntdddisk.h)
The SENDCMDINPARAMS structure contains the input parameters for the SMART_SEND_DRIVE_COMMAND and SMART_RCV_DRIVE_DATA requests (see Remarks).
語法
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 Analysis and Reporting Technology (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.bFeaturesRegs.bFeaturesReg 中指定SMART_WRITE_LOG的 SMART 子命令,呼叫端也必須指出要在 irDriveRegs.bSectorCountReg 中寫入的扇區數目。 輸入緩衝區大小必須是 >= sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE)
。 呼叫端必須將數據放入 SDINPARAMS的 bBuffer 成員所指示的緩衝區中。
Parameters.DeviceIoControl.InputBufferLength 指定輸入緩衝區的大小,其大小必須是 >。 (sizeof(SENDCMDINPARAMS) - 1)
Parameters.DeviceIoControl.OutputBufferLength 指定輸出緩衝區的大小,以位元組為單位,必須是 >。 (sizeof(SENDCMDOUTPARAMS) - 1)
如果要求 SMART 狀態,輸出緩衝區必須是 >= (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS))
。
輸出參數
驅動程式會將 SENDCMDOUTPARAMS 結構傳回至 Irp-AssociatedIrp.SystemBuffer> 的緩衝區。 如果要求SMART狀態並從裝置成功接收,驅動程式會在輸出緩衝區中包含 IDEREGS 結構。
I/O 狀態區塊
當驅動程式將 [狀態] 欄位設定為 STATUS_SUCCESS 時,它會將 [資訊 ] 欄位設定 ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS))
為 ,以傳回 SMART 狀態,並將 設定為 以 (sizeof(SENDCMDOUTPARAMS) - 1)
傳回所有其他命令。 如果輸入參數不正確,或裝置中止不支援的命令,驅動程序應該將 [ 狀態 ] 欄位設定為 STATUS_IO_DEVICE_ERROR STATUS_INVALID_PARAMETER。 如果 Status 不是STATUS_SUCCESS,驅動程式會將 [資訊 ] 字段設定為零。
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.bFeaturesRegs.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 狀態區塊
驅動程式會在將 [狀態] 字段設定為 [STATUS_SUCCESS時,將 [資訊] 字段(sizeof(SENDCMDOUTPARAMS) - 1 + 512)
設定為 。 否則,驅動程式會將 [資訊 ] 字段設定為零,並將 [ 狀態 ] 字段設定為可能STATUS_INVALID_PARAMETER或STATUS_INSUFFICIENT_RESOURCES。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 |
標頭 | ntdddisk.h (包含 Ntdddisk.h) |