返回
外部驱动器 Windows 权限设置全攻略:解决访问权限被拒
windows
2024-06-14 12:48:26
如何在外部驱动器上设置 Windows 权限
前言
在访问来自不同操作系统的外部驱动器时,你可能会遇到权限被拒绝的问题。本文将指导你一步步解决此问题,让你在外部驱动器上获得完全访问权限。
问题
你有一个来自运行 Windows XP 的电脑的外部驱动器。当你使用扩展坞将驱动器连接到运行 Windows 10 Professional 的笔记本电脑时,你会在尝试访问“我的文档”和“我的设置”文件夹时收到权限被拒绝的提示。
解决方法
步骤 1:检查驱动器所有者
- 在“此电脑”中找到外部驱动器。
- 右键单击驱动器并选择“属性”。
- 查看“常规”选项卡中的“所有者”部分,检查当前所有者是否是你。
- 如果所有者不是你,请单击“编辑”并授予自己所有权。
步骤 2:启用继承
- 在“属性”窗口中切换到“安全性”选项卡。
- 单击“高级”按钮。
- 在“高级安全设置”窗口中,切换到“继承”选项卡。
- 勾选“将从父容器继承的权限添加到此对象”复选框。
- 单击“应用”和“确定”保存更改。
步骤 3:授予自己完全控制权
- 在“安全性”选项卡中,单击“编辑”按钮。
- 在“权限”窗口中,单击“添加”按钮。
- 输入你的用户名并选择“完全控制”权限。
- 单击“确定”保存更改。
示例代码
// 以下代码演示了如何以编程方式设置权限
// 替换 driveNumber 为实际驱动器号
HANDLE hDrive = CreateFile(
"\\\\.\\PHYSICALDRIVE" + driveNumber,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
// 设置驱动器所有者
PACL pAcl;
DWORD dwAclSize;
if (GetFileSecurity(
hDrive,
OWNER_SECURITY_INFORMATION,
NULL,
0,
&dwAclSize
) == ERROR_INSUFFICIENT_BUFFER) {
pAcl = malloc(dwAclSize);
if (!GetFileSecurity(
hDrive,
OWNER_SECURITY_INFORMATION,
pAcl,
dwAclSize,
&dwAclSize
)) {
CloseHandle(hDrive);
free(pAcl);
return false;
}
}
PSID pCurrentUserSid;
if (!AllocateAndInitializeSid(
&SID_IDENTIFIER_AUTHORITY_NT,
1,
SECURITY_NT_AUTHORITY,
0,
0,
0,
0,
0,
0,
0,
&pCurrentUserSid
)) {
CloseHandle(hDrive);
free(pAcl);
return false;
}
SetSecurityDescriptorOwner(
pAcl,
pCurrentUserSid,
FALSE
);
if (!SetFileSecurity(
hDrive,
OWNER_SECURITY_INFORMATION,
pAcl
)) {
CloseHandle(hDrive);
free(pAcl);
free(pCurrentUserSid);
return false;
}
// 授予自己完全控制权
// 以下代码添加一个新的 ACE,授予当前用户对驱动器的完全控制权限
EXPLICIT_ACCESS ea = {0};
ea.grfAccessPermissions = GENERIC_ALL;
ea.grfAccessMode = SET_ACCESS;
ea.grfInheritance = NO_INHERITANCE;
ea.Trustee.pMultipleTrustee = NULL;
ea.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
ea.Trustee.TrusteeForm = TRUSTEE_IS_USER;
ea.Trustee.TrusteeType = TRUSTEE_IS_NAME;
if (!GetUserName(ea.Trustee.ptstrName, &ea.Trustee.ptstrName)) {
CloseHandle(hDrive);
free(pAcl);
free(pCurrentUserSid);
return false;
}
DWORD dwNewAclSize = dwAclSize + sizeof(EXPLICIT_ACCESS);
pAcl = realloc(pAcl, dwNewAclSize);
if (!SetEntriesInAcl(1, &ea, dwAclSize / sizeof(EXPLICIT_ACCESS), pAcl)) {
CloseHandle(hDrive);
free(pAcl);
free(pCurrentUserSid);
return false;
}
if (!SetFileSecurity(
hDrive,
DACL_SECURITY_INFORMATION,
pAcl
)) {
CloseHandle(hDrive);
free(pAcl);
free(pCurrentUserSid);
return false;
}
CloseHandle(hDrive);
free(pAcl);
free(pCurrentUserSid);
结论
通过按照上述步骤操作,你可以授予自己外部驱动器上所有文件夹和文件访问权限。现在,你可以轻松访问和管理驱动器上的内容,无需担心权限问题。
常见问题解答
-
为什么我会收到权限被拒绝的提示?
- 这是因为外部驱动器可能来自不同的操作系统,并且其权限设置与你的当前操作系统不兼容。
-
我可以在不授予自己所有权的情况下更改权限吗?
- 通常情况下,你需要具有驱动器的所有权才能更改权限。
-
授予自己完全控制权是否安全?
- 是的,如果你有必要完全访问外部驱动器上的所有内容,授予自己完全控制权是安全的。
-
是否可以使用命令行来设置权限?
- 是的,你可以使用 Windows PowerShell 或命令提示符来设置权限。
-
如果上述步骤不起作用,我该怎么办?
- 请检查你是否按照所有步骤操作,并确保你拥有外部驱动器的所有权。如果问题仍然存在,你可能需要联系 Windows 支持。