模拟本地机器失败时的模拟

时间:2015-09-09 14:59:42

标签: c# impersonation

问题:

我有使用模拟检查单独服务器上的服务状态的Windows服务,但是在测试期间注意到当用户提供本地计算机地址和无效的本地计算机帐户时,检查将继续打开服务控件经理并成功检索状态。我们的目标是只使用有效的本地计算机帐户。

守则: 模拟命名空间(包含用于设置模拟的方法(SoddingNetworkAuth):

mconcat [(f <$>), (g <$>).tail.reverse]

我为测试编写的控制台应用程序:

\x -> (fmap f x) ++ (((fmap g) . tail . reverse) x)

我正在运行Windows 8.1

2 个答案:

答案 0 :(得分:1)

这是因为你正在使用LOGON32_LOGON_NEW_CREDENTIALS

来自https://msdn.microsoft.com/en-us/library/windows/desktop/aa378184%28v=vs.85%29.aspx(强调我的):

  

此登录类型允许调用者克隆其当前令牌并为出站连接指定新凭据。新登录会话具有相同的本地标识符,但对其他网络连接使用不同的凭据。

“出站连接”部分很重要。这意味着对于本地连接,根本不使用提供的凭据。当前标识用于本地连接。

答案 1 :(得分:0)

我现在无法检查,但我遇到了类似的问题,这是由Logon方法中选定的LogonType / LogonProvider值引起的。您应该在控制台应用程序中试用它们,并使用适用于您的方案的组合。

另请参阅此方法的msdn文档:https://msdn.microsoft.com/en-us/library/windows/desktop/aa378184(v=vs.85).aspx