2012-08-06 18 views
5

Belirli bir Visual Studio örneğini DTE almak için çalışan nesne tablosunu kullanıyorum. MSDN'da açıklanan tekniği kullanmak niyetindeydim. Listelenecek örneklerden birini almayı başardım, ama diğerlerini değil.Çalışan Nesneyi Anlamak Tablo

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); 

Burada sonuçları:

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} 

ben yanlış yapıyorum VisualStudio.DTE ile birden fazla satır görmek için beklenebilir? Ne görmeyi beklemeliyim?

Düzenleme:

Bu uygulama yükseltilmiş ayrıcalıklar çalışır durumda olup olmadığını bağlı gözükmektedir. Eğer tutarlı ve normal mod kullanırsam çalışır. Bununla birlikte, bunun işe yaramasını isterdim, tüm süreçler için ROT'yi nasıl alabilirim?

+0

Gayet iyi çalışıyor görecekti. –

+1

başka bir örneği yükseltiyor musunuz? yükseltilmiş mi? –

+0

@HansPassant sonuçlarınızda ne görüyorsunuz? –

cevap

8

Yükseltilmiş başka bir örneği mi çalıştırıyorsunuz? Üstü yükseltiyor musun?

Standart kullanıcı olarak çalışan bir işlem olduğunuzda, yalnızca size ait olan işlemleri/etc görebilirsiniz. Böylece yönetici olarak çalışan işlemler göremezsiniz.

Yükseltilmiş hak sahipleriyle çalışırken, tüm kullanıcılara ait tüm işlemleri görebilirsiniz.

İdeal olarak, her şey her zaman "en az ayrıcalıklı kullanıcı" olarak çalışacak bunu denediğinizde http://en.wikipedia.org/wiki/Principle_of_least_privilege

+0

Herhangi bir açıklama? Farklı ayrıcalıklar için GetRunningObjectTable'ın davranışı nedir? –

+1

Hiç kullanamayacağınız arabirim işaretçileri döndürmeyi tercih eder misiniz? –

+0

@HansPassant, özlü yorumuyla oldukça akıllıca olsa da, daha bilgilendirici bir cevap, güvenlik ve süreç izolasyonundan bahsedebilir, daha açık bir şekilde, bir ayrılmamış sürecin yükseltilmiş bir işlemi yürütmesine izin vermesi, izinsiz sürecin izin verilmeyen şeyleri yapmasına izin verebilir yap. Buna "ayrıcalık yükseltme" denir ve Kötü Bir Şey. – x0n