Skip to content

wpndatabase.db: Tabellen und Spalten erklärt

Feldreferenz zur Windows-Benachrichtigungsdatenbank: Notification, NotificationHandler, HandlerAssets, WNSPushChannel, FILETIME-Zeiten und Toast-XML.

Veröffentlicht am 3 Min. Lesezeit

Kurz gesagt. Verknüpfen Sie Notification.HandlerId per Join mit NotificationHandler.RecordId, um die sendende App (PrimaryId) zu erhalten. Rechnen Sie ArrivalTime / ExpiryTime aus FILETIME (UTC) um. Den eigentlichen Inhalt lesen Sie aus dem Payload-XML. Handler-Datumsangaben sind Text, die Zeitzone ist nicht dokumentiert.

Die folgende Spaltenliste entspricht den CREATE TABLE-Anweisungen, die mit dem Plaso-Plugin windows_push_notification veröffentlicht wurden. Lesen Sie immer auch das Schema Ihrer Datei: Windows-Builds können Spalten hinzufügen, und ein guter Parser löst Spalten über ihren Namen auf.

Notification

SpalteBedeutung
OrderINTEGER PRIMARY KEY, die Rowid
IdBenachrichtigungs-ID, eindeutig (ON CONFLICT REPLACE: Ein Update mit derselben ID ersetzt die Zeile)
HandlerId→ NotificationHandler.RecordId
ActivityIdGUID-Blob
Typetoast, tile, badge…
PayloadDer Inhalt der Benachrichtigung, XML, wenn PayloadType den Wert Xml hat
Tag, GroupVon der App gewählte Bezeichner zum Ersetzen oder Entfernen von Benachrichtigungen; Chat-Apps legen hier oft eine Nachrichten- oder Verlaufs-ID ab
ExpiryTimeWann Windows sie entfernt (FILETIME, UTC)
ArrivalTimeWann sie empfangen wurde (FILETIME, UTC)
DataVersion, BootIdInterne Zähler
ExpiresOnRebootBoolescher Wert als Text (standardmäßig 'FALSE')

NotificationHandler

SpalteBedeutung
RecordIdPrimärschlüssel
PrimaryIdDie Identität der App: ein Paketfamilienname plus App-ID (Publisher.App_hash!App), eine Desktop-Kennung wie Microsoft.Office.OUTLOOK.EXE.15, eine System-ID wie Windows.SystemToast.… oder ein Pfad, dessen erstes Element eine Known-Folder-GUID sein kann
HandlerTypeZum Beispiel app:desktop, app:immersive, app:system
WNSId, WNFEventNameKennungen des Push-Dienstes und der Benachrichtigungsinfrastruktur
CreatedTime, ModifiedTimeDatumsangaben als Text (YYYY-MM-DD HH:MM:SS); die Zeitzone ist nicht dokumentiert, daher vor der Verwendung in einer UTC-Zeitlinie mit einem bekannten Ereignis abgleichen
ParentId, ContainerSidBeziehungen und App-Container-SID

Ein Known-Folder-GUID-Präfix wie {6D809377-6AF0-444B-8957-A3773F02200E} steht für Program Files; der Parser stellt es als %ProgramFiles% dar.

HandlerAssets, HandlerSettings, NotificationData

Schlüssel-/Wert-Tabellen, die nach Handler (AssetKey / AssetValue, SettingKey / Value) oder nach Benachrichtigungs-ID geordnet sind. Ihre Schlüssel variieren je nach App und Windows-Build. Behalten Sie sie im Export, statt jeden Schlüssel zu interpretieren.

WNSPushChannel

ChannelId, HandlerId, Uri, CreatedTime, ExpiryTime. Die URI ist der Endpunkt, über den ein Cloud-Dienst Push-Nachrichten an diese App auf diesem Gerät sendet; ihre Erstellungszeit zeigt, wann sich die App für Push registriert hat.

FILETIME in der Praxis

Ein FILETIME ist ein 64-Bit-Zähler für 100-Nanosekunden-Intervalle seit 1601-01-01 UTC. Ziehen Sie 116444736000000000 ab und teilen Sie durch 10.000.000, um Unix-Sekunden zu erhalten. Die Werte überschreiten 2^53, speichern Sie sie daher als Zeichenketten, wenn sie durch JSON oder Tabellenkalkulationen laufen — der Parser exportiert die Rohwerte als Text neben den umgerechneten Zeiten.

Das Payload-XML

Toasts verwenden Microsofts Toast-Content-Schema:

<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>

Relevant für die Ermittlung sind: die <text>-Zeilen (was der Benutzer sah), launch und die arguments der Aktionen (oft eine Element-ID oder URL) sowie die <image src>-Verweise (eine entfernte URL oder eine lokale App-Datei). Kacheln verwenden <tile> mit mehreren <binding>-Größen, die meist denselben Text wiederholen; Badges bestehen aus einem einzigen <badge value="…"/>.

FAQ

Welches Zeitformat verwendet wpndatabase.db?

ArrivalTime und ExpiryTime in der Tabelle Notification sowie die Zeiten in WNSPushChannel sind Windows-FILETIME-Werte: 100-Nanosekunden-Intervalle seit 1601-01-01 UTC. CreatedTime und ModifiedTime in NotificationHandler sind Datumsangaben als Text ohne dokumentierte Zeitzone.

Wie verknüpfe ich eine Benachrichtigung mit der sendenden App?

Notification.HandlerId mit NotificationHandler.RecordId joinen. Die PrimaryId des Handlers identifiziert die App, zum Beispiel ein Paketfamilienname mit Anwendungs-ID oder die Kennung einer Desktop-App.

Verwandte Artikel

Warum geschlossene Toasts in wpndatabase.db überdauern, wo SQLite sie ablegt (Freeblocks, Freelist, WAL-Frames) und wie Sie sie belastbar wiederherstellen.

Was die Windows-Benachrichtigungsdatenbank speichert, wo sie liegt, was sie belegt und wo ihre Grenzen liegen: ein Praxisleitfaden zu wpndatabase.db für DFIR.

Was appdb.dat ist, welche Windows-Versionen sie nutzen, wie feste Chunks Toasts, Kacheln und Badges speichern und was sich forensisch daraus gewinnen lässt.