wpndatabase.db: Tabellen und Spalten erklärt
Feldreferenz zur Windows-Benachrichtigungsdatenbank: Notification, NotificationHandler, HandlerAssets, WNSPushChannel, FILETIME-Zeiten und Toast-XML.
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
| Spalte | Bedeutung |
|---|---|
Order | INTEGER PRIMARY KEY, die Rowid |
Id | Benachrichtigungs-ID, eindeutig (ON CONFLICT REPLACE: Ein Update mit derselben ID ersetzt die Zeile) |
HandlerId | → NotificationHandler.RecordId |
ActivityId | GUID-Blob |
Type | toast, tile, badge… |
Payload | Der Inhalt der Benachrichtigung, XML, wenn PayloadType den Wert Xml hat |
Tag, Group | Von der App gewählte Bezeichner zum Ersetzen oder Entfernen von Benachrichtigungen; Chat-Apps legen hier oft eine Nachrichten- oder Verlaufs-ID ab |
ExpiryTime | Wann Windows sie entfernt (FILETIME, UTC) |
ArrivalTime | Wann sie empfangen wurde (FILETIME, UTC) |
DataVersion, BootId | Interne Zähler |
ExpiresOnReboot | Boolescher Wert als Text (standardmäßig 'FALSE') |
NotificationHandler
| Spalte | Bedeutung |
|---|---|
RecordId | Primärschlüssel |
PrimaryId | Die 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 |
HandlerType | Zum Beispiel app:desktop, app:immersive, app:system |
WNSId, WNFEventName | Kennungen des Push-Dienstes und der Benachrichtigungsinfrastruktur |
CreatedTime, ModifiedTime | Datumsangaben 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, ContainerSid | Beziehungen 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.