Есть ли альтернативы LsaLogonUser для олицетворения данной учетной записи для доступа к сетевым ресурсам? Я ищу метод олицетворения, который позволил бы мне вызывать удаленный компьютер через UNC в том же домене.
Для исходных данных у меня есть: домен \ имя пользователя.
У меня нет пароля, потому что для этого я использую LsaRegisterLogonProcess и LsaLogonUser с пакетом Kerberos. Локально все работает, и я могу олицетворять и вызывать приложения, используя другое имя пользователя, однако, при попытке получить доступ к удаленной машине с помощью .. \\ remotemachine \ shared \ somefile.bat У меня отказано в доступе.
Обычно я вызываю cmd.exe как команду …, а затем открывается консоль с новым пользователем, но если попытка вызвать путь UNC, доступ запрещен.
Если я открою базовую консоль своим собственным пользователем, я успешно выполню этот UNC-путь. Не папка разрешений, потому что это общедоступный общий ресурс.
Это часть моего рабочего кода:
...
NTSTATUS Status = STATUS_SUCCESS;
LSA_OPERATIONAL_MODE unused;
LSA_STRING lsaString;
lsaString.Buffer = "User Impersonated LogonProcess";
lsaString.Length = strlen(lsaString.Buffer);
lsaString.MaximumLength = lsaString.Length + 1;
Status = LsaRegisterLogonProcess(&lsaString, &lsa, &unused);
if (Status != STATUS_SUCCESS) {
printf("LsaRegisterLogonProcess failed: %x\n", Status);
}
...
NTSTATUS status = LsaLogonUser(
lsa,
&origin,
Network,
packageId,
authInfo,
authInfoSize,
0,
&source,
&profileBuffer,
&profileBufLen,
&luid,
&token,
&qlimits,
&subStatus
);
if (status != ERROR_SUCCESS)
{
ULONG err = LsaNtStatusToWinError(status);
printf("LsaLogonUser failed: %x\n", status);
return 1;
}
...
DuplicateTokenEx(token, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &tokenDuplicate);
if (CreateProcessWithTokenW(
tokenDuplicate,
LOGON_WITH_PROFILE,
command,
command_arguments,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi))
{
pi.hThread = NULL;
pi.hProcess = NULL;
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
Задача ещё не решена.
Других решений пока нет …