次の方法で共有


IWMDMDeviceSession::EndSession メソッド (mswmdm.h)

EndSession メソッドは、デバイス セッションを終了します。

構文

HRESULT EndSession(
  [in] WMDM_SESSION_TYPE type,
  [in] BYTE              *pCtx,
  [in] DWORD             dwSizeCtx
);

パラメーター

[in] type

終了するセッションの種類を記述する WMDM_SESSION_TYPE 。 これは、BeginSession で指定された値と同じビットごとの OR である必要があります。

[in] pCtx

アプリケーションとサービス プロバイダー間のプライベート通信用の呼び出し元によって割り当てられたセッション コンテキスト バッファーへのオプションのポインター。 基になるサービス プロバイダーに関する知識を持つアプリケーションでは、このバッファーを使用してコンテキスト固有のデータを渡すことができます。 Windows Media デバイス マネージャー では、このコンテキストでは何も行われません。 呼び出し元は、このバッファーを解放する責任があります。

[in] dwSizeCtx

コンテキスト バッファーのサイズ (バイト単位)。 サイズが 0 の場合、 pCtx は無視されます。 サイズが 0 以外の場合、 pCtx は有効なポインターである必要があります

戻り値

このメソッドは HRESULT を返します。 Windows Media デバイス マネージャーのすべてのインターフェイス メソッドは、次のいずれかのエラー コード クラスを返すことができます。

  • 標準 COM エラー コード
  • HRESULT 値に変換された Windows エラー コード
  • Windows Media デバイス マネージャー エラー コード
考えられるエラー コードの詳細な一覧については、「 エラー コード」を参照してください。

注釈

セッションでは、デバイスに対する操作のグループがかっこで囲まれており、Windows Media デバイス マネージャー コンポーネントは、個々の転送ではなく、一般的なセットアップとシャットダウン機能を 1 回だけ実行することでパフォーマンスを最適化できます。 詳細については、「 BeginSession」を参照してください。

EndSession 呼び出しに応答して、Windows Media デバイス マネージャーは、セキュリティで保護されたコンテンツ プロバイダーとサービス プロバイダーで EndSession を呼び出します。 いずれかの呼び出しに失敗した場合、Windows Media デバイス マネージャーはエラーを返します。 その場合、いずれかのコンポーネントに対して EndSession が成功した可能性があります。

次の C++ コードは、セッションを使用してデバイスで Insert3 呼び出しをバンドルする方法を示しています。 このコードは、ベクターに格納されている多数のファイルをループ処理し、デバイスに送信します。


// Get the session interface.
CComQIPtr<IWMDMDeviceSession> pSession(pDevice);
if (pDevice == NULL)
{
    // TODO: Display a message that the app wasn't able to retrieve the IWMDMDeviceSession interface.
    return E_NOINTERFACE;
}

// Start the session. We don't use a custom buffer.
hr = pSession->BeginSession(WMDM_SESSION_TRANSFER_TO_DEVICE, NULL, NULL);
if (hr != S_OK)
{
    / /TODO: Display a message indicating that the session failed to start.
    return hr;
}
else
{
    // TODO: Display a message indicating that the session started.
}


// Insert files. These calls happen synchronously.
UINT flags = WMDM_MODE_BLOCK | WMDM_STORAGECONTROL_INSERTINTO | WMDM_FILE_CREATE_OVERWRITE | WMDM_CONTENT_FILE;
CComPtr<IWMDMStorage> pNewStorage;
for(int i = 0; i < sourceFiles.size(); i++)
{
    hr = pStorageControl3->Insert3(
        flags,
        WMDM_FILE_ATTR_FOLDER,
        sourceFiles[i],
        NULL, // Use default name.
        NULL, // Don't specify IWMDMOperation
        NULL, // Don't specify IWMDMProgress
        NULL, // Don't specify metadata
        NULL, // Nothing to send to the SCP.
        &pNewStorage);

    if (pNewStorage != NULL)
        pNewStorage.Release();
    CHECK_HR(hr, "Sent file " << sourceFiles[i] << " to the device.", "Couldn't send file " << sourceFiles[i] << " to the device");
}

// Close the session.
hr = pSession->EndSession(WMDM_SESSION_TRANSFER_TO_DEVICE, NULL, NULL);
CHECK_HR(hr,"Closed the session.","Couldn't close the session.");

要件

要件
対象プラットフォーム Windows
ヘッダー mswmdm.h
Library Mssachlp.lib

こちらもご覧ください

IWMDMDeviceSession インターフェイス

IWMDMDeviceSession::BeginSession

WMDM_SESSION_TYPE