删除链接到文件中没有清除只读位
-
27-09-2019 - |
题
我有一个文件集与多个链接。
该文件是拥有通过TFS源的控制,但其他链接到他们了他们。我怎么删除的额外的链接,而无需清除只读位。
它是安全的假设:
- 该文件已经超过一个链接到他们
- 你是不是删除名称所拥有的TFS
- 不存在任何潜在的竞争条件
- 你有ACL的完全控制的文件
- 机器不会失去权力,也不会将你的程序中被杀害,除非这需要太长。
它是不安全的假设:
- 只读位置(不设置,如果它不出)
- 你可以留下的只读点清楚,如果你遇到一个错误以及最初设定
不迁移到超级用户--如果迁移有的答案是不可能的,因为没有标准的工具,可以做到这一点。
在一个假设*尼克斯系统中的哪一个需要写允许在一个文件中删除它,有一个解决方案涉及fchmod().但是系统的,表现出这种行为Windows系统。
解决方案
你有没有尝试过使SeBackupPrivilege和SeRestorePrivilege,让管理员来放松很多的安全检查?
你可能会找到 这个新闻组螺纹 有帮助的。
编辑:做它没有权限,以及没有创造一个竞争条件,将需要分布链接支持本在Vista以上。顺便说一句,你可以设定的属性使用处理,通过FILE_BASIC_INFO到 SetFileInformationByHandle, ,这可以交易,请参见附注。或者您可以使用FindFirstFileName找到另一个艰苦的链接到同一文件,该文件没有被删除,其设置只读。
其他提示
谢谢你Ben Voigt:
#include <windows.h>
int main(int argc, char **argv)
{
while (*++argv) {
HANDLE h;
DWORD attrs;
attrs = GetFileAttributes(*argv);
SetFileAttributes(*argv, attrs & ~FILE_ATTRIBUTE_READONLY);
h = CreateFile(*argv, GENERIC_READ|GENERIC_WRITE, 7, NULL, OPEN_EXISTING,
FILE_FLAG_DELETE_ON_CLOSE, NULL);
SetFileAttributes(*argv, attrs);
if (h != INVALID_HANDLE_VALUE) {
CloseHandle(h);
}
}
}
这是不可能的。硬链路只是另一名为文件;你可以有很多硬联系,但只有一个基本文件的目的(数据、安全描述、属性文件的时间,等等)。如果该文件的目的只读设定的属性,那么任何硬的链接,通过的定义也会有属性设置。
不隶属于 StackOverflow