Может ли разъединенный поставщик WMI работать без повышения прав? - PullRequest
0 голосов
/ 31 октября 2019

Я собираюсь написать независимого поставщика WMI, чтобы мое приложение можно было отслеживать с помощью стандартных инструментов (вместо того, чтобы придумывать какой-то собственный протокол и затем писать плагин для приложения мониторинга). Я пытаюсь следовать примерам написания несвязанных провайдеров в .NET, но не могу заставить их работать без повышения прав.

Я в порядке с выполнением InstallUtil с повышенными правами во время установки, что и следовало ожидать, учитываяон должен установить файл MOF в систему. Когда приложение работает с повышенными правами, все работает, как и ожидалось, но я получаю WMIInfraException, когда я запускаю приложение без повышения прав.

Я читаю документацию и примеры и нигде не заметил, что несвязанные поставщики имеютчтобы запустить приложение с повышенными правами, поэтому я не уверен, что я делаю что-то не так или нахожусь в ограничении модели безопасности WMI или в ограничении библиотеки .NET.

  • можетразвязанный провайдер WMI будет использоваться без повышения прав?
  • , если это ограничение библиотеки .NET, будет ли он работать, если я реализую провайдера в C ++ / COM?
using System;
using System.ComponentModel;
using System.Management.Instrumentation;

[assembly: WmiConfiguration(@"root\myapp", HostingModel = ManagementHostingModel.Decoupled)]

[RunInstaller(true)]
public class MyInstaller : DefaultManagementInstaller { }

[ManagementEntity]
public class MyExampleClass
{
    [ManagementBind]
    public MyExampleClass(int id) { ID = id; }

    [ManagementKey]
    public int ID { get; }

    [ManagementProbe]
    public int MyProperty => 42;
}

class Program
{
    static object obj = new MyExampleClass(101);

    [MTAThread]
    static void Main()
    {
        try
        {
            InstrumentationManager.Publish(obj);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Provider Installation Failed:\n" + ex);
        }
        Console.WriteLine("\nPress any key to exit");
        Console.ReadKey(true);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...