Transaction Mapped File Error 0x1AB2 — Quick Fix
This pops up when you map a remote file into memory while a transaction is active. The fix is to stop using transactions or use local files.
When This Error Shows Up
You're running some custom code or a legacy app that uses transactional NTFS (TxF) — you know, the CreateFileTransacted or CreateTransaction APIs. Somewhere in the middle of that transaction, your code tries to create a memory-mapped file (via CreateFileMapping or MapViewOfFile) on a file sitting on a remote share or UNC path. Boom — ERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE (0x1AB2).
Had a client last month whose backup script was using transactional writes to a network drive for consistency. The moment it tried to memory-map a chunk of that file for faster parsing, the whole thing tanked. Took me longer to find the error code in the docs than to fix it.
Root Cause — Plain English
Windows Transactional NTFS (TxF) is a kernel-level feature that lets you wrap file operations in a transaction — commit or rollback everything together. But here's the deal: memory-mapped files require the kernel to create a section object that maps physical storage directly into the virtual memory space. Remote files (SMB shares) don't support this because the storage isn't local and the Kernel Transaction Manager can't coordinate the page fault handling across the network.
Microsoft actually deprecated TxF in Windows 10 and Server 2016. It's still available but not actively developed. The bottom line: you can't combine transactions with memory-mapped I/O on remote files. Period. The kernel throws this error to say "pick one — transactions or remote memory mapping, not both."
The Fix — Step by Step
Skip the registry hacks and workarounds — they don't exist for this one. You need to change how your code handles the file. Here are your options (try them in order):
Option 1: Kill the Transaction
- Remove the transaction wrapper around the memory-mapped file operation. If you only need consistency on the mapping itself, use normal file locking (
LockFileEx) instead. - Example: change from
CreateFileTransactedtoCreateFilewithFILE_FLAG_NO_BUFFERINGif performance is a concern. - Test the code. If the transaction was only there for atomicity on the mapped section, you don't need it — memory-mapped files are already cached and coherent within the same process.
Option 2: Move the File Locally
- Copy the remote file to a local temp directory before opening the transaction.
- Use
GetTempPathandGetTempFileNamein C/C++ orPath.GetTempFileNamein .NET. - Perform your transactional operations (including memory mapping) on the local copy.
- After commit, copy the file back to the remote share. If the copy fails, handle the rollback manually.
- This adds I/O overhead but keeps the transaction intact. For small files (<1GB), it's fine.
Option 3: Use Non-Transactional APIs with Checkpoints
- If you need the atomicity of a transaction across multiple files, consider using a sidecar metadata file to track state.
- Write changes to a local staging folder, then use
MoveFileExwithMOVEFILE_REPLACE_EXISTINGto swap in the new version on the remote share. - This isn't true ACID, but it's close enough for most backup and sync scenarios.
If It Still Fails — Check These
- Is the file actually remote? Even mapped drives (e.g., Z:\) count as remote. Check
fsutil fsinfo drivesand see if the volume type isREMOTE. - Are you using TxF at all? Some frameworks (like older .NET versions) wrap file writes in transactions behind the scenes. Use
Process Monitorto see ifCreateFileTransactedis being called. - Is the SMB server modern? SMB 1.0 is ancient and doesn't support any transactional mapping. SMB 2/3 also don't, but at least they give better error messages.
- Are you mixing 32-bit and 64-bit processes? If the remote file is being mapped by a 32-bit process and the transaction was started by a 64-bit process, you'll get cross-session issues. Stick to one architecture.
Bottom line: this error isn't subtle. Once you stop trying to map remote files inside transactions, it vanishes. If your app demands both, you need to redesign that piece — there's no magic registry key or hotfix.
Was this solution helpful?