为什么仅其他用户的某些进程的 WMI Win32_Process CommandLine 属性为 null?

Mas*_*r_T 5 c# wmi command-line win32-process

我使用此 C# 代码来获取正在运行的进程的命令行参数:

public static void GetProcessesCommandLine(string processName)
{
    string query = $@"SELECT CommandLine,ProcessId FROM Win32_Process WHERE Name = '{processName}'";

    using (var searcher = new ManagementObjectSearcher(query))
    using (var collection = searcher.Get())
    {
        foreach (ManagementObject item in collection)
        {
            Console.WriteLine($"--- TESTING PROCESS {item["ProcessId"]} ---");

            var commandLine = item["CommandLine"];
            if(commandLine == null)
            {
                Console.WriteLine("WARNING: command line is NULL");
            }
            else
            {
                Console.WriteLine($"CommandLine is: {commandLine}");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,在某些情况下,命令行属性结果为 NULL,我很难理解这种情况何时以及为何发生。

最初我认为这与运行代码的用户有关,并且对于不属于该用户的进程,命令行为 NULL。然而,经过进一步测试,情况似乎并非如此。例如,我这里有以下情况:

在此输入图像描述

如您所见,我有 4 个实例,explorer.exe全部由 user 启动edsep,并且如果我以 user 身份运行上面的代码,edsep我会正确获取所有命令行。但是,如果我以其他用户身份运行代码,这就是我得到的输出:

在此输入图像描述

正如您所看到的,命令行不仅仅NULL位于四个进程之一上。这里发生了什么?为什么这个过程特别有效而其他过程却不起作用?这里有什么规则?

编辑:另一个测试,因为对使用 explorer.exe 进行测试存在一些疑问。这里我有几个在 user 下运行的 Chrome 实例edsep

在此输入图像描述

如果我以不同的用户身份运行上面的代码,我会得到以下结果:

在此输入图像描述

正如您所看到的,我只获得了 15 个进程中的 3 个(显然是随机的?)进程的命令行...为什么?