我可以使用GetSecurityInfo / SetSecurityInfo API获取/设置NTFS卷上文件的安全属性(组,所有者,DACL,SACL)。我传递给这些API的句柄必须使用特定的访问权限(READ_CONTROL,ACCESS_SYSTEM_SECURITY,WRITE_DAC,WRITE_OWNER)打开,这些权限要求在使用CreateFile创建它们时启用某些权限(SE_SECURITY,SE_BACKUP,SE_RESTORE),如果没有问题则完全没有问题。这些文件位于NTFS卷上,当然,如果调用进程具有足够的权限。但是,如果文件实际位于网络共享上,则会出现问题 - 使用ACCESS_DENIED(5)或PRIVILEGE_NOT_HELD(1314)创建文件句柄将失败。我想这是因为创建文件句柄的尝试实际上是在远程计算机上在网络登录会话的上下文中进行的,该会话代表我在远程计算机上的用户,并且没有为该远程计算机启用所需的权限处理。有没有办法可以通过这个限制,即能够获取/设置网络共享上文件的安全属性? 类似的问题是获取网络共享上目录的句柄。虽然能够在本地(通过使用FILE_FLAG_BACKUP_SEMANTICS)执行此操作,但我知道此特定标志未重定向到远程计算机,我认为这是我无法打开网络共享上目录句柄的原因。有没有办法做到这一点?
答案 0 :(得分:0)
好吧,我似乎是那个有问题的人 - 我一直在测试这个案例的用户,虽然我的本地机器上的管理员是文件服务器上的常规受限用户,但这导致了所有麻烦。如果您使用对共享资源的文件服务器具有足够权限的用户连接到网络共享上的目录,则可以将安全属性和打开句柄复制到该目录。