RW доступ к общей папке Windows с использованием различных учетных данных пользователя в .NET - PullRequest
4 голосов
/ 18 мая 2010

Мы работаем в сети Windows (используется AD)
У нас есть общая папка для пользователя (доступ ограничен только для этого пользователя) Учетные данные пользователя известны Мне нужен доступ к этой папке внутри моего приложения.

Примечание. Я читал о Олицетворение , но я могу открыть все приложение в новом пользовательском контексте (но мне нужно работать как зарегистрированный пользователь, просто получить доступ к общей папке Windows от имени на другого пользователя)

Возможно ли это? Часть кода оценена ..

1 Ответ

3 голосов
/ 24 июня 2010

Я, наконец, справился с этим, и это приносит мне вред!
Для тех, кто заинтересован - пожалуйста, найдите пример метода, выполняющего работу (обратите внимание, вам нужен System.Security.Principal + Interop, также необходимо добавить некоторые статические методы API)

    public const int LOGON32_LOGON_INTERACTIVE = 2;
    public const int LOGON32_PROVIDER_DEFAULT = 0;

    public bool ImpersonateUser( string userName, string domain, string password ) {
        WindowsIdentity tempWindowsIdentity;
        IntPtr token = IntPtr.Zero;
        IntPtr tokenDuplicate = IntPtr.Zero;

        if (RevertToSelf ()) {
            if (LogonUserA ( userName, domain, password, LOGON32_LOGON_INTERACTIVE,
                LOGON32_PROVIDER_DEFAULT, ref token ) != 0) {
                if (DuplicateToken ( token, 2, ref tokenDuplicate ) != 0) {
                    tempWindowsIdentity = new WindowsIdentity ( tokenDuplicate );
                    impersonationContext = tempWindowsIdentity.Impersonate ();
                    if (impersonationContext != null) {
                        CloseHandle ( token );
                        CloseHandle ( tokenDuplicate );
                        return true;
                    }
                }
            }
        }
        if (token!= IntPtr.Zero)
            CloseHandle ( token );
        if (tokenDuplicate!=IntPtr.Zero)
            CloseHandle ( tokenDuplicate );
        return false;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...