指定使用 SMB 下载或上传文件时要维护的所有者和 ACL 信息。
Syntax
HRESULT SetFileACLFlags(
[in] DWORD Flags
);
参数
[in] Flags
标识使用 SMB 传输文件时要维护的所有者和 ACL 信息的标志。 对此方法的后续调用将覆盖以前的标志。 指定 0 以从作业中删除标志。 可以指定以下标志的任意组合。
| 价值 | Meaning |
|---|---|
|
如果设置,则保留文件的所有者信息。 否则,调用 Complete 方法的用户拥有该文件。
必须具有 SeRestorePrivilege 才能设置此标志。 管理员组包含 SeRestorePrivilege 特权。 |
|
如果设置,则保留文件的组信息。 否则,BITS 使用作业所有者的主组将组信息分配给文件。
必须具有 SeRestorePrivilege 才能设置此标志。 管理员组包含 SeRestorePrivilege 特权。 |
|
如果设置,BITS 将从源文件复制显式 ACE,并从目标文件夹中继承的 ACE。 否则,BITS 将从目标文件夹中复制可继承的 ACE。 如果目标文件夹不包含可继承的 ACE,则 BITS 将使用所有者帐户中的默认 DACL。 |
|
如果设置,BITS 将从源文件复制显式 ACE,并从目标文件夹中继承的 ACE。
否则,BITS 将从目标文件夹中复制可继承的 ACE。
必须在本地和远程计算机上具有 SeSecurityPrivilege 才能设置此标志。 管理员组包含 SeSecurityPrivilege 特权。 |
|
如果已设置,则 BITS 将复制所有者和 ACL 信息。 这与单独设置所有标志相同。 |
返回值
此方法返回以下 HRESULT 值以及其他值。
| 返回代码 | Description |
|---|---|
|
成功设置标志。 |
|
在作业转换为 BG_JOB_STATE_TRANSFERRED 状态之前,必须调用此方法。 |
|
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 |