2012-04-02 11 views
2

私は、サービスのコンテキストで動作するDLLを作成しており、標準のwin32プロセスにロードすることができます。サービスのコンテキストで実行されているのか、標準のwin32プロセスのコンテキストで実行されているのかをどのように検出できますか?DLLがWindowsサービスのコンテキストで動作するかどうかを確認するにはどうすればよいですか?

+1

魔法で賢いことをしようとするDLLは後でひどく失敗する傾向があります。あなたはあなたがどんな状況にあるのかに基づいて、どういうふうに行動しますか?呼び出し元に明示的にDLLを適切なモードに設定させる方が良いでしょう。 –

+0

どのバージョンのWindowsですか? – hmjd

+1

サービス*は標準のWin32プロセスです。あなたが本当に*この問題で解決しようとしている問題を記述してください。 –

答えて

4

Session 0 Isolationによると、Vistaで導入された、Windowsサービスを決定するには、セッション0で実行プロセスがセッション0で実行されている場合は、ProcessIdToSessionId機能を使用できます。GUIについてあなたのコメントに関連して

DWORD session_id; 
if (ProcessIdToSessionId(GetCurrentProcessId(), &session_id)) 
{ 
    std::cout << "session_id=" << session_id << "\n"; 
} 
else 
{ 
    std::cout << "Failed : " << GetLastError() << "\n"; 
} 

を、リンクされたドキュメントから直接引用しないために:セッション0は、もはやユーザーセッションですので

、セッション0で実行されているサービスは、ビデオドライバにアクセスすることはできません。これは、サービスがグラフィックをレンダリングしようとする試みが失敗することを意味します。

+0

あなたは素晴らしいです。 – tzachi

関連する問題