What is the Windows Search index?
Windows Search indexes files, folders, e-mails and browsing history so the Start menu and File Explorer can search them instantly. For each item it stores dozens of properties — full path, size, owner, created / modified / accessed times, when it was indexed — and, for text-based documents, an extract of their content (System.Search.AutoSummary).
The index is not cleaned up in real time: items deleted from disk often remain in it, with their metadata and content snippet, until the indexer catches up. It is one of the few places where evidence of deleted files — and part of their content — survives.
Where it is stored
- Windows 11 (22H2 and later): C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Windows.db — SQLite, with Windows.db-wal — plus Windows-gather.db, the gatherer's crawl list. The property store is normalised: SystemIndex_1_PropertyStore holds one row per (WorkId, ColumnId, Value) and SystemIndex_1_PropertyStore_Metadata maps ColumnId to property names such as System.ItemPathDisplay.
- Windows 10 and earlier: the same folder holds Windows.edb, an ESE (JET Blue) database. SystemIndex_PropertyStore (Windows 8 and later) or SystemIndex_0A (Vista / 7) has one wide row per item, with columns named like 4447-System_ItemPathDisplay; SystemIndex_Gthr and SystemIndex_GthrPth hold the gather records and the folder tree.
- Windows Search is a system service: one index covers the indexed locations of every user of the machine. The MSS*.log, *.jrs and MSS.chk files next to Windows.edb are its transaction logs.
Why it matters in an investigation
- Files that no longer exist: paths, sizes, owners and timestamps of deleted items. Items present in the property store but missing from the gather table are flagged — they may have been deleted.
- Content snippets (System.Search.AutoSummary): part of the text of documents, notes and scripts — including credentials an attacker saved, then deleted.
- Indexed removable drives and network shares, and browsing / activity history items (URLs, titles).
- Gather time (System.Search.GatherTime) tells when the indexer processed an item: a file indexed shortly before acquisition was recently created or changed.
- On Windows 11, the -wal file holds the latest indexing transactions: items only in, or changed in, the WAL are marked.
Limitations
- Windows.edb (ESE) support is validated on synthetic databases only: the reader follows the published format documentation (libesedb, Microsoft's ESE source code) but has not yet been checked against real Windows.edb files. Cross-check important findings with a second tool.
- Not supported yet: XPRESS9 / XPRESS10 / LZ4-compressed ESE values, the SystemIndex_0A value encoding of Windows Vista / 7, replaying the MSS*.log transaction logs of a dirty-shutdown database, and recovering deleted records from free ESE or SQLite pages (deleted entries still flagged in ESE pages are counted, not shown).
- Only indexed locations are covered (by default user profiles and the Start menu, plus any location added to the index); the index may be disabled, rebuilt or purged.
- Timestamps are FILETIMEs (UTC). Property sets vary with file type and Windows version, so every raw property is listed too.
- The Windows 11 layout and value encoding come from public research: Microsoft does not document the exact schema.
How to get the files
- Collect the whole C:\ProgramData\Microsoft\Search\Data\Applications\Windows folder with KAPE, Velociraptor or from a disk image, and drop the folder or the ZIP as-is.
- On a live system the files are locked by the WSearch service: copy them from a VSS snapshot or with a raw-copy tool. On Windows 11, copy Windows.db and Windows.db-wal at the same moment (a mismatched WAL is detected and ignored).
- A Windows.edb copied from a running system is usually in dirty-shutdown state. It is parsed anyway; for a consistent copy, replay the logs with esentutl /r MSS on a copy of the folder — never on the original evidence.
FAQ
Is my database uploaded anywhere?
No. The parser — including its SQLite and ESE readers — is Rust compiled to WebAssembly and runs in a Web Worker in your browser. There is no upload endpoint.
Does it read Windows.edb from Windows 10?
Yes, with its own read-only ESE reader (catalog, B+-trees, fixed / variable / tagged columns, long values, 7-bit and XPRESS compression). It has been validated on synthetic databases only so far, so treat its output as a lead and confirm key findings with another tool.
Can it show deleted files?
It shows items that are still in the index after the file was deleted — often with size, owner, timestamps and a content snippet — and flags items missing from the gather table. Recovering records already removed from the database (free pages) is on the roadmap.
Why add Windows-gather.db and the -wal file?
On Windows 11, Windows.db-wal holds the most recent indexing work, and Windows-gather.db lists what the gatherer crawled. With both, the tool marks WAL-only items and spots items present in one table but not the other.
How is this different from SIDR or esedbexport?
It covers the same tables, but runs in the browser with no install, pivots every property of each item into one row, applies the WAL itself, and flags deleted candidates, content snippets, executables and removable-drive paths.