IsCrossIsolatedEnvironmentClipboardContent 函数 (isolatedwindowsenvironmentutils.h)
在应用检测到粘贴失败后,可以调用 IsCrossIsolatedEnvironmentClipboardContent,以确定粘贴的内容是否来自Microsoft Defender 应用程序防护 (MDAG) 边界的另一侧。 在此方案中,应用程序可以显示自定义错误消息,以帮助用户了解 MDAG 有意阻止了剪贴板操作。
语法
HRESULT IsCrossIsolatedEnvironmentClipboardContent(
BOOL *isCrossIsolatedEnvironmentClipboardContent
);
参数
isCrossIsolatedEnvironmentClipboardContent
[out]
指向接收 API 结果的布尔值的指针。 如果剪贴板内容来自 MDAG 边界的另一侧,则此参数为 true
, false
否则为 。
返回值
如果函数成功,则返回值为 S_OK
。 如果失败,则会返回 HRESULT
错误代码。
注解
可以从主机和独立 Windows 环境应用实例调用此 API,并且可以检测这两个相关方案:
- 方案 1 - 从主机文档 (调用,例如:将内容粘贴到主机)
- 如果剪贴板内容来自任何独立 Windows 环境,则返回 true。
- 方案 2 - 从独立 Windows 环境文档调用 (示例:将内容粘贴到独立环境)
- 如果剪贴板内容来自主机或不同的独立 Windows 环境,则返回 true。
此 API 还允许应用在适当的情况下继续显示其默认粘贴错误处理程序。 例如,在同一独立环境中复制/粘贴内容不受 MDAG 剪贴板策略的约束。 任何失败都可能是由于不相关的粘贴错误,例如数据损坏。 在这种情况下, IsCrossIsolatedEnvironmentClipboardContent 将返回 false,因此应用知道遵循其默认粘贴错误处理程序流。
示例
此示例演示应用如何自定义向用户显示的粘贴错误消息。 第一个代码片段演示如何使用 IsCrossIsolatedEnvironmentClipboardContent 在应用的粘贴处理程序失败时显示相应的错误消息。 在此示例中,应用的粘贴处理程序 OnPaste
(在第二个代码片段中定义,) 由 WM_PASTE
在其 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;
}
第二个代码片段显示了应用的粘贴处理程序,用于演示如果 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 |