RtlFillNonVolatileMemory 函数 (ntddk.h)

例程 RtlFillNonVolatileMemory 使用给定值填充非易失性目标缓冲区。

语法

NTSYSAPI NTSTATUS RtlFillNonVolatileMemory(
  PVOID       NvToken,
  VOID        *NvDestination,
  SIZE_T      Size,
  const UCHAR Value,
  ULONG       Flags
);

参数

NvToken

指向不透明结构的指针,该结构包含 有关 RtlGetNonVolatileToken 已返回的非易失性内存区域的详细信息。

NvDestination

指向非易失性目标缓冲区的指针。

Size

指定填充操作的长度(以字节为单位)。

Value

包含用于填充目标缓冲区的值的 UCHAR。

Flags

ULONG 类型的值,包含以下一个或多个标志:

Flags 含义
FILL_NV_MEMORY_FLAG_FLUSH 设置提供的值,然后刷新目标范围。 除非指定了FILL_NV_MEMORY_FLAG_NO_DRAIN,否则刷新后跟排水。 此标志可确保即使在系统断电的情况下,数据也是持久的。
FILL_NV_MEMORY_FLAG_NON_TEMPORAL 如果可用,请执行非临时 memset。 非临时意味着不需要数据缓存。 如果处理器不支持对小于地址总线大小的范围执行非临时操作,请执行常规 memset,然后执行刷新和排出。 如果处理器完全忽略非临时移动,RtlSetNonVolatileMemory 不会将其替换为刷新和排出。 但是,如果 Windows 没有给定体系结构的实现, (ARM64) ,请将其替换为刷新和排出。
FILL_NV_MEMORY_FLAG_PERSIST 确保通过刷新或使用非临时移动来持久保存 memset。 通常,系统使用成本最低的方法来保存数据。 此标志可确保即使在系统断电的情况下数据也持久。 指定FILL_NV_MEMORY_FLAG_PERSIST时忽略。
FILL_NV_MEMORY_FLAG_NO_DRAIN 告知例程不要等待刷新完成。 必须与 FILL_NV_MEMORY_FLAG_FLUSH 一起指定,且不FILL_NV_MEMORY_FLAG_PERSIST或FILL_NV_MEMORY_FLAG_NON_TEMPORAL。

返回值

例程返回状态代码之一:

返回代码 说明
STATUS_INVALID_PARAMETER
NvToken 是无效的指针或标记。
STATUS_SUCCESS
请求已成功。

要求

要求
最低受支持的客户端 Windows 10 版本 1903
标头 ntddk.h
IRQL DPC_LEVEL