IBackgroundCopyJob3::SetFileACLFlags 方法 (bits2_0.h)

指定在使用 SMB 下载或上传文件时要维护的所有者和 ACL 信息。

语法

HRESULT SetFileACLFlags(
  [in] DWORD Flags
);

参数

[in] Flags

标识使用 SMB 传输文件时要维护的所有者和 ACL 信息的标志。 对此方法的后续调用将覆盖前面的标志。 指定 0 以从作业中删除标志。 可以指定以下标志的任意组合。

含义
BG_COPY_FILE_OWNER
如果设置,则保留文件的所有者信息。 否则,调用 Complete 方法的用户将拥有该文件。

必须具有 SeRestorePrivilege 才能设置此标志。 管理员组包含 SeRestorePrivilege 特权。

BG_COPY_FILE_GROUP
如果设置,则保留文件的组信息。 否则,BITS 使用作业所有者的主组将组信息分配给文件。

必须具有 SeRestorePrivilege 才能设置此标志。 管理员组包含 SeRestorePrivilege 特权。

BG_COPY_FILE_DACL
如果已设置,BITS 将从源文件复制显式 ACE,并从目标文件夹复制可继承的 ACE。 否则,BITS 将从目标文件夹复制可继承的 ACE。 如果目标文件夹不包含可继承的 ACE,则 BITS 使用所有者帐户的默认 DACL。
BG_COPY_FILE_SACL
如果已设置,BITS 将从源文件复制显式 ACE,并从目标文件夹复制可继承的 ACE。 否则,BITS 将从目标文件夹复制可继承的 ACE。

在本地和远程计算机上都必须具有 SeSecurityPrivilege 才能设置此标志。 管理员组包含 SeSecurityPrivilege 特权。

BG_COPY_FILE_ALL
如果已设置,BITS 将复制所有者和 ACL 信息。 这与单独设置所有标志相同。

返回值

此方法返回以下 HRESULT 值以及其他值。

返回代码 说明
S_OK
已成功设置标志。
BG_E_INVALID_STATE
在作业转换为 BG_JOB_STATE_TRANSFERRED 状态之前,必须调用此方法。
E_INVALIDARG
Flags 参数包含不在列表中的标志。

注解

这些标志适用于指定 SMB 协议的远程文件名。 BITS 忽略 HTTP 传输的标志。

BITS 传播文件时间戳和属性 (不是 SMB 文件的扩展属性) 。

当文件传输完成时,BITS 会将所有者和 ACL 信息应用于文件,而不是 在创建 临时传输文件时。 BITS 在创建临时传输文件时不指定安全描述符, (该文件从目标目录) 继承 ACL 信息。 如果传输的数据很敏感,应用程序应在目标目录上指定适当的 ACL,以防止未经授权的访问。

若要确保在作业中的所有文件上设置正确的所有者和 ACL 信息,请在创建作业后和调用 IBackgroundCopyJob::Resume 方法之前调用此方法。 否则,在设置标志之前传输的文件将不包含相应的所有者和 ACL 信息。

此方法在 XCopy DOS 命令之后建模。

如果下载到 FAT 文件系统,则不会维护所有者和 ACL 信息。

如果用户在本地和远程计算机上没有复制所有者或 ACL 信息的权限,则 BITS 会将作业置于暂时性错误状态,并将错误代码设置为 E_ACCESSDENIED

示例

以下示例演示如何调用 SetFileACLFlags 方法,以指定要使用 BITS 下载的文件维护的所有者和 ACL 信息。 该示例假定 IBackgroundCopyJob 变量 pJob 有效,指向新作业并挂起。

     IBackgroundCopyJob *pJob;
     IBackgroundCopyJob3 *pJob3 = NULL;

     //Need to query the IBackgroundCopyJob interface for an IBackgroundCopyJob3
     //interface pointer. The IBackgroundCopyJob3 interface contains the SetACLFlags method.
     hr = pJob->QueryInterface(__uuidof( IBackgroundCopyJob3 ), (void**)&pJob3;);
     if (S_OK == hr)
     {
          pJob->Release(); //No longer need the IBackgoundCopyJob interface pointer.

          //Copy the group and DACL information for each file.
          hr = pJob3->SetACLFlags(BG_COPY_FILE_GROUP | BG_COPY_FILE_DACL);
          if (FAILED(hr))
          {
               //Handle error.
          }

          ... //Add one or more files and resume the job.
          pJob3->Resume();

          //When done, release the interface pointer.
          pJob3->Release();
     }
     else
     {
          //Handle error. QueryInterface will return E_NOINTERFACE if the version of BITS
          //running on the computer is less than BITS 2.0.
     }

要求

要求
最低受支持的客户端 Windows Vista、Windows XP(在 Windows Server 2003 和 Windows XP 上使用 SP2、KB842773)
最低受支持的服务器 Windows Server 2008、Windows Server 2003 SP1
目标平台 Windows
标头 bits2_0.h (包括 Bits.h)
Library Bits.lib
DLL BitsPrx3.dll

另请参阅

IBackgroundCopyJob3

IBackgroundCopyJob3::GetFileACLFlags