Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Recall (предварительная версия) позволяет пользователям выполнять поиск локально сохраненных и проанализированных моментальных снимков экрана с помощью естественного языка. Recall интегрируется с поставщиками защиты от потери данных (DLP) для предотвращения хранения конфиденциального содержимого на основе политик организации. В этой статье описывается общедоступный API, позволяющий Recall работать с любым DLP средством.
Архитектура системы
На следующей схеме показано, как Windows Recall взаимодействует с DLP поставщиком:
┌─────────────────────────────────────────────────────────────┐
│ Windows Recall │
│ - Captures screenshots and app content │
│ - Queries DLP provider before capturing │
└─────────────────────┬───────────────────────────────────────┘
│ Query: Should we capture this window?
│ Context: Process, Window, File, Labels
▼
┌─────────────────────────────────────────────────────────────┐
│ AIContext.exe Process │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Your DLP Provider DLL (loaded in-process) │ │
│ │ - Evaluates organizational policies │ │
│ │ - Returns capture restrictions │ │
│ │ - Provides sensitivity label information │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
│ Response: Allow/Block/Warn/Audit
│ Labels: Sensitivity information
▼
┌─────────────────────────────────────────────────────────────┐
│ Windows Recall │
│ - Enforces returned restrictions │
│ - Displays sensitivity labels to user │
│ - Logs audit events as required │
└─────────────────────────────────────────────────────────────┘
Общедоступный API
Основные структуры
Перечисление RestrictionEnforcement
Определяет уровень принудительного применения для определенного ограничения.
enum RestrictionEnforcement
{
RestrictionEnforcement_Allow = 0,
RestrictionEnforcement_AuditAndAllow = 1,
RestrictionEnforcement_Warn = 2,
RestrictionEnforcement_Block = 3,
};
Значения:
- RestrictionEnforcement_Allow (0): операция разрешена без ограничений.
- RestrictionEnforcement_AuditAndAllow (1): операция разрешена, но должна быть зарегистрирована в целях аудита.
- RestrictionEnforcement_Warn (2): операция запрашивает пользователю предупреждение перед продолжением.
- RestrictionEnforcement_Block (3): операция полностью предотвращается.
Структура ограничений
Задает уровень принудительного применения для различных операций.
struct Restrictions
{
RestrictionEnforcement CopyToClipboard;
RestrictionEnforcement CaptureInRecall;
};
Члены:
- CopyToClipboard: уровень принудительного копирования содержимого в буфер обмена.
- CaptureInRecall: уровень применения для записи содержимого в Recall моментальных снимках.
Структура КонфиденциальностиLabelDescription
Предоставляет сведения о метках конфиденциальности для отображения пользователю.
struct SensitivityLabelDescription
{
LPCWSTR Name;
LPCWSTR Color;
LPCWSTR TooltipText;
uint32_t Sensitivity;
};
Члены:
- Имя: отображаемое имя метки конфиденциальности (например, "Конфиденциально").
- Цвет: шестнадцатеричный код цвета для визуального представления (например, "#FF0000").
- TooltipText: описательный текст, отображаемый при наведении указателя мыши на метку.
- Конфиденциальность: уровень числовой чувствительности (более высокие значения указывают на большую чувствительность).
Структура EnterpriseContextQuery
Содержит сведения о запросе записи и ответе DLP от поставщика.
struct EnterpriseContextQuery
{
uint32_t ProcessId;
uint64_t WindowHandle;
LPCWSTR FileName;
LPCWSTR SensitivityLabelId;
LPCWSTR OrganizationId;
SensitivityLabelDescription SensitivityLabelDescription;
Restrictions Restrictions;
};
Члены:
- ProcessId: идентификатор процесса приложения для записи.
- WindowHandle: обработка захваченного окна.
- FileName: полный путь к файлу, открытому в приложении (если применимо).
- SensitivityLabelId: идентификатор любой существующей метки конфиденциальности.
- OrganizationId: идентификатор организации из текущего контекста пользователя.
- SensitivityLabelDescription: отображаемые сведения о метке конфиденциальности (заполнены поставщиком).
- Ограничения: принудительное применение ограничений для отслеживания (заполнено поставщиком).
Замечание
Приложения могут предоставлять сведения о метках конфиденциальности через UserActivity.ContentInfo API. Дополнительные сведения о том, как приложения должны форматировать и предоставлять эти сведения, см. в разделе "Предоставление меток Recall конфиденциальности" с помощью UserActivity ContentInfo.
Необходимые экспорты БИБЛИОТЕК DLL
Библиотека DLP DLL поставщика должна экспортировать эти функции с точными именами:
EnterpriseContextProvider_QueryEnterpriseContext
Recall вызывает эту функцию для оценки запросов на запись.
HRESULT STDMETHODCALLTYPE EnterpriseContextProvider_QueryEnterpriseContext(
_In_ ULONG totalQuerySizeBytes,
_Inout_updates_all_(totalQuerySizeBytes / sizeof(EnterpriseContextQuery)) EnterpriseContextQuery* queryBuffer);
Параметры:
- totalQuerySizeBytes: общий размер буфера запроса в байтах.
-
queryBuffer: указатель на массив
EnterpriseContextQueryструктур. Поставщик должен обновлятьRestrictionsSensitivityLabelDescriptionполя на основе политик организации.
Возвращаемое значение:
- Возвращает успешность
S_OKили соответствующийHRESULTкод ошибки при сбое.
Примечания:
Windows может отправлять несколько запросов одновременно для повышения эффективности. Реализация должна обрабатывать все запросы в буфере и обновлять соответствующие поля перед возвратом.
EnterpriseContextProvider_FlushEnterpriseContext
Recall периодически вызывает эту функцию, чтобы разрешить поставщику освободить кэшированные строки или ресурсы.
VOID STDMETHODCALLTYPE EnterpriseContextProvider_FlushEnterpriseContext();
Примечания:
Recall вызывает эту функцию после проверки или копирования данных из предыдущего ответа запроса. Используйте эту функцию для освобождения ресурсов, очистки кэшей или выполнения операций очистки.
Регистрация поставщика
Настройка реестра (поставщик)
Установка DLP поставщика создает запись реестра, содержащую путь к библиотеке DLL:
HKEY_LOCAL_MACHINE\SOFTWARE\YourCompany\DLP
InstallPath REG_SZ C:\Program Files\YourCompany\DLP
Рекомендации по безопасности:
Закрепите раздел реестра, чтобы предотвратить несанкционированное изменение. Задайте соответствующие списки ACL, чтобы ограничить доступ к записи только администраторам.
Конфигурация групповой политики (администратор)
Администраторы настраивают поставщика с помощью групповой политики поставщика защиты от потери данных :
-
Имя политики:
SetDataLossPreventionProvider - Расположение политики: административные шаблоны конфигурации > компьютеров > Windows Components > Windows AI
-
Формат значения политики:
key:<REGISTRY_PATH>; value:<VALUE_NAME>; binary:<DLL_NAME>
Важный: Поле value ссылается на имя значения реестра в разделе реестра, указанном в keyразделе реестра.
Пример конфигурации:
Если вы используете запись реестра, выполните следующие действия.
reg add HKLM\Software\YourCompany\DLP -v InstallPath -t REG_SZ -d "C:\Program Files\YourCompany\DLP"
И имя библиотеки DLL — YourCompanyDLP.dllзначение групповой политики:
key:HKLM\software\YourCompany\DLP; value:InstallPath; binary:YourCompanyDLP.dll
Необязательная проверка версий:
Для поставщика можно указать минимальную требуемую версию DLP :
key:HKLM\software\YourCompany\DLP; value:InstallPath; binary:YourCompanyDLP.dll; minversion:1.2.0.0
Если задано значение , minversion загружает двоичный Recallфайл только в том случае, если его версия равна или больше указанной версии.
Поток обработки запросов
Типичная последовательность взаимодействия
Виндоус Recall готовится к захвату содержимого из окна приложения.
Recall создает запросы , которые включают:
- Идентификатор процесса и дескриптор окна целевого приложения
- Путь к файлу (если у приложения есть открытый документ)
- Все существующие сведения о метках конфиденциальности
- Идентификатор организации из текущего контекста пользователя
Твой DLP Поставщик оценивает каждый запрос по политикам организации:
- Проверка необходимости записи приложения
- Проверка ограничений на уровне файла
- Оценка меток конфиденциальности
- Применение политик для пользователей или групп
Поставщик возвращает обновленные структуры запросов с помощью:
-
Restrictions.CaptureInRecall: следует ли разрешать, предупреждать, проверять или блокировать запись -
SensitivityLabelDescription: имя метки, цвет и подсказка для отображения - Любая другая соответствующая информация об ограничении
-
Windows Recall применяет возвращаемые ограничения:
- Разрешить: обычно фиксирует
- AuditAndAllow: записывает и регистрирует действие
- Предупреждение: запрашивает пользователя перед записью
- Блокировка: предотвращение захвата полностью
Пример сценария запроса 1. Документ Word с меткой "Конфиденциально"
Входные данные:
- Процесс:
winword.exe - Файл:
SecretProject.docx - Метка:
Confidential
Обработка:
Проверьте политику классификации документов в отношении правил организации.
Выходные данные:
-
CaptureInRecall:RestrictionEnforcement_Block -
SensitivityLabelDescription.Name: "Конфиденциальные - не захватывать"
Пример сценария запроса 2. Веб-браузер на общедоступном сайте
Входные данные:
- Процесс:
msedge.exe - Окно:
news.example.com
Обработка:
Проверьте домен в утвержденном списке.
Выходные данные:
-
CaptureInRecall:RestrictionEnforcement_Allow
Пример сценария запроса 3. Финансовое приложение
Входные данные:
- Процесс:
FinanceApp.exe - Пользователь
finance_user
Обработка:
Проверьте конфиденциальность группы пользователей и приложений.
Выходные данные:
-
CaptureInRecall:RestrictionEnforcement_AuditAndAllow -
SensitivityLabelDescription.Name: "Финансовые данные — аудит"
Рекомендации по реализации
Рекомендации по производительности
- Пакетная обработка: Windows может отправлять несколько запросов одновременно, чтобы быть более эффективными. Оптимизируйте код для обработки пакетной обработки.
-
Кэширование: принятие решений политики кэширования при необходимости повышения времени отклика. Используйте функцию для управления жизненным циклом
FlushEnterpriseContextкэша. - Асинхронные операции: избегайте блокировок в функции запроса. Вернитесь быстро, чтобы предотвратить влияние на взаимодействие с пользователем.
Обработка ошибок
- Возвращает соответствующие
HRESULTкоды для различных условий ошибки. - Используйте функцию
FlushEnterpriseContextдля очистки ресурсов. - Обработка случаев, когда сведения о политике временно недоступны (по умолчанию — безопасное поведение).
Требования к безопасности
- In-Process выполнение. Библиотека DLL выполняется внутри процесса AIContext.exe с повышенными привилегиями.
- Безопасные методики написания кода. Следуйте рекомендациям по безопасному программированию для управления памятью. Тщательно проверьте все входные параметры.
- Цифровая подпись: библиотека DLL должна быть подписана Authenticode для развертывания. Неподписанные двоичные файлы не загружаются.
- Защита реестра: закрепите раздел реестра, указанный в групповой политике, чтобы предотвратить несанкционированные изменения.
Процесс загрузки
Recall используется LoadLibraryEx для загрузки библиотеки DLL из пути, указанного в реестре, а затем вызывается GetProcAddress для получения адресов необходимых экспортированных функций. После вызова QueryEnterpriseContextпросмотрите Recall и копирует данные из ответа, а затем вызовы FlushEnterpriseContext позволяют поставщику освободить выделенные ресурсы.
Начало работы
Выполните следующие действия, чтобы создать и развернуть DLP поставщика:
Разработка библиотеки DLL путем реализации необходимых экспортов:
EnterpriseContextProvider_QueryEnterpriseContextEnterpriseContextProvider_FlushEnterpriseContext
Протестируйте реализацию с помощью примеров запросов, чтобы обеспечить правильное поведение в разных сценариях.
Подписыв двоичный файл с помощью сертификата Authenticode.
Создайте процесс установки , который:
- Устанавливает библиотеку DLL в безопасное расположение
- Настройка записи реестра с соответствующими списками управления доступом
- Предоставляет средства настройки для администраторов
Укажите инструкции по групповой политике администраторам, чтобы настроить
SetDataLossPreventionProviderполитику.Развертывание и настройка в корпоративной среде.
Связанные ссылки
Windows developer