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 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.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))
。
輸出參數
驅動程式會將 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_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.bFeaturesReg中指定SMART_READ_LOG的 SMART 子命令,呼叫端也必須指出 irDriveRegs.bSectorCountReg中讀取的扇區數目。 輸出緩衝區大小必須 >= 下列值的最大值:sizeof(SENDCMDOUTPARAMS)
或 sizeof(SENDCMDINPARAMS)) -1 + (irDriveRegs.bSectorCountReg** * SMART_LOG_SECTOR_SIZE)
從記錄檔讀取的數據會放在 bBuff er 所指定的緩衝區中,SENDCMDOUTPARAMS的成員。
SMART_RCV_DRIVE_DATA I/O 狀態區塊
驅動程式會將 [資訊] 字段設定為 [(sizeof(SENDCMDOUTPARAMS) - 1 + 512)
] 時,會將 [狀態 ] 字段 設定為 [STATUS_SUCCESS]。 否則,驅動程式會將 [資訊] 字段設定為零 ,並將 [狀態] 字段設定為可能STATUS_INVALID_PARAMETER或STATUS_INSUFFICIENT_RESOURCES。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 |
標頭 | ntdddisk.h (包括 Ntdddisk.h) |