gpt4 book ai didi

c# - 如何以编程方式更改 DCOM 配置标识

转载 作者:太空狗 更新时间:2023-10-29 22:02:06 25 4
gpt4 key购买 nike

有没有办法以编程方式获取有关启动 DCOM 应用程序标识的信息。请参阅所附图片以了解我的意思。

Screenshot with application properties from DCOM Config

我尝试使用 WMI

ManagementObjectSearcher s = new ManagementObjectSearcher(new ManagementScope(@"\\.\root\cimv2"), new ObjectQuery(
"select * from Win32_DCOMApplicationSetting where AppID='{048EB43E-2059-422F-95E0-557DA96038AF}'"))
ManagementObjectCollection dcomSett = s.Get();
var value = dcomSett.Cast<ManagementObject>().ToArray()
[0].Properties["RunAsUser"].Value;

但是“RunAsUser”属性为空。还尝试了 Interop.COMAdmin

COMAdmin.COMAdminCatalogClass catalog = (COMAdmin.COMAdminCatalogClass)new COMAdmin.COMAdminCatalog();
(COMAdmin.COMAdminCatalogCollection)catalog.GetCollection("Applications")

通过这种方式,我设法获得了在 MMC 的“组件服务”管理单元中的“COM+ 应用程序”节点下列出的应用程序:

COM+ applications

我是 COM、DCOM、COM+ 方面的新手,我确定我错过了一些重要的东西。

一段时间后,我发现了为什么我过去常常在第一种方法(ManagementObject)中得到 NULL。您将收到:

  • 如果身份当前设置为启动用户,则为 NULL>
  • “互动用户”如果是“互动用户”
  • 在第三个选项的情况下带有用户名的一些字符串(见第一张图片)

但我仍然需要一种方法来更改 MMC 中 DCOM Config 节点下的 Microsoft PowerPoint Slide 等项目的标识。

最佳答案

在 DCOM 配置中,如果您使用特定用户作为身份并且希望通过代码更新密码,则需要在本地安全机构 (LSA) 中进行更新。这可以通过 Windows API 调用实现。 MS 有一些用于名为 dcomperm 的实用程序的示例代码,您可以看到它们是如何在 C++ 中实现的。您可以在 C# 中进行相同的调用。请参阅 SetRunAsPassword 方法 here .他们正在使用 LsaOpenPolicy 方法来获取策略句柄并调用 LsaStorePrivateData 来更新密码。然后,他们将“作为批处理作业登录”访问权限添加到该帐户(但如果您只是更改密码,则不必这样做)。

This pinvoke.net 上的示例代码看起来像是在进行必要的调用,除了关于将登录授予批处理作业权限的可选部分。请注意 LSA 中的“ key ”格式为 SCM:{GUID-of-DCOM-object} 示例:SCM:{00000000-0000-0000-0000-000000000000}

哦,顺便提一下,如果您想更改 RunAs 用户本身(即用户名),您还需要直接在 Windows 注册表中更新它(据我所知,这是唯一的方法). DCOM 条目存储在 HKLM\SOFTWARE\Classes\AppID 下。您可以使用 WMI 或仅使用 .NET 中的注册表类来做到这一点。

关于c# - 如何以编程方式更改 DCOM 配置标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20426043/

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