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: 一部またはすべての ID 参照を変換できませんでした

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 が「Everyone」グループの SID を見つけようとしたとき (つまり、翻訳)、その名前で見つけられなかったことを示しています。

その理由の 1 つは、異なるロケールで Windows を実行している場合です。たとえばドイツ語では、このグループは代わりに「Jeder」と呼ばれます。

于 2012-08-31T12:59:37.257 に答える