Я получаю неопределенную ошибку «Отказано в доступе» при использовании команды .Dump при олицетворении специальной учетной записи администратора.
У меня также есть специальная учетная запись администратора на моем ПК.Я попытался создать и удалить файл, в котором находится linqpad, и это прекрасно работает.
void Main()
{
string[] criticalFileExtensions = { ".dat", ".pn", ".json", ".sts3", ".lst", ".xml", ".fin", ".brd" };
Util.ProgressBar _overallProgressBar = new Util.ProgressBar("Init").Dump();
StsInfo.OnOverallProgressChanged += (string name, int percentage) =>
{
_overallProgressBar.Caption = name;
_overallProgressBar.Percent = percentage != 0? percentage: 1;
};
}
public class ImpersonateUser
{
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;
const string ACTIVE_DIRECTORY_ADDRESS = "ad.selinc.com";
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
static extern bool LogonUser(string userName, string domain,
string password, int logonType, int logonProvider,
ref IntPtr accessToken);
string _username;
string _password;
IntPtr accessToken = IntPtr.Zero;
WindowsImpersonationContext impContext;
public ImpersonateUser(string username, string password)
{
_username = username;
_password = password;
}
public void Enable()
{
bool success = LogonUser
(
_username, // username to log on.
ACTIVE_DIRECTORY_ADDRESS, // connection
_password, // user's password.
LOGON32_LOGON_INTERACTIVE, // create an interactive login.
LOGON32_PROVIDER_DEFAULT, // use the default logon provider.
ref accessToken // receives access token handle.
);
if (!success)
{
throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
}
WindowsIdentity identity = new WindowsIdentity(accessToken);
impContext = identity.Impersonate();
}
public void Disable()
{
impContext.Undo();
}
public string GetCurrentUser()
{
return WindowsIdentity.GetCurrent().Name;
}
}
Я мог бы ожидать вызова этого StsInfo.OnOiversalProgressChanged столько раз, сколько хотелось бы, но послеНа первый взгляд случайное количество вызовов вызывает ошибку доступа