using System; |
using System.IO; |
using System.Runtime.InteropServices; |
using System.Security.Principal; |
namespace LogonUser |
{ |
class Class1 |
{ |
private const int LOGON32_LOGON_INTERACTIVE = 2; |
private const int LOGON32_LOGON_NETWORK_CLEARTEXT = 3; |
private const int LOGON32_PROVIDER_DEFAULT = 0; |
[DllImport("advapi32.dll", CharSet = CharSet.Auto)] |
static extern int LogonUser(string lpszUserName, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); |
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] |
static extern int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken); |
[STAThread] |
static void Main(string[] args) |
{ |
string UserName = "логин к папке"; |
string Password = "пароль как папке"; |
// Для сохранения текущей имперсонации |
WindowsImpersonationContext impersonationContext = null; |
try |
{ |
// Имперсонируем другого пользователя |
WindowsIdentity newIdentity; |
IntPtr token = IntPtr.Zero; |
IntPtr tokenDuplicate = IntPtr.Zero; |
if (LogonUser(UserName, Environment.MachineName, Password, |
LOGON32_LOGON_NETWORK_CLEARTEXT, LOGON32_PROVIDER_DEFAULT, ref token) != 0) |
{ |
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0) |
{ |
newIdentity = new WindowsIdentity(tokenDuplicate); |
// При имперсонации возвращается текущее значение |
impersonationContext = newIdentity.Impersonate(); |
} |
} |
} |
catch (Exception Ex) |
{ |
Console.WriteLine("Ошибка имперсонации пользователя {0}: {1}", UserName, Ex); |
} |
// Новая имперсонация |
WindowsIdentity wi1 = WindowsIdentity.GetCurrent(); |
Console.WriteLine("Name={0} --> {1}", wi1.Name, wi1.IsAuthenticated); |
// Действие |
string[] files = Directory.GetFiles(@"\\10.0.0.71\install\"); |
Console.WriteLine("--- Files: ---"); |
foreach (string name in files) |
{ |
Console.WriteLine(name); |
} |
// Возвращаем предыдущую имперсонацию |
if (impersonationContext != null) |
impersonationContext.Undo(); |
Console.ReadKey(true); |
} |
} |
}, |
среда, 1 июля 2015 г.
C# доступ к сетвой папке по имени пользователя и паролю
Подписаться на:
Комментарии к сообщению (Atom)
Nginx + Let's Crypt
Шаг 1. Установка Certbot # apt-get install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing...
-
По памяти: После установки Debian 12 Шаг 1. Обновляем систему с применением обновлений: #> apt-get update && apt-get upgrade -y ...
-
using System; using System.IO; using System.Runtime.InteropServices; using System.Security.Principal; namespace LogonUser { ...
-
Дистрибутив (файл OracleXE112_Win32.zip) можно взять на официальном сайте корпорации Oracle (требуется регистрация): http://www.orac...
Комментариев нет:
Отправить комментарий