2012-08-06 1 views
5

実行中のオブジェクトテーブルを使用して、DTEにVisual Studioの特定のインスタンスを取得しようとしています。私はMSDNに記載されているテクニックを使用しようとしていました。私はそのインスタンスの1つを一覧表示するように管理しましたが、他のインスタンスは表示されませんでした。実行中のオブジェクトテーブルの理解

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を取得するにはどうしたらよいのですか?

+0

は細かい作品を参照、「少なくとも特権ユーザー」として実行します。 –

+1

あなたは別のインスタンスを昇格させていますか?あなたはこのexeを上回って走っていますか? –

+0

@HansPassantあなたの結果には何が表示されますか? –

答えて

8

あなたは別のインスタンスを昇格していますか? exeを実行していますか?

標準ユーザーとして実行しているプロセスでは、自分に属しているプロセス/ etcしか見ることができません。したがって、管理者として実行されているプロセスは表示されません。

エスカレートした権限で実行すると、すべてのユーザーに属するすべてのプロセスが表示されます。

理想的には、すべてが常に私はそれをしようとすると、http://en.wikipedia.org/wiki/Principle_of_least_privilege

+0

何か説明がありますか?さまざまな権限のGetRunningObjectTableの動作はどのような動作が期待されますか? –

+1

決して使用できないインターフェイスポインタを返すことをお勧めしますか? –

+0

@HansPassantは臆病なコメントではかなり賢明ですが、より有益な答えは、セキュリティとプロセスの分離、言い換えれば、不平等なプロセスが高められたプロセスを操作することを許して、不均衡なプロセスが行う。これは「特権エスカレーション」と呼ばれ、悪いことです。 – x0n

関連する問題