
Этот инструмент извлекает и отображает данные из функции Recall в Windows 11, предоставляя простой способ доступа к информации о снимках активности вашего ПК.
Breaking Windows Recall. Again.
image
Когда Microsoft переработала Recall с VBS-анклавами, шифрованием AES-256-GCM, аутентификацией Windows Hello и хост-процессом Protected Process Light, сообщение было ясным: данные заперты в хранилище.
Хранилище надёжно. А грузовик доставки — нет.
AIXHost.exe — процесс, отображающий временную шкалу Recall, — не имеет PPL, AppContainer и проверки целостности кода. Любой процесс, работающий от имени текущего пользователя, может внедрить в него код и вызвать те же COM API, которые использует легитимный интерфейс. Как только пользователь проходит аутентификацию с помощью Windows Hello, расшифрованные скриншоты, OCR-текст и метаданные проходят через AIXHost.exe как живые COM-объекты. TotalRecall Reloaded внедряется в этот процесс и извлекает всё.
Не требуется прав администратора. Стандартный пользователь. Без эксплуатации ядра. Без обхода криптографии. Просто COM-вызовы.
TotalRecall Reloaded состоит из двух файлов: инжектора (totalrecall.exe) и DLL-нагрузки (totalrecall_payload.dll).
Инжектор находит AIXHost.exe через CreateToolhelp32Snapshot, выделяет память в целевом процессе с помощью VirtualAllocEx, записывает путь к DLL через WriteProcessMemory и запускает удалённый поток, указывающий на LoadLibraryW. Классическое DLL-внедрение. Ничего сложного, потому что ничего сложного не требуется. AIXHost.exe не имеет никакой защиты от этого.
Это работает с привилегиями стандартного пользователя. Без повышения, без SeDebugPrivilege. Стандартный DACL Windows предоставляет процессам одного пользователя полный доступ друг к другу. Проверено: токен работает на уровне Medium Mandatory Level, при этом BUILTIN\Administrators установлен как deny-only.
VBS-анклав не расшифрует ничего без Windows Hello. Инструмент не обходит это. Он заставляет пользователя сделать это, молча следует за пользователем, когда тот это делает, или ждёт, пока пользователь это сделает.
--launch имитирует Win+J с помощью keybd_event — сочетания клавиш, открывающего временную шкалу Recall. Пользователь видит приглашение Hello (лицо, отпечаток пальца или PIN), аутентифицируется, и анклав начинает выдавать расшифрованные данные. С точки зрения пользователя, Recall просто открылся как обычно. С нашей — нагрузка уже внутри и ждёт.
--stealth — полностью бесшумный режим. Работает так:
AIXHost.exe (всегда запущен) и патчит DiscardDataAccess в no-opAIXHost.exe завершается и перезапускается. Инструмент обнаруживает перезапуск и повторно внедряется в новый процессaihost.exe (отзыв был заблокирован). Извлечение начинается немедленно--wait — пассивный аналог --launch. Вместо имитации Win+J инструмент бездействует, пока пользователь сам открывает Recall — с панели задач, ярлыка или любым другим способом. Когда появляется AIXHost.exe и пользователь естественным образом проходит Hello, нагрузка внедряется, и начинается извлечение. Полезно на машине, за которой наблюдают, или когда сеанс Recall должен выглядеть полностью инициированным пользователем без синтетического ввода с клавиатуры.
Как только нагрузка оказывается внутри AIXHost.exe, она инициализирует COM-апартамент с помощью CoInitializeEx(COINIT_APARTMENTTHREADED) и настраивает перенаправление идентификатора прокси с помощью CoSetProxyBlanket(EOAC_DYNAMIC_CLOAKING). Это критически важно. Без динамического маскирования COM-прокси не передаёт аутентифицированную идентификацию на сервер.
Извлечение следует тому же пути, который использует легитимный интерфейс Recall:
Инициализация анклава: DataManager.Load() запускает загрузку ключа анклава. DataStoreManager.DecryptDatabase() (слот 37) подготавливает расшифрованные представления. Нагрузка опрашивает DataManager.DataStatus, пока он не вернёт 3 (разблокировано).
Перечисление сущностей: MemoryEntityStatics.GetLightMemoryItemsBefore() (слот 9) возвращает вектор лёгких ссылок на сущности. Каждая содержит идентификатор контекста по смещению +8. На типичной машине это возвращает сотни сущностей, охватывающих дни или недели активности.
Извлечение каждой сущности: Для каждого идентификатора контекста нагрузка загружает полную сущность через ContextEngine2.TryGetEntityForId() (слот 6), распаковывает её через IEntityWrapper (слот 6) и использует QueryInterface для IMemoryEntity. Оттуда:
TryGetBitmapCaptureAsync() (слот 19) возвращает . к , вызов для получения WIC-битмапа, кодирование в PNG через Каждый вызов обёрнут в __try/__except, потому что одно нарушение доступа при вызове COM-прокси навсегда убивает RPC-канал к aihost.exe. Восстановление невозможно. Пришлось бы перезапускать AIXHost.exe. Обработчики SEH ловят сбои от неправильных типов параметров и поддерживают сеанс активным.
Некоторые операции работают без какой-либо аутентификации Hello:
Извлечение скриншотов: RecallPrivacyIndicatorSettings (CLSID {42C63551-...}) предоставляет GetRecentCaptureThumbnail(width, height) в слоте 13. В названии метода сказано «эскиз», но сервер не ограничивает разрешение. Передача 3840x3840 возвращает последний снимок Recall в полном разрешении. Результат IRandomAccessStream преобразуется в IStream через CreateStreamOverRandomAccessStream (shcore.dll) и сохраняется как BMP.
Уничтожение данных: IDataStoreManager::DeleteEvents() (слот 12) стирает всю историю захватов. Без параметров, без аутентификации. Анализ в Ghidra подтвердил: обработчик удаления по адресу FUN_1802ddd10 не содержит вызовов функции проверки авторизации. Проверка авторизации никогда не была подключена.
Раскрытие метаданных: Пути хранения (включая UKP GUID, специфичный для пользователя), размер базы данных, политика хранения, состояние захвата и идентификатор контекста последнего захвата — всё это читаемо без аутентификации через IDataStoreManagerStatics и RecallPrivacyIndicatorSettings.
image``` totalrecall.exe --launch Open Recall, trigger Hello, extract everything totalrecall.exe --stealth Silent extraction (patches auth revocation, waits) totalrecall.exe --wait Wait for user to manually open Recall totalrecall.exe --preauth Grab latest screenshot + settings (no Hello) totalrecall.exe --search "password" Search OCR text in latest extraction totalrecall.exe --destroy Wipe all Recall data (confirmation required, no Hello)
| Режим | Требуется аутентификация | Что делает |
|------|:---:|-------------|
| `--launch` | Да | Имитирует нажатие Win+J, пользователь аутентифицируется, полное извлечение |
| `--stealth` | Пассивный | Исправляет отзыв аутентификации, ждет, пока пользователь аутентифицирует Recall, извлекает незаметно |
| `--wait` | Да | Ждет, пока пользователь откроет Recall естественным образом, затем извлекает |
| `--preauth` | **Нет** | Последний снимок экрана + все настройки |
| `--search` | Нет | Поиск текста по OCR без учета регистра в последнем извлечении |
| `--destroy` | **Нет** | `DeleteEvents()`, необратимо, требует ввода DESTROY для подтверждения |
### Пример вывода
**`--stealth` (первый запуск, ожидание пользователя):**```
[+] Target: AIXHost.exe PID 8648 (stealth mode)
[*] Patching auth revocation...
[+] Waiting for Recall session...
[+] Recall session detected
[*] Waiting for user to close Recall...
[*] Recall closed, waiting for AIXHost to respawn...
[+] Extracting from AIXHost PID 26208
[+] Payload active
[*] Extracting
[##############################] 384/384 entities
EXTRACTION COMPLETE 6 min 51 sec
Screenshots 192 328.8 MB
OCR Text 184 535.2 KB
Metadata (CSV) 384 97.4 KB
--stealth (последующий запуск, кэшированная сессия):```
[+] Target: AIXHost.exe PID 27532 (stealth mode)
[] Patching auth revocation...
[+] Waiting for Recall session...
[+] Cached session found, extracting...
[] Extracting
[##############################] 398/398 entities
**`--launch`:**```
[+] Target: AIXHost.exe PID 14636 Memory 60 MB
[*] Triggering Recall via Win+J...
[*] Waiting for Hello authentication authenticating
[+] Recall ready PID 14636 Memory 242 MB
[*] Extracting
[##############################] 212/212 entities
EXTRACTION COMPLETE 3 min 59 sec
Screenshots 104 184.0 MB
--preauth (Hello не требуется):```
[+] Target: AIXHost.exe PID 27532 (pre-auth mode)
[*] Injecting payload (pre-auth only)...
[+] Payload active
PRE-AUTH EXTRACTION COMPLETE 0 min 1 sec
Screenshot 4K (3840x2464) 36.1 MB
Settings Storage Path C:\Users<user>\AppData\Local\CoreAIPlatform.00\UKP{...} Storage Size 178.3 MB Capture Count 0 Retention Days 90
**`--search`:**```
Searching for: "password"
In: extraction_20260406_152736
[1] === [12] ctxId=90443 Settings | Chrome ===
Saved passwords and passkeys
[2] === [47] ctxId=91201 inbox | Thunderbird ===
Your temporary password has been reset
extraction_20260404_143052/ screenshots/ Full-resolution decrypted PNGs screenshots/*.txt Per-image OCR text thumbnails/ Thumbnail PNGs (fallback when full screenshot unavailable) ocr_text.txt Combined OCR text for all captures recall_data.csv Structured metadata settings.txt Storage path, size, retention, capture state latest_capture_4k.bmp Pre-auth screenshot of most recent capture extraction.log Detailed extraction log with timing
## Сборка
**Требования:** Visual Studio с инструментами C++ для ARM64, Windows 11 ARM64 с включенной функцией Recall.```
make.bat
Создаёт totalrecall.exe и totalrecall_payload.dll. Оба файла должны находиться в одной директории при запуске.
VTL1 (Secure World) +--------------------------------------------------+ | VBS Enclave: AES-256-GCM, sealed keys | | snapshot_support.dll / storage_support.dll | | Keys never leave here. Crypto is sound. | +--------------------------------------------------+ ^ CallEnclave | VTL0 (Normal World) +--------------------------------------------------+ | aihost.exe (PPL, Signer=5) | | +-- Microsoft.Windows.AI.Platform.dll (6.9 MB) | | 44 methods on IDataStoreManager alone | | Enclave bridge. Protected. Can't touch it. | | | | AIXHost.exe (NO PROTECTION) | | +-- Baker.dll: OCR, NER, AI classification | | +-- Receives decrypted data for rendering | | +-- CreateRemoteThread = game over | +--------------------------------------------------+
Иерархия ключей: Hello -> NGC ECDH P-384 (на базе TPM) -> взаимная аутентификация VTL1 -> запечатанный в анклаве ключевой материал -> AES-256-GCM на страницу со случайными nonce и AAD на основе номера страницы. Шесть уровней вывода ключей. Криптография действительно надежна.
Проблема возникает после расшифровки. Открытый текст попадает в `AIXHost.exe` — незащищенный, инжектируемый процесс того же пользователя. Анклав не различает `Baker.dll` и инжектированный код. Он не может.
---
## Ключевые выводы
### Граница доверия заканчивается слишком рано
В [блоге архитектуры](https://blogs.windows.com/windowsexperience/2024/09/27/update-on-recall-security-and-privacy-architecture/) компании Microsoft говорится, что «процессы вне анклавов VBS никогда напрямую не получают доступ к снимкам или ключам шифрования» и что архитектура «ограничивает попытки скрытой вредоносной программы воспользоваться аутентификацией пользователя для кражи данных».
На практике `AIXHost.exe` получает каждый расшифрованный снимок экрана и результат OCR в виде активного COM-объекта. Внутри процесса нет проверки вызывающего. Нет проверки «ты Baker.dll?». Если ты в процессе — тебе доверяют. Границей безопасности является анклав VBS и PPL, а не рендерящий процесс. Расшифрованные данные находятся на расстоянии одного `CreateRemoteThread` от любого приложения того же пользователя.
### Обход управления доступом IResponse4
Прямой пробел в авторизации.
Когда вы вызываете `ContextDataSource.Search()` и получаете `IResponse`, естественный путь — `IResponse.get_Items()` (слот 9) для получения результатов. В новой сессии это возвращает `0x80005473`, кастомный код ошибки Recall. Сервер намеренно отклоняет вызов. `IResponse2.ItemsAfterIndex()` возвращает ту же ошибку. Контроль доступа работает.
Но объект `IResponse` реализует четыре версии интерфейса. `IResponse4.get_UnfilledItems()` (слот 9 на другом IID) возвращает ту же коллекцию данных без какой-либо проверки доступа.```
IResponse.get_Items() -> 0x80005473 (ACCESS DENIED)
IResponse2.ItemsAfterIndex() -> 0x80005473 (ACCESS DENIED)
IResponse4.get_UnfilledItems() -> S_OK (all entities returned)
Те же данные. Другой интерфейс версии. Без авторизации. Метод был предназначен для внутренней ленивой загрузки в поисковом конвейере. Проверка безопасности выявила get_Items и ItemsAfterIndex, но пропустила get_UnfilledItems. Это та схема, которая делает инженерию безопасности сложной: проверка существует в одном кодовом пути (что означает, что кто-то решил, что она нужна), и отсутствует в другом.
Из этих элементов контекстный ID каждой сущности ведёт к ContextEngine2.TryGetEntityForId(), который загружает полную сущность со снимками экрана, OCR и метаданными. Анклав расшифровывает всё по запросу.
Когда пользователь закрывает окно Recall, Baker.dll вызывает IDataProtectionManager3::DiscardDataAccess(), чтобы явно отозвать предоставление доступа к данным в aihost.exe. Именно поэтому авторизация не сохраняется после обычного сеанса Recall пользователя: Baker.dll убирает за собой.
Обход: внедрённый код внутри AIXHost.exe может изменить vtable COM-прокси, заменив DiscardDataAccess (слот 8) на функцию-пустышку. Один вызов VirtualProtect, одна запись указателя. Когда пользователь закрывает Recall, Baker.dll вызывает пропатченный слот, ничего не происходит, и предоставление остаётся активным в aihost.exe. Любой последующий экземпляр AIXHost.exe наследует кешированное предоставление молча.
На практике --stealth развёртывает патч в AIXHost.exe (который всегда запущен) и ждёт. В следующий раз, когда пользователь откроет и закроет Recall обычным образом, очистка подавляется, и разрешение доступа к данным сохраняется. Инструмент обнаруживает доступ, обрабатывает перезапуски процесса AIXHost посредством автоматического повторного внедрения (повторное пропатчивание каждого нового экземпляра) и извлекает всё молча. Патч действует на процесс и на запуск: он защищает текущий сеанс извлечения. Последующее использование Recall после завершения инструмента возвращается к нормальному поведению.
IDataStoreManager::DeleteEvents() стирает всю историю захвата без Windows Hello. Ghidra подтвердила: обработчик удаления не содержит ни одного вызова функции шлюза авторизации. Проверка авторизации никогда не была встроена в путь удаления. Злоумышленник, не способный прочитать данные, всё равно может их уничтожить. Анти-форензика от обычного пользователя.
RecallPrivacyIndicatorSettings.GetRecentCaptureThumbnail возвращает последний снимок экрана Recall в любом запрошенном разрешении. Метод предназначен для маленького индикатора приватности в панели задач. Никто не ограничил разрешение. Любой процесс того же пользователя может молча захватить то, что было на экране последним, без Hello.
GetWindowCaptureCount (слот 26) возвращает E_ACCESSDENIED без Hello. Но GetSecureStorageInfo (слот 27) возвращает структуру StorageInfo с теми же данными, без авторизации. Структура содержит NumberOfItems (количество захватов) и Size (общий размер зашифрованного хранилища в байтах). Злоумышленник может отслеживать это для контроля активности Recall в реальном времени без какой-либо аутентификации.
После завершения Hello состояние авторизации кешируется в aihost.exe (PPL) на весь сеанс Windows. Убийство и перезапуск AIXHost.exe не очищает его. Злоумышленник может дождаться, пока пользователь естественным образом откроет Recall, а затем молча извлекать данные часами позже. Неограниченное повторное извлечение без дополнительных запросов, без видимых окон, без осведомлённости пользователя.
Recall не просто делает снимки экрана. Он строит всеобъемлющий профиль поведения всего, что вы делаете на своём компьютере. Каждые несколько секунд он делает снимок экрана, запускает на нём OCR и (предположительно) AI-классификацию, и сохраняет результат в зашифрованную базу данных SQLite.
Всё ниже подтверждено из двух независимых источников: приватные WinRT метаданные (Microsoft.Windows.AI.Platform.winmd, разобраны через cppwinrt.exe) и двоичный файл анклава VBS (storage_support.dll, который содержит полную схему базы данных в виде строк в открытом тексте).
Примечание: названия полей ниже подтверждены из метаданных WinRT и строк двоичного файла анклава. Описания того, что содержит каждое поле, выводятся из названий API и типов и не все были динамически проверены во время выполнения.
Примечание: то же примечание, что и выше. Названия классов и перечислений перечислены из метаданных WinRT и строк DLL анклава; описания того, что представляет каждый из них, выводятся из названий и контекста и не были динамически проверены для каждой записи.
Поверх сырого захвата Recall выполняет AI-классификацию, которая выдаёт:
PersonName, Organization, Product, Address, Location, DateTime, Event, Duration, WebUrl, EmailAddress. Каждая извлечена из текста OCR с указанием исходной позиции.Topic, Person, Emoji, App, FileKind, , , , , , , , , , , , , , , , , , . Каждая с оценками достоверности и опциональными ограничивающими рамками.Каждые несколько секунд служба захвата Recall оценивает 12 политик перед принятием решения о снятии скриншота:
GameModeActive, BatterySaverActive, UserActivityIdle, UserPresenceIdle, StorageLow, PrivateWindow, BlockedByContentProtection, BlockedAppId, BlockedExecutable, BlockedURL, BlockedContentFilePath, BitLockerDisabled
Если ни одна из них не срабатывает, он захватывает. Структура входных данных для одного захвата (из метаданных WinRT):``` WindowData { WindowId, Foreground, Title, Bounds, Minimized, PrivateState, InputScopePrivacy AppData { AppUserModelId, ProcessPath, IconUri, AppName, TileId RemoteClient, IsBrowserWindow } RestoreData { WebUrl, FilePath, ActivationUri, ActivityId, WebIconUri FileObjectId, VolumeId // NTFS persistent file identifiers SensitivityLabelData { State, Labels } } }
### База данных
Основная база данных (`ukg.db`) использует SQLite SEE с шифрованием AES-256-GCM. Схема подтверждена из `storage_support.dll` (бинарный файл VBS-анклава, содержащий операторы CREATE TABLE в открытом виде):
**Основные таблицы (17):**```
WindowCapture Id, Name, ImageToken, IsForeground, WindowId, WindowBounds,
WindowTitle, Properties, IsProcessed, Retry, ActivationUri,
ActivityId, FallbackUri, TimeStamp, DwellTime
WindowCaptureAppRelation WindowCaptureId, AppId, IsBackground
WindowCaptureWebRelation WindowCaptureId, WebId, IsBackground
WindowCaptureFileRelation WindowCaptureId, FileId
WindowCaptureTopicRelation WindowCaptureId, TopicId, Score (float)
WindowCaptureTextIndex FTS5 virtual table (WindowCaptureId, WindowTitle, OcrText)
App Id, WindowsAppId, IconUri, Name, Path, TileId, Properties
Web Id, Domain, Uri, IconUri, Properties
File Id, Path, Name, Extension, Kind, Type, ObjectId, VolumeId
Topic Id, Title, Properties
ScreenRegion Id, WindowCaptureId, RegionKind, OcrText, Bounds
AppDwellTime Id, WindowsAppId, HourOfDay, DayOfWeek, HourStartTimestamp, DwellTime
WebDomainDwellTime Domain, HourOfDay, DayOfWeek, HourStartTimestamp, DwellTime
SearchHistory SessionId, CorrelationId, TimeStamp, Kind, Text, Language
SearchFeedback SessionId, CorrelationId, TimeStamp, Kind, Text, Language,
ItemChosenEventId, FeedbackType
IdTable NextId
_MigrationMetadata Id, Version
Индекс семантического поиска (SemanticTextStore.sidb / SemanticImageStore.sidb):``` si_items Core embedding storage si_embedding_metadata Embedding type and source mapping si_diskann_graph DiskANN approximate nearest neighbor graph si_diskann_references Graph edge references si_diskann_config Index configuration si_diskann_info Index statistics si_application_values Application-level settings
За типичный рабочий день накапливаются сотни захватов. По умолчанию хранение составляет 90 дней при пороговом значении 75 ГБ. Каждое открытое письмо, каждый отредактированный документ, каждый посещённый сайт, каждая команда терминала на экране, каждый видимый разговор в мессенджере. Всё обработано OCR, извлечены сущности, классифицировано по темам и семантически проиндексировано.
Вся ваша цифровая жизнь, проиндексированная и доступная для поиска. Как и задумано.
---
## Что Microsoft сделала правильно
Изолированная среда VBS безупречна. Ключевой материал никогда не покидает VTL1. Позадачная AES-256-GCM со случайными одноразовыми номерами выполнена по учебнику. Защита PPL процесса `aihost.exe` эффективна, ядро блокирует внедрение. CFG комплексно реализован на ARM64. SQL-запросы полностью параметризованы (десять полезных нагрузок для инъекций — нулевой побочный эффект). Модель аутентификации не сохраняет состояние и свободна от гонок (тысячи зондов — ни одного обхода).
Основная проблема не в криптографии, изолированной среде, аутентификации или PPL. Она в отправке расшифрованного контента в незащищённый процесс для отображения. Дверь хранилища — титан. Стена рядом с ним — гипсокартон.
---
## Ответственное раскрытие
Это исследование было ответственно раскрыто Центру реагирования на угрозы безопасности Microsoft (MSRC).
### Хронология
| Дата | Событие |
|------------|-------------------------------------------------------------------------------|
| 2024-06-07 | Выпущен оригинальный [TotalRecall](https://github.com/xaitax/TotalRecall) (Recall до шифрования) |
| 2024-06-13 | Microsoft откладывает запуск Recall, объявляет о редизайне с использованием изолированных сред VBS |
| 2025-04 | Повторный запуск Recall с изолированными средами VBS, шифрованием и аутентификацией Hello |
| 2026-03-06 | Отправлен отчёт в MSRC: полное описание, исходный код, инструкции по сборке |
| 2026-03-09 | MSRC открывает дело 109586, статус: Рассмотрение / Воспроизведение |
| 2026-03-27 | MSRC: «команда разработчиков находится на финальной стадии расследования» |
| 2026-04-03 | MSRC закрывает дело как **Не уязвимость**: «работает в рамках текущего задокументированного дизайна безопасности» |
| 2026-04-09 | Публичный выпуск TotalRecall Reloaded |
### Позиция Microsoft
После проверки с участием своих команд разработчиков MSRC пришёл к выводу, что «наблюдаемое поведение работает в рамках текущего, задокументированного дизайна безопасности Recall» и что «продемонстрированные шаблоны доступа соответствуют предусмотренным механизмам защиты и существующим средствам контроля». Они сослались на свой [блог об архитектуре](https://blogs.windows.com/windowsexperience/2024/09/27/update-on-recall-security-and-privacy-architecture/), в частности на то, что авторизация «ограничивает попытки скрытого вредоносного ПО использовать аутентификацию пользователя для кражи данных» и что «процессы за пределами изолированных сред VBS никогда не получают прямого доступа к снимкам или ключам шифрования и получают только данные, возвращённые из изолированной среды после авторизации».
Дело было закрыто как Не уязвимость.
Результаты, задокументированные в этой работе (неавторизованное уничтожение данных, извлечение снимков экрана), были обнаружены в ходе последующего исследования после закрытия дела.
---
## Протестированная среда
| | |
|----------|-------------------------------------------------------------------------------|
| **ОС** | Windows 11 25H2 (Сборка 26300.8155) |
| **Архитектура** | ARM64 |
| **AIXHost.exe** | v2126.7602.0.0 |
| **Привилегии** | Стандартный пользователь (Средняя целостность, без повышения) |
---
## Предыдущие работы
- [TotalRecall](https://github.com/xaitax/TotalRecall) (июнь 2024), оригинальный инструмент на Python для Recall до шифрования
- [Анализ Кевина Бомонта](https://doublepulsar.com/recall-stealing-everything-youve-ever-typed-or-viewed-on-your-own-windows-pc-is-now-possible-da3e12e9465e), исследование, с которого всё началось
## Благодарности
Спасибо [Джеффу МакДжанкину](https://x.com/jeffmcjunkin) и [Кевину Бомонту](https://cyberplace.social/@GossiTheDog) за тестирование и валидацию.
---
**Александер Хагенах ([@xaitax](https://x.com/xaitax))**
SoftwareBitmapQueryInterfaceISoftwareBitmapNativeGetData(IID_IWICBitmap)IWICBitmapEncoderContextEngine2.TryGetMemoryEntityDetailsForIdAsync() (слот 8) возвращает детали сущности. QI к IMemoryEntityDetails для OcrLines (слот 7), IMemoryEntityDetails2 для NER-текстовых сущностей (люди, email, адреса) и IMemoryEntityDetails4 для AI-описаний активностиЦиклы повторных попыток: Baker.dll (библиотека интерфейса Recall) асинхронно заполняет кеш ContextEngine. После начального прохода нагрузка запускает цикл обработки сообщений Windows на 3 секунды (PeekMessage/DispatchMessage) и повторяет попытки для тех сущностей, которые не были доступны. Каждый цикл обычно даёт ~12 дополнительных сущностей. До 10 циклов повторных попыток.
| Данные | Источник | Что содержит |
|---|
| Снимок экрана | TryGetBitmapCaptureAsync | PNG изображение всего экрана в полном разрешении |
| Изменённый размер снимка | TryGetBitmapCaptureAsync(Size, Mode) | Снимок экрана в любом запрошенном разрешении с настраиваемой интерполяцией |
| Миниатюра | TryGetBitmapCaptureThumbnailAsync | Изображение предварительного просмотра с низким разрешением |
| Текст OCR | OcrText (Details3) | Полный объединённый OCR всего видимого на экране |
| Строки OCR | OcrLines (Details1) | Отдельные строки OCR как отдельные строки |
| Слова OCR | OcrWord struct | Каждое слово с попиксельной ограничивающей рамкой (RectInt32) |
| Заголовок окна | get_Title | Текст строки заголовка активного окна |
| Приложение | get_AppDisplayName | Какое приложение было в фокусе (Chrome, Outlook, Terminal, ...) |
| Идентификатор модели приложения | get_AppUserModelId | Строка идентификации приложения UWP/Win32 |
| Путь процесса | get_ProcessPath | Полный путь к исполняемому файлу (C:\Program Files\...\chrome.exe) |
| Значок приложения | IMemoryEntity2.IconUri | Путь к значку приложения |
| URL | get_WebUrl | Полный URL в адресной строке браузера |
| Домен | get_WebDomain | Домен веб-сайта |
| Фавикон | get_WebIconUri | URL фавикона для активного веб-сайта |
| Путь к файлу | get_FileUri | Активный документ или путь к файлу |
| Позиция окна | get_WindowBounds | Попиксельные координаты экрана: X, Y, Width, Height |
| Временная метка | get_Timestamp | Точное время захвата (точность 100 наносекунд) |
| Время пребывания в приложении | IMemoryEntity3 | Сколько времени вы провели в каждом приложении (миллисекунды) |
| Время пребывания на веб-сайте | IMemoryEntity3 | Сколько времени вы провели на каждом веб-сайте (миллисекунды) |
| Метка конфиденциальности | IMemoryEntity5 | Классификация Microsoft Purview/DLP: название, цвет, подсказка |
| Идентификатор активности пользователя | IMemoryEntity6 | Идентификатор корреляции активности Windows Timeline |
| Возможность восстановления | IMemoryEntity2 | Битовая маска: может повторно запустить приложение (0x1), URL (0x2), файл (0x4), URI (0x8), timeline (0x10) |
| Восстановление контекста | TryRestoreContextAsync | Повторное открытие точного приложения, страницы или документа из любого захвата |
DomainUserTagOrganizationProductAddressLocationDateTimeEventDurationMemoryDscSensitivityLabelWebVideoMeetingChatMailingPackageTextRatioSkipTopicsAnyText, Image, Table, Container, Menu, ToolBar, AddressBar, Toolpane, TabBar, TitleBar. Каждая с попиксельными ограничивающими рамками и встроенным текстом OCR.L1Description (сгенерированное AI описание того, что вы делали), L1Activity (категоризировано: просмотр, кодирование, написание, чтение email), L1Application (классифицированный AI контекст приложения).Meeting (конференц-звонки), Chat (обмен сообщениями), WebVideo (воспроизведение видео), MailingPackage (email/рассылки). Группирует несколько захватов в логические сеансы активности.UserActivity, KMeansCluster, LobeTopicCluster, ApplicationDwellTime, WebsiteDwellTime, ClipboardImageCopied, Topic.IsContentFilteringEnabled на интерфейсе IAutomatedCaptureController6.