次の方法で共有


IFunctionDiscoveryNotification::OnEvent メソッド (functiondiscoveryapi.h)

[関数検出は、[要件] セクションで指定したオペレーティング システムで使用できます。 以降のバージョンでは変更または使用できない場合があります。]

通知中に追加、削除、または更新のイベントを受信します。

構文

HRESULT OnEvent(
  [in] DWORD          dwEventID,
  [in] FDQUERYCONTEXT fdqcQueryContext,
  [in] const WCHAR    *pszProvider
);

パラメーター

[in] dwEventID

イベントの種類。

意味
FD_EVENTID_SEARCHCOMPLETE
1000
プロバイダーによって検索が完了しました。 通常、この通知はネットワーク プロトコル プロバイダーによって送信されます。このプロトコルでは、検索結果を受け入れる定義済みの間隔が指定されます。 WSD プロバイダーと SSDP プロバイダーの両方で、このイベントの種類が使用されます。

この通知が送信されると、クエリは最初の検索またはプローブ要求に対するすべての受信応答を無視します。 ただし、クエリは引き続き Hello メッセージまたは Bye メッセージを監視します (デバイスが追加または削除されるタイミングを示すために使用されます)。 クエリは、クエリ オブジェクトで Release が呼び出されるまで、これらのイベントを監視し続けます。

致命的なエラーが発生した場合、この通知は送信されません。

このイベントが特定のプロバイダーによって実装または使用される方法の詳細については、「 組み込み プロバイダー」トピックのプロバイダードキュメントへのリンクに従ってください。

FD_EVENTID_ASYNCTHREADEXIT
1001
関数探索クライアントでは使用されません。
FD_EVENTID_SEARCHSTART
1002
関数探索クライアントでは使用されません。
FD_EVENTID_IPADDRESSCHANGE
1003
NIC の IP アドレスが変更されました。 WSD プロバイダーはこの通知を実装します。 イベントは、電源イベントが発生したとき (たとえば、マシンがスリープ状態から復帰したとき) またはノート PC を使用してローミングするときに送信される場合があります。
メモ この値は、Windows Vista では使用できません。 SP1、Windows Server 2008、および以降のバージョンのオペレーティング システムを備えた Windows Vista で使用できます。
 

[in] fdqcQueryContext

変更通知用に登録されたコンテキスト。 FDQUERYCONTEXT 型は DWORDLONG として定義されます。 このパラメーターは、NULL でもかまいません。

[in] pszProvider

プロバイダーの名前。

戻り値

OnEvent メソッドのクライアント プログラムの実装では、次のいずれかの HRESULT 値を呼び出し元に返す必要があります。

リターン コード 説明
S_OK
メソッドは正常に完了しました。
E_INVALIDARG
入力パラメーターの 1 つの値が無効です。

注釈

関数探索プロバイダー (SSDP および WSD) は、このメソッドを使用して、検索パスが完了したことを示す通知を実装します。

このメソッドからクエリ オブジェクトに対して Release を呼び出さないでください。 これにより、デッドロックが発生する可能性があります。 コールバックの処理中に別のスレッドからクエリ オブジェクトに 対して Release が呼び出された場合、コールバックが完了するまでオブジェクトは解放されません。

プロバイダーによって Function Discovery に渡されるすべての通知がキューに登録され、クライアントに 1 つずつ返されます。 コールバックは、クライアントが一度に 1 つの通知のみを受信するように同期されます。

の IFunctionDiscoveryNotification メソッド呼び出しは他のスレッドで行われる可能性があるため、呼び出し中にスレッドの状態に加えられた変更は、メソッドを終了する前に復元する必要があります。

次の例は、OnEvent ハンドラーの実装を示しています。 CMyNotificationListener クラスは、IFunctionDiscoveryNotification トピックで定義されています。

#include <windows.h>

HRESULT CMyNotificationListener::OnEvent(
                                         IN DWORD dwEventID,
                                         IN FDQUERYCONTEXT fdqcQueryContext,
                                         IN const WCHAR * pszProvider
                                         )
{
    HRESULT hr = S_OK;
    HANDLE hSearchComplete = INVALID_HANDLE_VALUE;
    hSearchComplete = OpenEventW( EVENT_ALL_ACCESS, 
                                  FALSE, 
                                  L"SearchComplete" );
    
    if( NULL == hSearchComplete )
    {
        return hr;
    }

    if( FD_EVENTID_SEARCHCOMPLETE == dwEventID )
    {
        SetEvent( hSearchComplete );
    }

    CloseHandle( hSearchComplete );
    
    return hr;
} 

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー functiondiscoveryapi.h

こちらもご覧ください

IFunctionDiscoveryNotification