Как выдать себя за зарегистрированного пользователя? - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужно выдать себя за зарегистрированного пользователя. Требуется из-за контекста безопасности PS.

Позвольте мне объяснить. У меня один выигрышный сервис. И одна библиотека DLL со всей логикой. И два разных клиента (.exe и ps) которые используют этот сервис через dll.

Когда я запускаю .exe и вызываю win service все отлично. Но когда я начинаю PS и попробуйте использовать тот же метод обслуживания Win с теми же аргументами это дает мне эту ошибку: (а также я запускаю exe и ps с тем же пользователем на одной машине)

Либо требуемый уровень олицетворения не был предоставлен, либо предоставленный уровень олицетворения недействителен.

На самом деле я пытаюсь использовать текущую учетную запись для олицетворения. Итак, я нашел следующий метод:

function ImpersonateLoggedOnUser
{
param
    (
        [Parameter(Mandatory = $true)]
        [IntPtr]
        $TokenHandle
    )

    $SUCCESS = $Advapi32::ImpersonateLoggedOnUser($TokenHandle); $LastError = [Runtime.InteropServices.Marshal]::GetLastWin32Error()

    if(-not $SUCCESS)
    {
        throw "ImpersonateLoggedOnUser Error: $(([ComponentModel.Win32Exception] $LastError).Message)"
    }
}

Но я не могу это назвать. Это дает мне следующую ошибку: Вы не можете вызвать метод для выражения с нулевым значением.

...