BackupRead 函数 (winbase.h)

BackupRead 函数可用于备份文件或目录,包括安全信息。 函数将与指定文件或目录关联的数据读取到缓冲区中,然后使用 WriteFile 函数将其写入备份介质。

语法

BOOL BackupRead(
  [in]  HANDLE  hFile,
  [out] LPBYTE  lpBuffer,
  [in]  DWORD   nNumberOfBytesToRead,
  [out] LPDWORD lpNumberOfBytesRead,
  [in]  BOOL    bAbort,
  [in]  BOOL    bProcessSecurity,
  [out] LPVOID  *lpContext
);

参数

[in] hFile

要备份的文件或目录的句柄。 若要获取句柄,请调用 CreateFile 函数。 除非文件句柄是使用 ACCESS_SYSTEM_SECURITY 访问权限创建的,否则不会读取 SCL。 有关详细信息,请参阅 文件安全性和访问权限

句柄必须是同步的, (非重叠) 。 这意味着在调用 CreateFile 时,不得设置FILE_FLAG_OVERLAPPED标志。 此函数不会验证它收到的句柄是否同步,因此它不会返回同步句柄的错误代码,但使用异步 (重叠) 句柄调用它可能会导致非常难以调试的细微错误。

如果使用标志FILE_FLAG_NO_BUFFERING调用 CreateFile则 BackupRead 函数可能会失败。 在这种情况下,GetLastError 函数ERROR_INVALID_PARAMETER返回值。

[out] lpBuffer

指向接收数据的缓冲区的指针。

[in] nNumberOfBytesToRead

缓冲区的长度(以字节为单位)。 缓冲区大小必须大于 WIN32_STREAM_ID 结构的大小。

[out] lpNumberOfBytesRead

指向接收读取字节数的变量的指针。

如果函数返回非零值,并且 lpNumberOfBytesRead 指向的变量为零,则表示已读取与文件句柄关联的所有数据。

[in] bAbort

指示是否已完成对句柄使用 BackupRead 。 备份文件时,请将此参数指定为 FALSE。 使用 BackupRead 后,必须再次调用 BackupRead ,为此参数指定 TRUE 并传递相应的 lpContext。 当 bAbortTRUE 时,必须传递 lpContext;将忽略所有其他参数。

[in] bProcessSecurity

指示函数是否还原访问控制列表 (ACL) 文件或目录的数据。

如果 bProcessSecurityTRUE,则会备份 ACL 数据。

[out] lpContext

指向变量的指针,该变量接收 指向 BackupRead 用于在备份操作期间维护上下文信息的内部数据结构的指针。

在为指定的文件或目录首次调用 BackupRead 之前,必须将 lpContext 指向的变量设置为 NULL。 函数为数据结构分配内存,然后将变量设置为指向该结构。 在调用 BackupRead 之间,不得更改 lpContext 或它指向的变量。

若要释放数据结构使用的内存,请在备份操作完成时调用 BackupRead ,并将 bAbort 参数设置为 TRUE

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零,表示发生了 I/O 错误。 要获得更多的错误信息,请调用 GetLastError。

注解

此函数不适用于备份在加密文件系统下加密的文件。 为此,请使用 ReadEncryptedFileRaw

如果在 BackupRead 读取数据时出错,调用过程可以通过调用 BackupSeek 函数跳过错误数据。

应使用 BackupWrite 函数还原文件或目录。

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

BackupSeek

BackupWrite

创建备份应用程序

ReadEncryptedFileRaw

WIN32_STREAM_ID