wpndatabase.db : tables et colonnes expliquées
Référence des champs de la base de notifications Windows : Notification, NotificationHandler, HandlerAssets, WNSPushChannel, FILETIME et payload XML.
En bref. Joignez Notification.HandlerId à NotificationHandler.RecordId pour obtenir l'application émettrice (PrimaryId). Convertissez ArrivalTime / ExpiryTime depuis le format FILETIME (UTC). Lisez la notification elle-même dans le XML Payload. Les dates des gestionnaires sont du texte, sans fuseau horaire documenté.
La liste de colonnes ci-dessous correspond aux instructions CREATE TABLE publiées avec le plugin Plaso windows_push_notification. Lisez toujours aussi le schéma de votre fichier : les builds de Windows peuvent ajouter des colonnes, et un bon parseur résout les colonnes par leur nom.
Notification
| Colonne | Signification |
|---|---|
Order | INTEGER PRIMARY KEY, le rowid |
Id | Identifiant de notification, unique (ON CONFLICT REPLACE : une mise à jour avec le même identifiant remplace la ligne) |
HandlerId | → NotificationHandler.RecordId |
ActivityId | Blob GUID |
Type | toast, tile, badge… |
Payload | Le contenu de la notification, en XML lorsque PayloadType vaut Xml |
Tag, Group | Étiquettes choisies par l'application pour remplacer ou retirer des notifications ; les applications de messagerie y placent souvent un identifiant de message ou de fil |
ExpiryTime | Moment où Windows la supprimera (FILETIME, UTC) |
ArrivalTime | Moment de sa réception (FILETIME, UTC) |
DataVersion, BootId | Compteurs internes |
ExpiresOnReboot | Booléen stocké sous forme de texte ('FALSE' par défaut) |
NotificationHandler
| Colonne | Signification |
|---|---|
RecordId | Clé primaire |
PrimaryId | L'identité de l'application : un nom de famille de package avec identifiant d'application (Publisher.App_hash!App), un identifiant d'application de bureau tel que Microsoft.Office.OUTLOOK.EXE.15, un identifiant système tel que Windows.SystemToast.…, ou un chemin dont le premier élément peut être un GUID de dossier connu |
HandlerType | Par exemple app:desktop, app:immersive, app:system |
WNSId, WNFEventName | Identifiants du service push et de la facilité de notification |
CreatedTime, ModifiedTime | Dates textuelles (YYYY-MM-DD HH:MM:SS) ; le fuseau horaire n'est pas documenté : vérifiez-les par rapport à un événement connu avant de les intégrer à une chronologie en UTC |
ParentId, ContainerSid | Relations et SID du conteneur d'application |
Un préfixe GUID de dossier connu tel que {6D809377-6AF0-444B-8957-A3773F02200E} désigne Program Files ; le parseur l'affiche sous la forme %ProgramFiles%.
HandlerAssets, HandlerSettings, NotificationData
Tables clé / valeur indexées par gestionnaire (AssetKey / AssetValue, SettingKey / Value) ou par identifiant de notification. Leurs clés varient selon l'application et la build de Windows. Conservez-les dans votre export plutôt que d'interpréter chaque clé.
WNSPushChannel
ChannelId, HandlerId, Uri, CreatedTime, ExpiryTime. L'URI est le point de terminaison qu'un service cloud utilise pour envoyer des notifications push à cette application sur cet appareil ; son heure de création indique quand l'application s'est enregistrée pour le push.
FILETIME en pratique
Un FILETIME est un compteur 64 bits d'intervalles de 100 nanosecondes depuis le 1601-01-01 UTC. Soustrayez 116444736000000000 et divisez par 10 000 000 pour obtenir des secondes Unix. Les valeurs dépassent 2^53 : conservez-les sous forme de chaînes lorsqu'elles transitent par du JSON ou des tableurs — le parseur exporte les valeurs brutes en texte à côté des heures converties.
Le payload XML
Les toasts suivent le schéma de contenu des toasts 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>
Ce qui compte pour une investigation : les lignes <text> (ce que l'utilisateur a vu), launch et les arguments des actions (souvent un identifiant d'élément ou une URL), et les références <image src> (une URL distante ou un fichier local de l'application). Les vignettes utilisent <tile> avec plusieurs tailles de <binding> qui répètent généralement le même texte ; les badges se résument à un seul <badge value="…"/>.
FAQ
Quel format d'heure wpndatabase.db utilise-t-il ?
ArrivalTime et ExpiryTime dans la table Notification, ainsi que les heures de WNSPushChannel, sont des valeurs FILETIME Windows : des intervalles de 100 nanosecondes depuis le 1601-01-01 UTC. CreatedTime et ModifiedTime de NotificationHandler sont des dates textuelles sans fuseau horaire documenté.
Comment relier une notification à l'application qui l'a envoyée ?
Faites une jointure entre Notification.HandlerId et NotificationHandler.RecordId. Le PrimaryId du gestionnaire identifie l'application, par exemple un nom de famille de package avec un identifiant d'application, ou un identifiant d'application de bureau.