0

ローカルマシン上の任意のユーザー名を取り込んで、そのユーザーが管理者かどうかを教えてくれる機能が欲しいのですが。WindowsIdentityを使用しようとしましたが、成功しませんでした。今、私はNetUserGetInfoを使おうとしています。問題は、常に2221を返すことです。Googleは、ユーザーが見つからないというエラーを通知します。問題は、サーバー名にnullを使用していることだと確信しています。しかし、これは大規模なネットワークのある職場です。ユーザーは1台のマシンでアカウントを作成し、このコードはそのマシンでのみ実行されます。では、サーバー名には何を入力する必要がありますか?

    [DllImport("Netapi32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
    private extern static int NetUserGetInfo(
        [MarshalAs(UnmanagedType.LPWStr)] string serverName,
        [MarshalAs(UnmanagedType.LPWStr)] string userName,
        int level,
        out IntPtr bufPtr
    );


    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct USER_INFO_1
    {
        [MarshalAs(UnmanagedType.LPWStr)]
        public string usri1_name;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string usri1_password;
        [MarshalAs(UnmanagedType.U4, SizeConst = 34)]
        public string usri1_password_age;
        [MarshalAs(UnmanagedType.U4, SizeConst = 34)]
        public string usri1_priv;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string usri1_home_dir;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string usri1_comment;
        [MarshalAs(UnmanagedType.U4, SizeConst = 34)]
        public string usri1_flags;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string usri1_script_path;
    }

...
public static bool IsAuthorizedUser(string userId) 
{
    IntPtr bufPtr;
        USER_INFO_1 u1 = new USER_INFO_1();
        int a = NetUserGetInfo(null, userId, 1, out bufPtr);
        if(a == 0)
        {
            u1 = (USER_INFO_1) Marshal.PtrToStructure(bufPtr, typeof (USER_INFO_1));
            Console.WriteLine(u1.usri1_name);
        }
        else
        {
            Console.WriteLine("a:"+a);
        }
4

1 に答える 1

0

まず、自分が何をしているのかを知る必要があります。管理者をどのように定義しますか?管理者と呼ばれるローカルグループがあります。これは、特定のマシンの管理者について話すときに人々が意味することです。これはどういう意味ですか?

ドメインの管理者を意味する場合もあります。この場合、ドメインがホストされている場所を知る必要があります。これは、それが要求しているサーバーです。あなたがこれが何であるかを持っていないか知らないなら、あなたはおそらくそれを必要としないでしょう。

いずれにせよ、これはおそらくあなたの口に出さない質問への答えです:

.NET / C#で、プロセスに管理者権限があるかどうかをテストします

于 2012-07-02T14:22:34.023 に答える