此頁面描述可用來在裝置數據集上執行數據集管理 (DSM) 動作的DEVICE_DSM_ACTION常數。 這些常數定義於 ntddstor.h中。 識別為非破壞性的動作不會改變任何數據。 如需 DSM 動作處理方式的相關信息,請參閱 數據集管理概觀。
| DEVICE_DSM_ACTION常數 | 說明 |
|---|---|
| DeviceDsmAction_None | 僅供結構初始化之用。 |
| DeviceDsmAction_Trim | 驅動程式會執行修剪作業。 |
| DeviceDsmAction_Notification | 非破壞性的。 驅動程式會執行通知作業。 針對此動作,緊接在 DEVICE_DSM_INPUT 結構後面的參數區塊會格式化為 DEVICE_DSM_NOTIFICATION_PARAMETERS 結構。 Windows 7 和更新版本支援。 |
| DeviceDsmAction_OffloadRead | 非破壞性的。 驅動程式會執行卸除讀取作業。 針對此動作,緊接在 DEVICE_DSM_INPUT 結構後面的參數區塊會格式化為 DEVICE_DSM_OFFLOAD_READ_PARAMETERS 結構。 輸出是由 DEVICE_DSM_OUTPUT 結構所組成,後面接著 STORAGE_OFFLOAD_READ_OUTPUT 結構。 Windows 8 和更新版本支援。 |
| DeviceDsmAction_OffloadWrite | 驅動程式會執行卸除寫入作業。 針對此動作,緊接在 DEVICE_DSM_INPUT 結構之後的參數區塊會格式化為 DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS 結構。 輸出是由 DEVICE_DSM_OUTPUT 結構所組成,後面接著 STORAGE_OFFLOAD_WRITE_OUTPUT 結構。 Windows 8 和更新版本支援。 |
| DeviceDsmAction_Allocation | 非破壞性的。 驅動程式會執行邏輯區塊布建作業。 邏輯區塊範圍是在單一 DEVICE_DSM_RANGE 結構中指定。 Windows 8 和更新版本支援。 |
| DeviceDsmAction_Repair | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_Scrub | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_DrtQuery | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_DrtClear | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_DrtDisable | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_TieringQuery | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_Map | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_RegenerateParity | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_NvCache_Change_Priority | 非破壞性的。 驅動程式會變更指定邏輯區塊範圍的快取優先順序。 新的目標優先順序是在緊接在 DEVICE_DSM_INPUT 結構之後的參數區塊 DEVICE_DSM_NVCACHE_CHANGE_PRIORITY_PARAMETERS 結構中設定。 一或多個 DEVICE_DSM_RANGE 結構中會指定要變更優先順序的邏輯區塊範圍。 Windows 8.1 和更新版本支援。 |
| DeviceDsmAction_NvCache_Evict | 非破壞性的。 驅動程式會從快取媒體收回數據。 若要收回所有數據,請在 Flags 成員 DEVICE_DSM_INPUT 中設定DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE旗標,且不包含任何 DEVICE_DSM_RANGE 結構。 要收回的特定邏輯區塊範圍會在一或多個 DEVICE_DSM_RANGE 結構中提供。 DeviceDsmAction_NvCache_Evict 動作會同步執行。 在收回動作成功或失敗之前,不會提供任何其他動作。 為了限制其對使用裝置的應用程式的影響,所發出的每個 DeviceDsmAction_NvCache_Evict 動作都應該包含相對較小的數據範圍。 它們不應超過 10 MB,在理想情況下小於 2 MB。 這可將用戶層級應用程式在存取裝置上數據時遇到明顯延遲的機會降到最低。 Windows 8.1 和更新版本支援。 |
| DeviceDsmAction_TopologyIdQuery | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_GetPhysicalAddresses | 非破壞性的。 驅動程式會傳回對應至一或多個邏輯區塊範圍的實體位址範圍。 只有在持續性記憶體磁碟上才支援此動作。 邏輯區塊範圍會指定為緊接在 DEVICE_DSM_INPUT 結構之後的一系列 DEVICE_DSM_RANGE 結構。 輸出是由 DEVICE_DSM_OUTPUT 結構所組成,後面接著填補,然後是 DEVICE_DSM_PHYSICAL_ADDRESSES_OUTPUT 結構,其中包含輸出區塊中要求的實體位址範圍。 每個實體位址範圍都會在 DEVICE_STORAGE_ADDRESS_RANGE 結構中傳回。 如果輸出緩衝區不夠大而無法保存所有數據,DSM 會傳回STATUS_BUFFER_OVERFLOW,而且DEVICE_DSM_PHYSICAL_ADDRESSES_OUTPUT結構的 TotalNumberOfRange s 字段包含滿足要求所需的DEVICE_STORAGE_ADDRESS_RANGE元素數目。 包含記憶體錯誤的任何實體位址範圍都會DEVICE_DSM_PHYSICAL_ADDRESS_HAS_MEMORY_ERROR為其位址。 應用程式可以追蹤每個傳回實體位址範圍的長度,將傳回的實體位址範圍對應至輸入邏輯區塊範圍。 請注意,單一邏輯區塊範圍可以對應到許多實體位址範圍。 如果在 DEVICE_DSM_INPUT 結構的 Flags 欄位中設定DEVICE_DSM_FLAG_PHYSICAL_ADDRESSES_OMIT_TOTAL_RANGES,則驅動程式將不會計算 totalNumberOfRanges 。 這是不需要知道範圍總數的呼叫端的效能優化。 |
| DeviceDsmAction_ScopeRegen | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_ReportZones | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_OpenZone | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_FinishZone | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_CloseZone | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_ResetWritePointer | 僅供內部使用。 |
| DeviceDsmAction_GetRangeErrorInfo | 非破壞性的。 驅動程式會傳回一或多個邏輯區塊範圍是否包含任何媒體錯誤的相關信息。 只有在持續性記憶體磁碟上才支援此功能。 邏輯區塊範圍會指定為緊接在 DEVICE_DSM_INPUT 結構之後的一系列 DEVICE_DSM_RANGE 結構。 輸出包含 DEVICE_DSM_OUTPUT 結構,後面接著填補和 DEVICE_DSM_RANGE_ERROR_OUTPUT結構,其會保存 DEVICE_STORAGE_RANGE_ATTRIBUTES陣列。 如果輸出緩衝區不夠大而無法保存所有數據,DSM 會傳回STATUS_BUFFER_OVERFLOW,而且DEVICE_DSM_RANGE_ERROR_OUTPUT結構的 TotalNumberOfRange s 字段包含滿足要求所需的DEVICE_STORAGE_RANGE_ATTRIBUTES元素數目。 每個DEVICE_STORAGE_RANGE_ATTRIBUTES結構都包含 IsRangeBad 欄位。 當邏輯區塊範圍包含媒體錯誤時,驅動程式會將該欄位設定為 1。 如果任何要求範圍中沒有任何媒體錯誤,驅動程式會在 DEVICE_DSM_RANGE_ERROR_OUTPUT 的 [旗標] 字段中設定DEVICE_STORAGE_NO_ERRORS。 會排序DEVICE_STORAGE_RANGE_ATTRIBUTES陣列的專案,使其順序對應至輸入範圍的順序。 例如,如果第一個輸入範圍分成 3 個輸出範圍,這些範圍將會是陣列中的前 3 個範圍。 呼叫端可以藉由追蹤輸出範圍的長度,瞭解哪些輸出範圍對應至輸入範圍。 |
| DeviceDsmAction_WriteZeroes | 僅供內部使用。 |
| DeviceDsmAction_LostQuery | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_GetFreeSpace | 非破壞性的。 僅供內部使用。 |
| DeviceDsmAction_ConversionQuery | 非破壞性的。 僅供內部使用。 |