我正在尝试枚举远程文件服务器上的目录。 我想使用备份语义,以便不需要管理员凭据。
在测试服务器上,我创建了一个共享:
我目前正在使用此代码:
static void accessWithBackupSemantics() {
NetResource netResource = new NetResource() {
Scope = ResourceScope.GlobalNetwork,
ResourceType = ResourceType.Disk,
DisplayType = ResourceDisplayType.Share,
Usage = ResourceUsage.Connectable,
RemoteName = @"\\target-srv\TargetShare"
};
// open "net use" connection
int netResult = Native.WNetAddConnection2(netResource,
@"***password***",
@"DOMAIN\backup_op_user",
0);
if (netResult == 0 || netResult == 1219) {
// enable privileges
// (this is taken from AplhaFS)
using (new PrivilegeEnabler(Privilege.Backup)) {
try {
// try open remote directory
SafeFileHandle fsHandle = Native.CreateFile(
@"\\target-srv\TargetShare",
EFileAccess.GenericRead,
EFileShare.Read | EFileShare.Write,
IntPtr.Zero,
ECreationDisposition.OpenExisting,
EFileAttributes.BackupSemantics,
IntPtr.Zero);
Console.WriteLine("Handle is valid: " + !fsHandle.IsInvalid);
}
catch (Exception ex) {}
finally {
Native.WNetCancelConnection2(netResource.RemoteName, 0, true);
}
}
}
}
如果我在用户名中指定“DOMAIN \ Administrator”,但如果我尝试使用属于本地“备份操作员”的成员的域帐户,则无效(错误为5 - 访问被拒绝) target-srv 服务器。
我还检查了 target-srv 上的安全事件日志,对于使用 WNetAddConnection2 创建的每个连接,都会写入“特殊登录”事件。此事件的详细信息包括登录帐户的权限列表。 在这两种情况下(当我与管理员或 backup_op_user 连接时) - 确实列出了 seBackupPrivilege 。 我试图为“备份操作员”提供额外的权限,因此该列表具有管理员拥有的所有权限 - 但它没有做任何更改。
问题:
我见过许多本地使用备份语义的例子,但没有一个可以通过网络使用的例子 - 请不要回复本地使用示例的链接。