DEVICE_DSM_ACTION 说明

本页介绍可用于对设备数据集执行数据集管理 (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_NVCACHE_CHANGE_PRIORITY_PARAMETERS 结构中设置,该结构位于 紧跟DEVICE_DSM_INPUT 结构后面的参数块中。 一个或多个 DEVICE_DSM_RANGE 结构中提供了要更改优先级的逻辑块范围。 在 Windows 8.1 及更高版本中受支持。
DeviceDsmAction_NvCache_Evict 无损。 驱动程序将从缓存介质中逐出数据。 若要逐出所有数据,请在 DEVICE_DSM_INPUT 的 Flags 成员中设置 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结构的 TotalNumberOfRanges 字段包含满足请求所需的DEVICE_STORAGE_ADDRESS_RANGE元素数。 包含内存错误的任何物理地址范围都将DEVICE_DSM_PHYSICAL_ADDRESS_HAS_MEMORY_ERROR作为其地址。 应用程序可以通过跟踪每个返回的物理地址范围的长度,将返回的物理地址范围映射到输入逻辑块范围。 请注意,单个逻辑块范围可以对应于许多物理地址范围。 如果在DEVICE_DSM_INPUT结构的 “标志 ”字段中设置了 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_STORAGE_RANGE_ATTRIBUTES 数组的DEVICE_DSM_RANGE_ERROR_OUTPUT ) 结构。 如果输出缓冲区不够大,无法容纳所有数据,DSM 将返回STATUS_BUFFER_OVERFLOW并且DEVICE_DSM_RANGE_ERROR_OUTPUT结构的 TotalNumberOfRanges 字段包含满足请求所需的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 无损。 仅限内部使用。