了解正在运行的对象表

本文关键字:对象 运行 了解 | 更新日期: 2024-10-19 09:12:44

我正试图使用正在运行的对象表来获取DTE—Visual Studio的特定实例。我打算使用MSDN上描述的技术。我已经设法列出了其中一个实例,但没有列出其他实例。

public static void PrintRot()
{
    IRunningObjectTable rot;
    IEnumMoniker enumMoniker;
    int retVal = GetRunningObjectTable(0, out rot);
    if (retVal == 0)
    {
        rot.EnumRunning(out enumMoniker);
        IntPtr fetched = IntPtr.Zero;
        IMoniker[] moniker = new IMoniker[1];
        while (enumMoniker.Next(1, moniker, fetched) == 0)
        {
            IBindCtx bindCtx;
            CreateBindCtx(0, out bindCtx);
            string displayName;
            moniker[0].GetDisplayName(bindCtx, null, out displayName);
            Console.WriteLine("Display Name: {0}", displayName);
        }
    }
}
[DllImport("ole32.dll")]
private static extern void CreateBindCtx(int reserved, out IBindCtx ppbc);
[DllImport("ole32.dll")]
private static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot);

结果如下:

Display Name: !VisualStudio.DTE.11.0:7120
Display Name: clsid:331F1768-05A9-4DDD-B86E-DAE34DDC998A:
Display Name: !{7751A556-096C-44B5-B60D-4CC78885F0E5}
Display Name: c:'users'dave'documents'visual studio 2012'Projects'MyProj'MyProj.sln
Display Name: !{059618E6-4639-4D1A-A248-1384E368D5C3}

我希望看到带有VisualStudio的多行代码。DTE我做错了什么?我应该期待看到什么?

编辑:

这似乎与应用程序是否运行提升的权限有关。如果我是一致的,并使用正常模式,那么它工作。然而,不管怎样,我都希望它能工作,我如何获得所有流程的ROT?

了解正在运行的对象表

您是否正在运行另一个提升的实例?你在运行提升的exe吗?

当您是一个以标准用户身份运行的进程时,您只能看到属于您的进程等。因此,您不会看到以管理员身份运行的进程。

当使用升级的特权运行时,您可以看到属于所有用户的所有进程。

理想情况下,一切都将始终以"最低特权用户"的身份运行,请参阅http://en.wikipedia.org/wiki/Principle_of_least_privilege