Skip to content

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.

Publié le 4 min de lecture

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

ColonneSignification
OrderINTEGER PRIMARY KEY, le rowid
IdIdentifiant de notification, unique (ON CONFLICT REPLACE : une mise à jour avec le même identifiant remplace la ligne)
HandlerId→ NotificationHandler.RecordId
ActivityIdBlob GUID
Typetoast, tile, badge…
PayloadLe 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
ExpiryTimeMoment où Windows la supprimera (FILETIME, UTC)
ArrivalTimeMoment de sa réception (FILETIME, UTC)
DataVersion, BootIdCompteurs internes
ExpiresOnRebootBooléen stocké sous forme de texte ('FALSE' par défaut)

NotificationHandler

ColonneSignification
RecordIdClé primaire
PrimaryIdL'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
HandlerTypePar exemple app:desktop, app:immersive, app:system
WNSId, WNFEventNameIdentifiants du service push et de la facilité de notification
CreatedTime, ModifiedTimeDates 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, ContainerSidRelations 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.

Articles liés

Pourquoi les toasts fermés ou expirés survivent dans wpndatabase.db, où SQLite les laisse et comment les récupérer sans se tromper soi-même.

Ce que la base de notifications Windows enregistre, où elle se trouve, ce qu'elle prouve et ses limites : guide pratique de wpndatabase.db pour le DFIR.

Ce qu'est appdb.dat, les versions de Windows concernées, comment ses blocs fixes stockent toasts, vignettes et badges, et ce qu'on peut en tirer.