gpt4 book ai didi

c# - 如何验证 COM 对象可以在另一个用户下实例化?

转载 作者:行者123 更新时间:2023-12-03 03:18:39 25 4
gpt4 key购买 nike

我有以下设置。有一个 Azure Web 角色进程 (WaIISHost.exe) 正在提升运行,并且有一个 IIS7 应用程序池在本地用户下运行。首次运行时,提升的 WaIISHost.exe 会创建本地用户。还有一个向 DCOM 注册的进程外 COM 对象。

我想确保 IIS 进程能够实例化 COM 对象。所以我需要以某种方式在本地用户下登录并尝试实例化 COM 对象。

我当前的方法是通过 P/Invoke 调用 LogonUser() (请求交互式登录),获取登录 token ,然后启动一个新线程并从该线程调用 ImpersonateLoggedOnUser() 切换到另一个用户,一旦完成,另一个线程就会尝试实例化 COM 对象。

一切都很好,除了 the interactive logon is only for Administrators by default now所以我的方法不再有效 - 我明白

Logon failure: the user has not been granted the requested logon type at this computer

但是,如果我跳过检查,IIS 稍后就会实例化 COM 对象。

所以我需要更改我的验证代码。

一种选择是尝试向用户添加所需的权限(交互式登录),但这需要大量的 P/Invoke 代码,而且 Microsoft 可能会在某个时候更改其他内容,并且完全不允许我调整权限。

是否有另一种方法来验证 COM 对象是否可以从另一个用户帐户下成功实例化?

最佳答案

这不是一个通用的答案,但适合这个特定的场景。一种可能的解决方案是在 IIS 中实现一个仅接受本地请求的特殊 URL(检查 HttpRequestBase.IsLocal )并尝试实例化 COM 对象。之前尝试模拟的代码现在将向该 URL(在同一台计算机上)发送 HTTP 请求。

关于c# - 如何验证 COM 对象可以在另一个用户下实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17242334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com