5

以下功能适用于 windows XP,现在我在 windows 7 上尝试它返回 IdentityNotMappedException 错误有什么问题?我还将应用程序请求的执行级别更改为管理员。

private static void file_accessdeny(string fileName)
{
    try
    {
        System.Security.AccessControl.FileSecurity accessdeny = System.IO.File.GetAccessControl(fileName);
        accessdeny.SetAccessRule(new System.Security.AccessControl.FileSystemAccessRule("Everyone", System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Deny));
        System.IO.File.SetAccessControl(fileName, accessdeny);
    }
    catch (System.Exception E)
    {
        Console.WriteLine(E.Message);
        System.Windows.Forms.MessageBox.Show(E.Message, "access deny");
    }
}

错误:System.Security.Principal.IdentityNotMappedException:无法翻译部分或全部身份引用

4

1 回答 1

10

在您的代码中尝试此操作:

accessdeny.SetAccessRule(
   new System.Security.AccessControl.FileSystemAccessRule(
   new SecurityIdentifier(WellKnownSidType.WorldSid, null),
   System.Security.AccessControl.FileSystemRights.FullControl,
   System.Security.AccessControl.AccessControlType.Deny));

错误消息显示“无法翻译” - 这是 Windows 告诉您,当它试图为“每个人”组(即翻译)查找 SID 时......它无法通过该名称找到它。

原因之一是当您在不同的语言环境下运行 Windows 时。例如,在德语中,该组被称为“Jeder”。

于 2012-08-31T12:59:37.257 回答