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