File & folder access
Windows Search index
Windows Search index cheat sheet: Windows.edb (ESE) and Windows 11 SQLite Windows.db, indexed paths, dates and content, deleted records, esentutl collection.
- Location
- C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Windows.edb
- Proves
- Files, e-mails and URLs existed in indexed locations, with metadata and partial content
- Timestamps
- Gather time and indexed created/modified/accessed times as FILETIME, UTC; they reflect crawl time, not user activity
- Retention
- Follows the file system, deleted items eventually removed; remnants in free pages, logs and WAL; a rebuild or deletion erases it
- Access
- Administrator; databases locked by SearchIndexer.exe: copy via VSS (esentutl /vss) with MSS*.log or -wal files, replay if dirty
- Evidence of
- File & folder accessUser activity
- Type
- Database
- Windows
- Vista / 78 / 8.11011
- KAPE target
- WindowsIndexSearch
- Velociraptor
- Windows.Triage.Targets:WindowsIndexSearch
Tools
Compare all toolsWhat it is
The Windows Search service (WSearch, process SearchIndexer.exe) crawls files, e-mails and other items to power instant search in Explorer, the Start menu and Outlook. For each item it stores properties (path, name, size, dates, owner, type) and, for many document types, a slice of the text content. Up to Windows 10 the index is a single ESE database, Windows.edb; Windows 11 stores it in SQLite databases in the same folder. The index often keeps a record of files that were later moved, renamed or deleted, and can hold content the investigator will not find elsewhere.
Location
| Windows version | Path | Format |
|---|---|---|
| Vista / 7 / 8 / 10 | C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Windows.edb | ESE database, with MSS*.log transaction logs and MSS.chk checkpoint in the same folder |
| 11 | C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Windows.db, Windows-gather.db (and Windows-usn.db) | SQLite, each with -wal and -shm files |
| Server 2019+, multi-session Windows 10/11 | C:\Users\<user>\AppData\Roaming\Microsoft\Search\Data\Applications\<SID>\<SID>.edb | Per-user ESE index |
| All | ...\Applications\Windows\GatherLogs\ | Crawl logs of the indexer |
The ESE and SQLite formats are not found side by side on the same installation. On Windows Server the Search service is not enabled by default.
What it proves
- A file existed at a path inside the indexed scope (by default the user profile folders and Start menu, the whole PC in "Enhanced" mode), with its size, owner and dates as seen by the indexer.
- Content: the auto-summary property keeps part of the text of indexed documents and scripts.
- E-mail: when Outlook uses Windows Search, messages and attachments are indexed with sender, subject and body extracts.
- Browsing: Internet Explorer and legacy Edge history, and on Windows 11 some URLs through link properties.
- Deleted items: records of files that were removed can survive in the database, its free pages, logs or WAL.
- It does not prove that a user opened or viewed an item: indexing is an automatic system activity.
Key fields
| Field | Meaning |
|---|---|
SystemIndex_Gthr / SystemIndex_GthrPth | Gather tables: one row per crawled item (document ID, scope, file name, last modified) and the folder paths |
SystemIndex_PropertyStore (ESE) / SystemIndex_1_PropertyStore (SQLite) | Properties of each item, keyed by work/document ID |
System_ItemPathDisplay | Full path of the item |
System_Size, System_ItemType, System_FileOwner | Size, extension/type, owner account |
System_DateCreated, System_DateModified, System_DateAccessed | File dates recorded when the item was indexed |
System_Search_GatherTime | When the indexer last processed the item |
System_Search_AutoSummary | Extract of the text content |
System_ThumbnailCacheId | Key that links the item to its thumbcache entry |
Timestamps
| Timestamp | Set when | Format | Pitfalls |
|---|---|---|---|
| Gather time | The indexer crawled or re-crawled the item | FILETIME, UTC | Indexing time, not user activity; can lag file changes by minutes or more |
| Created / modified / accessed | Copied from the file system at indexing | FILETIME, UTC | Snapshot at crawl time; later changes are missing until the next crawl |
| Gather table last modified | Item change detected by the crawler | FILETIME, UTC | Stored per gather row, compare with the property store |
Windows.edb / Windows.db file times ($SI) | Database updates | NTFS, UTC | Updated continuously by the service |
Retention and clearing
- The index follows the file system: when an item is deleted or leaves the indexed scope, its record is eventually removed. Remnants can remain in ESE free pages and
MSS*.logfiles, and in the SQLite-walfile and freelist on Windows 11. - "Rebuild index" in Indexing Options, stopping or disabling
WSearch, or deleting the database erase the current index. A rebuild is visible through a new database with recent file times. - Older copies of the index are often available in volume shadow copies, which makes it possible to compare what was indexed at different dates.
- A copy taken from a running system is usually in "dirty shutdown" state: replay the logs (
esentutl /r) on a copy before parsing if the tool requires a clean database.
Collection
- KAPE target:
WindowsIndexSearch(system index folder, per-user indexes and GatherLogs). - Velociraptor (
Windows.Triage.Targets):WindowsIndexSearch. - Built-in: the databases are locked by
SearchIndexer.exe; copy through a shadow copy, collect the logs as well, then work on the copy:
esentutl.exe /y "C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Windows.edb" /vss /d E:\case\search\Windows.edb
cd /d E:\case\search
esentutl.exe /mh Windows.edb
esentutl.exe /r MSS
/mh shows the database state (clean or dirty shutdown); /r MSS replays the MSS*.log files that must be copied into the same folder. On Windows 11, copy Windows.db, Windows-gather.db and their -wal/-shm files together, the same way.
Parsing tools
- SIDR (Search Index Database Reporter, Stroz Friedberg, open source): parses both ESE and SQLite indexes into file, internet history and activity history reports (CSV or JSON).
- ESEDatabaseView (NirSoft, free): browses
Windows.edbtables. - libesedb (Joachim Metz, open source):
esedbexportdumps every ESE table, including from damaged databases. - Thumbcache Viewer: loads the index to map thumbcache IDs to file paths.
- Any SQLite browser opens the Windows 11 databases; merge the WAL into a copy first (see SQLite WAL).
Investigation tips
- Search the property store for file names from the case (exfiltrated documents, tools, ransom notes): a hit shows the file existed at that path at indexing time, even if the $MFT no longer knows it.
- Read the auto-summary of deleted documents and scripts: it can recover content the attacker removed.
- Combine gather times with the USN journal to date when files appeared and disappeared.
- On Windows 11, look at the
-walfile before it is checkpointed: it can contain recently deleted records. - Carve
Windows.edband unallocated space for ESE pages (file carving) when records have been purged. - Remember that indexing is automatic: attribute user access with LNK files, Jump Lists or ShellBags.
Related artifacts
- ThumbcacheThumbcache cheat sheet: thumbcache_*.db files per Windows version, cache IDs, mapping to the Search index, legacy Thumbs.db and thumbnails of deleted files.
- Master File Table ($MFT)$MFT cheat sheet: FILE records, $SI vs $FN timestamps, resident data, deleted records, sequence numbers, timestomping checks and MFTECmd parsing.
- USN Journal ($UsnJrnl:$J)USN journal cheat sheet: $UsnJrnl:$J and $Max, record fields, reason flags, parent references, default size, rollover, fsutil and MFTECmd parsing.
- Browser artifacts (Chrome, Edge, Firefox)Browser forensics cheat sheet: Chromium and Firefox profile files, History and places.sqlite tables, WebKit and PRTime timestamps, downloads, cookies, cache.
- Volume Shadow Copies (VSS)Volume Shadow Copies cheat sheet: store files in System Volume Information, copy-on-write blocks, deletion by ransomware, mounting and parsing.
Glossary terms
- ESE database (Extensible Storage Engine)Microsoft's embedded transactional database format behind SRUM, WebCache, the Windows Search index and the BITS queue, often found dirty.
- SQLite write-ahead log (-wal)The -wal sidecar file where SQLite writes recent changes before merging them into the main database; often holds the newest evidence.
- FILETIMEThe 64-bit Windows timestamp format counting 100-nanosecond intervals since 1 January 1601 UTC, used by NTFS, the registry and many artifacts.
- File carvingRecovering files from raw disk data using content signatures such as headers and footers, without relying on file system metadata.