IBackgroundCopyJob3::SetFileACLFlags 方法(bits2_0.h)

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

Syntax

HRESULT SetFileACLFlags(
  [in] DWORD Flags
);

参数

[in] Flags

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

价值 Meaning
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 值以及其他值。

返回代码 Description
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.
     }

要求

Requirement 价值
最低支持的客户端 Windows Vista、Windows XP 以及 Windows Server 2003 和 Windows XP 上的 SP2,KB842773
支持的最低服务器 Windows Server 2008、Windows Server 2003 SP1
目标平台 Windows操作系统
Header bits2_0.h (包括 Bits.h)
Library Bits.lib
DLL BitsPrx3.dll

另请参阅

IBackgroundCopyJob3

IBackgroundCopyJob3::GetFileACLFlags