本页介绍可用于对设备数据集执行数据集管理(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 中设置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的 Flags 字段中设置DEVICE_STORAGE_NO_ERRORS。 对DEVICE_STORAGE_RANGE_ATTRIBUTES数组的元素进行排序,使其顺序对应于输入范围的顺序。 例如,如果第一个输入范围被分解为 3 个输出范围,则这些范围将是数组中的前 3 个范围。 调用方可以通过跟踪输出范围的长度来了解哪些输出范围对应于输入范围。 |
| DeviceDsmAction_WriteZeroes | 仅供内部使用。 |
| DeviceDsmAction_LostQuery | 非破坏性的。 仅供内部使用。 |
| DeviceDsmAction_GetFreeSpace | 非破坏性的。 仅供内部使用。 |
| DeviceDsmAction_ConversionQuery | 非破坏性的。 仅供内部使用。 |