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 |