Compartir a través de


Función IsCrossIsolatedEnvironmentClipboardContent (isolatedwindowsenvironmentutils.h)

Se puede llamar a IsCrossIsolatedEnvironmentClipboardContent después de que una aplicación detecte un error de pegado para determinar si el contenido pegado proviene del otro lado de un límite de Protección de aplicaciones de Microsoft Defender (MDAG). En este escenario, las aplicaciones pueden mostrar un mensaje de error personalizado para ayudar a los usuarios a comprender que mdAG bloqueó intencionadamente la operación del Portapapeles.

Sintaxis

HRESULT IsCrossIsolatedEnvironmentClipboardContent(
  BOOL *isCrossIsolatedEnvironmentClipboardContent
);

Parámetros

isCrossIsolatedEnvironmentClipboardContent

[out]

Puntero a un valor booleano que recibe el resultado de la API. Este parámetro será true si el contenido del Portapapeles procede del otro lado de un límite mdAG; de lo contrario, false .

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es S_OK. Si se produce un error, devuelve un código de error HRESULT.

Comentarios

Se puede llamar a esta API desde el host y la instancia de aplicación de Windows Environment aislado y puede detectar ambos escenarios pertinentes:

  • Escenario 1: se llama desde un documento host (por ejemplo: pegar contenido en el host)
    • Devuelve true si el contenido del Portapapeles procede de cualquier entorno aislado de Windows.
  • Escenario 2: se llama desde un documento de entorno de Windows aislado (por ejemplo: pegar contenido a entorno aislado)
    • Devuelve true si el contenido del Portapapeles procede del host o de un entorno de Windows aislado diferente.

Esta API también permite que las aplicaciones sigan mostrando su controlador de errores de pegado predeterminado cuando corresponda. Por ejemplo, copiar o pegar contenido dentro del mismo entorno aislado no está sujeto a la directiva del Portapapeles mdAG. Cualquier error se debe a un error de pegado no relacionado, como datos dañados. En este caso, IsCrossIsolatedEnvironmentClipboardContent devolvería false, por lo que la aplicación sabe seguir el flujo del controlador de errores de pegado predeterminado.

Ejemplos

En este ejemplo se muestra cómo una aplicación puede personalizar el mensaje de error de pegado que se muestra al usuario. El primer fragmento de código muestra cómo usar IsCrossIsolatedEnvironmentClipboardContent para mostrar un mensaje de error adecuado si se produce un error en el controlador de pegado de una aplicación. En este ejemplo, el controlador OnPaste de pegado de la aplicación (definido en el segundo fragmento de código) se invoca mediante el WM_PASTE mensaje recibido en su WndProc.

// 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;
}

El segundo fragmento de código muestra el controlador de pegado de una aplicación para demostrar cómo se pueden producir errores en las acciones del Portapapeles si MDAG lo bloquea.

// 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;
}

Requisitos

Requisito Valor
Header isolatedwindowsenvironmentutils.h
Archivo DLL isolatedwindowsenvironmentutils.dll

Consulte también

Información general sobre Protección de aplicaciones de Microsoft Defender

IsolatedWindowsEnvironment

IsolatedWindowsEnvironmentHost