次の方法で共有


GetProcessReference 関数 (shlwapi.h)

SetProcessReference によって提供されるプロセス固有のオブジェクトを取得し、参照カウントをインクリメントしてプロセスを維持します。

構文

LWSTDAPI GetProcessReference(
  [out] IUnknown **punk
);

パラメーター

[out] punk

この関数が正常に返されるときに、 SetProcessReference によってプロセスに指定されたオブジェクトを指すポインターのアドレス。 このリソースが不要になった場合、アプリケーションはリソースを解放する必要があります。

フリースレッド IUnknown へのポインター。 コンポーネントでは、このインターフェイス ( SHGetInstanceExplorer 経由) を使用して、ホスト プロセスが終了しないようにすることができます。 この値は NULL にすることができます。この場合、プロセス参照はコンポーネントで使用できなくなります。

戻り値

なし

解説

DLL として実装され、Windows エクスプローラー (Explorer.exe) や Windows インターネット エクスプローラー (Iexplore.exe) などのホスト プロセスで実行される、シェル拡張ハンドラーなどのコンポーネントがいくつかあります。 通常、ユーザーがホスト プロセスを閉じると、コンポーネントも直ちにシャットダウンされます。 このような突然の終了により、一部のコンポーネントに問題が発生する可能性があります。 たとえば、コンポーネントがバックグラウンド スレッドを使用してデータをダウンロードしたり、ユーザー インターフェイス関数を実行したりする場合、安全にシャットダウンするために追加の時間が必要になる場合があります。

GetProcessReference を使用すると、ホスト プロセスで実行されるコンポーネントは、ホスト プロセス上の参照を保持できます。 GetProcessReference は、ホストの参照カウントをインクリメントし、ホストの IUnknown インターフェイスへのポインターを返します。 その参照を保持することで、コンポーネントはホスト プロセスが途中で閉じるのを防ぐことができます。 コンポーネントが必要な処理を完了したら、 (*punk)->Release を呼び出してホストの参照を解放し、プロセスを終了できるようにする必要があります。

メモGetProcessReference が成功した場合、コンポーネントは不要になったときにホストの参照を解放する必要があります。 それ以外の場合、プロセスに関連付けられているすべてのリソースはメモリ内に残ります。 *punk が指す IUnknown インターフェイスは、この参照を解放するためにのみ使用できます。 コンポーネントは (*punk)->QueryInterface を使用して他のインターフェイス ポインターを要求することはできません。
 
GetProcessReference は、以前に SetProcessReference を呼び出してプロセス参照を設定したアプリケーションから呼び出された場合にのみ成功します。

要件

要件
サポートされている最小のクライアント Windows 8 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー shlwapi.h
Library Shlwapi.lib
[DLL] Api-ms-win-shcore-thread-L1-1-0.dll

こちらもご覧ください

SHGetInstanceExplorer

SetProcessReference

Windows API セット