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

こちらもご覧ください

Microsoft Defender Application Guard の概要

IsolatedWindowsEnvironment

IsolatedWindowsEnvironmentHost