gpt4 book ai didi

c# - 授予远程用户(非管理员)使用 WMI 和 C# 枚举命名空间 cimv2 中 Win32_Service 中的服务的能力

转载 作者:行者123 更新时间:2023-11-30 12:17:22 26 4
gpt4 key购买 nike

我正在创建一个看门狗服务,它将监视各种远程服务器(都在同一个域中)上的其他服务。我用来连接远程服务器的用户不是管理员。当我尝试枚举 Win32_Service 类中的服务时,出现拒绝访问错误。

我已授予用户“远程启用”和“启用帐户”权限以访问 WMI 控件中的 Root\CIMV2 命名空间。

我可以使用以下代码连接到服务器。对象 ServiceListItem 只是一个包含服务器名称和服务名称的简单类:

SecureString secureString = new SecureString();

foreach ( char c in "password" )
{
secureString.AppendChar( c );
}

ConnectionOptions connectionOptions = new ConnectionOptions();

connectionOptions.Username = "domain\\user";
connectionOptions.SecurePassword = secureString;

foreach ( ServiceListItem service in _serviceList )
{
ManagementScope managementScope = new ManagementScope();
managementScope = new ManagementScope( String.Format( @"\\{0}\root\cimv2", service.ServerName ), connectionOptions );
managementScope.Connect();

//RelatedObjectQuery relatedObjectQuery = new RelatedObjectQuery( String.Format( "Win32_Service.Name='{0}'", service.ServiceName ) );
//ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher( managementScope, relatedObjectQuery );

ObjectQuery objectQuery = new ObjectQuery( "SELECT * FROM Win32_Service WHERE Name = '" + service.ServiceName + "'" );
ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher( managementScope, objectQuery );

ManagementObjectCollection objectCollection = objectSearcher.Get();

foreach ( ManagementObject managementObject in objectCollection )
{
serviceStatus = managementObject.Properties["State"].Value.ToString();
Debug.Print(service.ServiceName + " - " + serviceStatus);
//break;
}
}

managementScope.Connect() 运行良好,这意味着 cimv2 上的 wmi 安全设置正确。但是,当我尝试枚举 objectCollection 时,出现“拒绝访问”异常。这告诉我(我认为)用户没有权限枚举 Win32_Service 类 (SC_MANAGER_ENUMERATE_SERVICE)。

我只是没能找到任何关于如何为远程用户启用该权限的好例子。在使用 Windows api 进行编码方面,我不是很有经验,所以请在您的回答中尽可能详细:)

最佳答案

今天我自己也试图找到相同的答案,我一直在谷歌搜索。经过半个小时的咒语,我找到了this MSDN article (907460)它使用 sc sdet。到目前为止它似乎工作正常,即使安全描述符是针对 Windows Server 2003 的。我发现你可以执行 sc sdshow SCMANAGER 来获取当前值,所以明天回到办公室时我会比较对比以确保我没有锁定一些我不应该锁定的东西:-)

为了完整起见,KB907460 中的注释(以防它移动/消失):

Symptoms: After you install Microsoft Windows Server 2003 Service Pack 1 (SP1), non-administrators cannot remotely access the Service Control Manager.

Cause: Windows Server 2003 SP1 changes the Service Control Manager default security settings.

Resolution: To resolve this issue, use version 5.2.3790.1830 of the Sc.exe tool. This tool is located in the %windir%\System32 folder. To do this, follow these steps:

  • Click Start, click Run, type cmd, and then click OK.
  • Type the following command at the command prompt, and then press ENTER:

    sc sdset SCMANAGER D:(A;;CCLCRPRC;;;AU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

关于c# - 授予远程用户(非管理员)使用 WMI 和 C# 枚举命名空间 cimv2 中 Win32_Service 中的服务的能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3917477/

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