0

我需要模拟登录用户。由于 ps 安全上下文,它是必需的。

让我解释。我有一个双赢的服务。还有一个具有完整逻辑的 dll 库。还有两个不同的客户端(.exe 和 ps)通过 dll 使用这个服务。

当我启动 .exe 并调用 win 服务时,一切正常。但是当我启动 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)"
    }
}

但我不能叫它。它给了我以下错误:您不能在空值表达式上调用方法。

4

0 回答 0