2017-06-13 24 views
0

OpenMutexを使用して、フルパス修飾によって名前付きミューテックスを開いたりクエリしたりできますか?例えば:完全修飾パスで名前付きミューテックスを開く

HANDLE hHandleMutex = OpenMutex(READ_CONTROL, FALSE, 
      "\\Sessions\\1\\BaseNamedObjects\\SmartScreen_AppRepSettings_Mutex"); 

しかし、この関数はNULLを返し、エラー161で失敗(ERROR_BAD_PATHNAME:指定されたパスが無効です)。はい、ドキュメントには\\Global\\Local接頭辞についての説明があり、これらの完全なオブジェクト名については何も記載していません。ただし、MSDNにはすべてが記載されていません

ドキュメント化されていないAPI NtQuerySystemInformationNtQueryObjectを使用して同じクエリをクエリできます。しかし、それはプロセスを開くこと、トークンを複製することなどを必要とします。私はこれらのAPIを非常によく使うことができますが、単純な解決策が必要でした。

プロセスがSYSTEMアカウントとして実行されていると仮定すると、エラー5(アクセス拒否)は問題にはなりません。それが問題なら、私はそれを処理することができます。

+1

あなたが必要とするか、または\\場合、または完全なパスをしたいを招くことなく、 'セッション\\ 1 \\ SmartScreen_AppRepSettings_Mutex'を使用する - ' ZwOpenMutant' – RbMm

+0

'OpenMutex'は' \セッション\ \ BaseNamedObjects'または唯一の '\ BaseNamedObjects'に見えました。両方のディレクトリに '\ BaseNamedObjects \ Session'と' \ Sessions \ 1 \ BaseNamedObjects \ Session'というシンボリックリンクがあり、 '\ Sessions \ BNOLINKS'を指しています。ここにはセッションごとの' BaseNamedObjects'ディレクトリへの別のシンボリックリンクがあります。なぜなら、この "Session \\" '接頭辞が働いていたからです。または他の方法ではネイティブAPI 'ZwOpenMutant'を使用します - この場合は任意のパスを自由に使用します – RbMm

+0

要するに、OpenMutexは、(カーネルに見られるような)生のパスを無効にする方法で与えられたパスを処理します。そうではありません。あなたはOpenMutexに意味のあるパスを使用する必要があります。 –

答えて

3

間違ったパスを使用しています。それは次のようになります。

"Session\\1\\SmartScreen_AppRepSettings_Mutex" 

documentationSession\接頭辞が使用「システムのために確保される」と述べています。買い手責任負担。

+0

私は恐れますが、それは正しいDavidではありません。私はProcess ExplorerがExplorer.EXEに示す '' \\ Sessions \\ 1 \\ BaseNamedObjects \\ SessionImmersiveColorMutex "と' 'Sessions \\ 1 \\ BaseNamedObjects \\ SessionImmersiveColorMutex"の両方を試しました。どちらも同じエラーで失敗します。161. – Ajay

+2

正しいです。ここでうまく動作します。答えを慎重に読んでもらえませんか?私の答えからパスを貼り付けてみてください。これはあなたのコメントに記載されているものとは異なります。これまでの質問でもこれを行いました。 –

+0

はい、それは "セッション\ 1"ではありませんが、 "セッション1"などではありません。つまり、プロセスエクスプローラで示されているように完全なパスでは機能しません。おそらくOSは「Session \ 1」のマッピングを行っています。 – Ajay

関連する問題