IsCrossIsolatedEnvironmentClipboardContent 関数 (isolatedwindowsenvironmentutils.h)
IsCrossIsolatedEnvironmentClipboardContent は、貼り付けエラーがアプリで検出された後に呼び出して、貼り付けるコンテンツがMicrosoft Defender Application Guard (MDAG) 境界の反対側から来たかどうかを判断できます。 このシナリオでは、クリップボード操作が MDAG によって意図的にブロックされたことをユーザーが理解するのに役立つカスタム エラー メッセージをアプリケーションで表示できます。
構文
HRESULT IsCrossIsolatedEnvironmentClipboardContent(
BOOL *isCrossIsolatedEnvironmentClipboardContent
);
パラメーター
isCrossIsolatedEnvironmentClipboardContent
[out]
API の結果を受け取るブール値へのポインター。 このパラメーターは true
、クリップボードの内容が MDAG 境界 false
の反対側から取得された場合は になります。それ以外の場合は になります。
戻り値
関数が成功した場合、戻り値は です S_OK
。 失敗した場合は HRESULT
のエラー コードを返します。
注釈
この API は、ホストと分離された Windows 環境アプリ インスタンスの両方から呼び出すことができます。また、両方の関連するシナリオを検出できます。
- シナリオ 1 - ホスト ドキュメントから呼び出されます (例: ホストへのコンテンツの貼り付け)
- クリップボードの内容が分離された Windows 環境から取得された場合は true を返します。
- シナリオ 2 - 分離された Windows 環境ドキュメントから呼び出される (例: 分離環境へのコンテンツの貼り付け)
- クリップボードの内容がホストまたは別の分離された Windows 環境から取得された場合は true を返します。
この API を使用すると、必要に応じて、アプリで既定の貼り付けエラー ハンドラーを引き続き表示することもできます。 たとえば、同じ分離環境内のコンテンツのコピー/貼り付けは、MDAG クリップボード ポリシーの対象になりません。 エラーは、データの破損など、関連のない貼り付けエラーが原因である可能性があります。 この場合、 IsCrossIsolatedEnvironmentClipboardContent は false を返すので、アプリは既定の貼り付けエラー ハンドラー フローに従うことを認識します。
例
このサンプルでは、ユーザーに表示される貼り付けエラー メッセージをアプリでカスタマイズする方法を示します。 最初のスニペットは 、IsCrossIsolatedEnvironmentClipboardContent を使用して、アプリの貼り付けハンドラーが失敗した場合に適切なエラー メッセージを表示する方法を示しています。 このサンプルでは、アプリの貼り付けハンドラー OnPaste
(2 番目のコード スニペットで定義) が、 でWndProc
受信したメッセージによってWM_PASTE
呼び出されます。
// Assume this is the WndProc method that handles WM messages for an app.
// Assume SampleAppHelperClass::DisplayMsgBox shows a simple UI error dialog with given string.
LRESULT CALLBACK SampleAppWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT retVal = 0;
switch (message)
{
case WM_PASTE:
{
RETURN_LAST_ERROR_IF(!OpenClipboard(hWnd));
// See definition of OnPaste in code snippet #2, below.
retVal = OnPaste(hWnd, message, wParam, lParam);
// To avoid a race condition with the clipboard changing underneath us, call
// IsCrossIsolatedEnvironmentClipboardContent with the clipboard still open.
HRESULT hr = S_OK;
BOOL isCrossEnvContent = FALSE;
hr = IsCrossIsolatedEnvironmentClipboardContent(&isCrossEnvContent);
CloseClipboard();
if (retVal != ERROR_SUCCESS)
{
// Show a MDAG specific error message if the clipboard content crossed the host/isolated
// environment boundary. Otherwise, show the app’s default paste error message.
if (SUCCEEDED(hr) && isCrossEnvContent)
{
// This runs on both the host and Isolated Environment app instance, so customize error
// message per scenario.
BOOL isIsolatedWindowsEnvironment = FALSE;
IsProcessInIsolatedWindowsEnvironment(&isIsolatedWindowsEnvironment);
std::wstring direction = isIsolatedWindowsEnvironment ? L"into" : L"from";
SampleAppHelperClass::DisplayMsgBox(hWnd, L"Pasting content %s a MDAG document failed, verify this operation is permitted by your administrator.\n", direction.c_str());
}
else
{
SampleAppHelperClass::DisplayMsgBox(hWnd, L"Paste operation failed.\nError code 0x%x", retVal);
}
}
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return retVal;
}
2 番目のコード スニペットは、MDAG によってブロックされた場合にクリップボードアクションが失敗する方法を示すアプリの貼り付けハンドラーを示しています。
// Invoked by user Paste action, such as Ctr+V or clicking the Paste button.
HRESULT OnPaste(HWND hWnd)
{
RETURN_LAST_ERROR_IF(!IsClipboardFormatAvailable(CF_TEXT));
HGLOBAL clipboardData = GetClipboardData(CF_TEXT);
RETURN_LAST_ERROR_IF(clipboardData == NULL);
// Now that we've verified clipboard access suceeds, assume InsertTextFromClipboard is an
// application defined method to insert text into desired location.
RETURN_IF_FAILED(InsertTextFromClipboard(clipboardData, hWnd));
CloseClipboard();
return S_OK;
}
要件
要件 | 値 |
---|---|
Header | isolatedwindowsenvironmentutils.h |
[DLL] | isolatedwindowsenvironmentutils.dll |