wpndatabase.db: tablas y columnas explicadas
Referencia de campos de la base de notificaciones de Windows: Notification, NotificationHandler, HandlerAssets, WNSPushChannel, FILETIME y el XML del toast.
En resumen. Une Notification.HandlerId con NotificationHandler.RecordId para obtener la aplicación emisora (PrimaryId). Convierte ArrivalTime / ExpiryTime desde FILETIME (UTC). Lee la notificación en sí a partir del XML de Payload. Las fechas de los gestores son texto, con zona horaria no documentada.
La lista de columnas que sigue coincide con las sentencias CREATE TABLE publicadas con el plugin windows_push_notification de Plaso. Lee siempre también el esquema de tu archivo: las compilaciones de Windows pueden añadir columnas, y un buen parser resuelve las columnas por nombre.
Notification
| Columna | Significado |
|---|---|
Order | INTEGER PRIMARY KEY, el rowid |
Id | Identificador de la notificación, único (ON CONFLICT REPLACE: una actualización con el mismo id sustituye la fila) |
HandlerId | → NotificationHandler.RecordId |
ActivityId | GUID en formato blob |
Type | toast, tile, badge… |
Payload | El contenido de la notificación, en XML cuando PayloadType es Xml |
Tag, Group | Etiquetas elegidas por la aplicación para sustituir o eliminar notificaciones; las aplicaciones de chat suelen guardar aquí un identificador de mensaje o de conversación |
ExpiryTime | Cuándo la eliminará Windows (FILETIME, UTC) |
ArrivalTime | Cuándo se recibió (FILETIME, UTC) |
DataVersion, BootId | Contadores internos |
ExpiresOnReboot | Booleano almacenado como texto ('FALSE' por defecto) |
NotificationHandler
| Columna | Significado |
|---|---|
RecordId | Clave primaria |
PrimaryId | La identidad de la aplicación: un nombre de familia de paquete más el id de aplicación (Publisher.App_hash!App), un identificador de escritorio como Microsoft.Office.OUTLOOK.EXE.15, un id de sistema como Windows.SystemToast.… o una ruta cuyo primer elemento puede ser el GUID de una carpeta conocida |
HandlerType | Por ejemplo app:desktop, app:immersive, app:system |
WNSId, WNFEventName | Identificadores del servicio push y del mecanismo de notificación |
CreatedTime, ModifiedTime | Fechas en texto (YYYY-MM-DD HH:MM:SS); la zona horaria no está documentada, así que contrástalas con un evento conocido antes de usarlas en una cronología UTC |
ParentId, ContainerSid | Relaciones y SID del contenedor de la aplicación |
Un prefijo con el GUID de una carpeta conocida, como {6D809377-6AF0-444B-8957-A3773F02200E}, equivale a Program Files; el parser lo muestra como %ProgramFiles%.
HandlerAssets, HandlerSettings, NotificationData
Tablas clave / valor indexadas por gestor (AssetKey / AssetValue, SettingKey / Value) o por identificador de notificación. Sus claves varían según la aplicación y la compilación de Windows. Consérvalas en la exportación en lugar de intentar interpretar cada clave.
WNSPushChannel
ChannelId, HandlerId, Uri, CreatedTime, ExpiryTime. La URI es el endpoint que usa un servicio en la nube para enviar notificaciones push a esta aplicación en este dispositivo; su hora de creación indica cuándo se registró la aplicación para recibirlas.
FILETIME en la práctica
Un FILETIME es un contador de 64 bits de intervalos de 100 nanosegundos desde el 1601-01-01 UTC. Resta 116444736000000000 y divide entre 10.000.000 para obtener segundos Unix. Los valores superan 2^53, así que mantenlos como cadenas al pasarlos por JSON u hojas de cálculo; el parser exporta los valores en bruto como texto junto a las horas convertidas.
El XML de la carga útil
Los toasts siguen el esquema de contenido de toast de Microsoft:
<toast launch="app-defined-arguments">
<visual>
<binding template="ToastGeneric">
<text>Title line</text>
<text>Body line</text>
<text placement="attribution">via App</text>
<image placement="appLogoOverride" src="ms-appdata:///local/a.png" alt="…"/>
</binding>
</visual>
<actions>
<input id="reply" type="text" placeHolderContent="Type a reply"/>
<action content="Reply" arguments="…" activationType="background"/>
</actions>
</toast>
Lo que importa en una investigación: las líneas <text> (lo que vio el usuario), launch y los arguments de las acciones (a menudo un identificador de elemento o una URL), y las referencias <image src> (una URL remota o un archivo local de la aplicación). Los iconos usan <tile> con varios tamaños de <binding> que suelen repetir el mismo texto; los distintivos son un único <badge value="…"/>.
Preguntas frecuentes
¿Qué formato de hora usa wpndatabase.db?
ArrivalTime y ExpiryTime en la tabla Notification, así como las horas de WNSPushChannel, son valores FILETIME de Windows: intervalos de 100 nanosegundos desde el 1601-01-01 UTC. CreatedTime y ModifiedTime de NotificationHandler son fechas en texto sin zona horaria documentada.
¿Cómo vinculo una notificación con la aplicación que la envió?
Une Notification.HandlerId con NotificationHandler.RecordId. El PrimaryId del gestor identifica la aplicación, por ejemplo un nombre de familia de paquete con un identificador de aplicación, o un identificador de aplicación de escritorio.