CcZeroData 函数 (ntifs.h)

CcZeroData 例程将缓存或非缓存文件中的指定字节范围从零。

注意

此例程应只调用到文件的有效数据长度以外的文件的零部分。 CcZeroData 不会修改文件之前写入的任何数据。 若要将以前写入的数据设置为文件的有效数据长度的一部分,请调用 CcCopyWrite,或另一个缓存的写入接口。

语法

BOOLEAN CcZeroData(
  [in] PFILE_OBJECT   FileObject,
  [in] PLARGE_INTEGER StartOffset,
  [in] PLARGE_INTEGER EndOffset,
  [in] BOOLEAN        Wait
);

参数

[in] FileObject

指向文件 FILE_OBJECT 的指针,该文件中将有一系列字节要为零。

[in] StartOffset

指向变量的指针,该变量指定文件中的字节偏移量到要为零的第一个字节。

[in] EndOffset

指向一个变量的指针,该变量指定文件中的字节偏移量到要为零的最后一个字节。

[in] Wait

如果调用方应处于等待状态,则设置为 TRUE,直到整个字节范围被零。 否则,此参数设置为 FALSE

返回值

CcZeroData 如果数据成功为零,则返回 true;否则,返回 FALSE

言论

要为零的文件可以缓存或非缓存。 但是,如果文件未缓存,则 StartOffsetEndOffset 的值必须是卷扇区大小的倍数。

如果池分配失败并且 Wait指定为 TRUECcZeroData 将引发STATUS_INSUFFICIENT_RESOURCES异常。 如果发生池分配失败,并且 Wait 被指定为 FALSE,则 CcZeroData 返回 FALSE,但不引发异常。

如果 FileObject 未启用缓存,但缓存存在于流中(即同一文件的另一个文件对象已启用缓存),则零将被视为启用写通缓存。

如果 Wait 设置为 TRUE,则保证 CcZeroData 完成零数据请求并返回 TRUE。 如果缓存文件所需的页已驻留在内存中,则数据将立即为零,并且不会发生阻塞。 如果任何所需页面不驻留,则调用方将处于等待状态,直到所有必需的页面都已驻留,并且数据可以为零。

如果 等待FALSE 并且缓存文件所需的页面尚未驻留在内存中,CcZeroData 将拒绝阻止,并将返回 FALSE

如果池分配失败,CcZeroData 引发STATUS_INSUFFICIENT_RESOURCES异常。 如果 CcZeroData 遇到任何其他错误(包括 IO 错误),则会将错误引发给调用方。

对于 Windows Vista 和更高版本的 Windows 操作系统,CcZeroData 的行为如下所示:

  • 如果流缓存并write_through,则 StartOffset 不必对齐扇区。
  • 如果 EndOffset 未对齐,它将向上舍入到下一个扇区大小。

要求

要求 价值
最低支持的客户端 Windows 2000。 有关 Vista 和更高版本的操作系统的更改,请参阅“备注”。
目标平台 普遍
标头 ntifs.h (包括 Fltkernel.h、 Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=APC_LEVEL

另请参阅

CcInitializeCacheMap

CcIsFileCached

FILE_OBJECT