私はそれにMicrosoft.Win32.RegistryKey.OpenRemoteBaseKeyを()を使用することができますので、どのように私はマシンに資格情報を渡すのですか?

StackOverflow https://stackoverflow.com/questions/2541504

質問

この.NET API には、[OK]を動作します私は私は(と私のログオンしているユーザーは、ターゲット・マシンの管理者権限を持っている)と同じドメイン内のマシンでレジストリを開くしようとしています。

それは(私がパスワードを持っている人の)異なる、ローカルの管理者ユーザーとアウトオブドメインマシンの場合、それがトリッキー取得します。

私は WNetUseConnection()を使用しようとしました>前OpenRemoteBaseKey()を呼び出すには(私が望んでいたことは、リモートディスクファイルを読み込むことだった状況で、過去にも私を務めていた)が、ないサイコロを - 。私はアクセス拒否の例外を取得していない

明らかに、私は資格情報にいくつかの他の方法を渡す必要がありますが、どのように?

役に立ちましたか?

解決

私は、コンピュータ上のアクセスファイルに正常に使用してきたことは、次のコードです。

    #region imports 
        [DllImport("advapi32.dll", SetLastError = true)] 
        private static extern bool LogonUser(string 
        lpszUsername, string lpszDomain, string lpszPassword, 
        int dwLogonType, int dwLogonProvider, ref 
IntPtr phToken); 


        [DllImport("kernel32.dll", CharSet = CharSet.Auto, 
        SetLastError = true)] 
        private static extern bool CloseHandle(IntPtr handle 
        ); 

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, 
        SetLastError = true)] 
        public extern static bool DuplicateToken(IntPtr 
        existingTokenHandle, 
        int SECURITY_IMPERSONATION_LEVEL, ref IntPtr 
        duplicateTokenHandle); 
        #endregion 
        #region logon consts 
        // logon types 
        const int LOGON32_LOGON_INTERACTIVE = 2; 
        const int LOGON32_LOGON_NETWORK = 3; 
        const int LOGON32_LOGON_NEW_CREDENTIALS = 9; 

        // logon providers 
        const int LOGON32_PROVIDER_DEFAULT = 0; 
        const int LOGON32_PROVIDER_WINNT50 = 3; 
        const int LOGON32_PROVIDER_WINNT40 = 2; 
        const int LOGON32_PROVIDER_WINNT35 = 1; 
        #endregion 

そして一部に署名するために、ちょうど使用します:

        IntPtr token = IntPtr.Zero; 

        bool isSuccess = LogonUser("username", "domain", "password", 
        LOGON32_LOGON_NEW_CREDENTIALS, 
        LOGON32_PROVIDER_DEFAULT, ref token); 
        using (WindowsImpersonationContext person = new WindowsIdentity(token).Impersonate()) 
        { 
        //do your thing 
         person.Undo(); 
        } 
あなたが見るかもしれませんが、

、「元に戻す()は、」あなたはもはや、そのユーザーとしてサインインしていることを確認しません。あなたが行っている前だから、それを使用しないでください。しかし、それを使用することを忘れないでください!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top