我需要冒充登录用户。 由于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)"
}
}
但我不能称之为。 它给了我以下错误: 您不能在空值表达式上调用方法。