🆕 Day 20. New Job. "Simple" Task.
New organisation, new structure, new work. I joined SCEAI Qatar as a Hybrid Infrastructure Admin — honestly, the kind of role I'd been waiting for. Cloud-first environment, Azure Entra-joined devices, no on-prem servers. Everything goes through Intune.
It was a normal day. My task? Set the organisation's wallpaper and lock screen on around 100 Windows end devices. Pilot it on the IT department laptops first, then roll out. Clean, straightforward. Or so I thought.
📦 The Textbook Approach (and Why It Partially Failed)
I went with the recommended Intune approach: App deployment to copy the image locally to the device, then a Device Configuration Profile using the Personalization CSP to enforce the wallpaper and lock screen.
C:\ProgramData\CorporateWallpaper\ on each device.- Verified locally — image was there
- Worked on some devices
- Silently failed on others
- No useful error in Intune
The frustrating part? I could manually verify the image was on the device. It was sitting exactly where it should be. But the lock screen? Still showing whatever Windows felt like showing that day.
Error Code: 65000
Description: The CSP node exists, but Windows refuses
to process it on this device state.
Registry check:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\PersonalizationCSP
Status: Key never created → CSP rejected before processing
🔄 Going All-in on the Script
I tried a second approach: skip the CSP profile entirely. Let the Win32 app do everything — copy the image, edit the registry, apply the policy, handle the lock screen. One script to rule them all.
Same result.
So I hit the internet. Reddit. Microsoft Community. Various forums. The response from a lot of threads was consistent: Windows 11 Pro doesn't fully support Personalization CSP. Several users reported the same issue on build 26200. It looked like a known Microsoft limitation.
I made a decision I almost regret: I closed the laptop and moved on. "Build limitation. Microsoft's fault. Nothing I can do." I logged it as a known Windows 11 Pro issue and stepped away.
But something kept bothering me.
Part 4 — The Nagging Question🤔 Wait. How Can Microsoft Stop You From Setting YOUR Own Lock Screen?
A few days later, a thought hit me: How can Microsoft completely block an admin from setting a lock screen? It worked on some devices. Those weren't Enterprise SKUs. Same build. Same tenant. Different result.
That inconsistency was the crack. If it were a true platform limitation, it would be consistent. It wasn't. I got a test laptop for an unrelated task, and decided to dig in — properly this time.
Stopping an investigation midway isn't part of how I work. Not when there's still something unexplained. Inconsistency means there's a root cause — you just haven't found it yet.
🔬 Breaking Into Windows To See What's Actually Happening
I solved the wallpaper part first — ran the script manually on the test laptop, it worked, rewrote the Intune app, deployed. Done.
Lock screen was the beast. I tried registry edits. Tried GPO. Nothing. So I did what any reasonable infra admin does when the official tools fail: I went deeper.
Think of Windows lock screen like printing a photo:
1. You give Windows your image → 2. Windows processes it (resize, validate, secure it) → 3. Windows saves a "printed copy" → 4. Lock screen displays that printed copy.
Your issue was that Step 2 was silently failing. Step 4 still worked fine — it just had nothing new to show.
I took ownership of a folder that Windows really, really doesn't want you inside:
# Windows guards this folder heavily. Ownership = SYSTEM by default. takeown /f "C:\ProgramData\Microsoft\Windows\SystemData" /r /d y icacls "C:\ProgramData\Microsoft\Windows\SystemData" /grant administrators:F /t # Now let's see what's actually inside...
What I Found Inside
Two SID folders. Two cached lock screen images. One for the current user — one for S-1-5-18, which is the LOCAL SYSTEM account. The one I could actually view? Not the active lock screen. The one I couldn't open (SYSTEM-owned, locked)? Almost certainly the one Windows was actually using.
| Location | SID | Accessible? | Active? |
|---|---|---|---|
| LockScreen_O | S-1-12-1-... (User) | ✓ Yes | ✗ Not shown |
| LockScreen_Z | S-1-5-18 (SYSTEM) | ✗ Locked | ⚡ This one |
I ran a hash comparison. My custom lock.jpg vs what was sitting in the SYSTEM cache. Different hashes. Windows had generated something — it just used the default fallback image instead of mine.
Get-FileHash "C:\ProgramData\CorporateWallpaper\version1\lock.jpg" # SHA256: 3A7F2C... Get-FileHash "C:\ProgramData\Microsoft\Windows\SystemData\S-1-5-18\ReadOnly\LockScreen_Z\LockScreen___1920_1080_notdimmed.jpg" # SHA256: 9B4E1D... ← DIFFERENT. Windows used its own fallback.
C:\ProgramData\Microsoft\Windows\SystemData\. Instead of your image, it generates the default fallback.LockScreen___1920_1080_notdimmed.jpg — this is the actual file displayed. It exists. It just has the wrong image.💥 What If I Just… Skip the Middle?
Here's the thing about that pipeline: the display layer is working. The cache layer is working. Only the processing layer is broken. So the question becomes — what if I just skip the broken part entirely?
Instead of Intune → CSP → ingest → generate → display, what if I go: replace final file → display immediately?
That's exactly what I tried. I:
C:\ProgramData\CorporateWallpaper\LockScreen___1920_1080_notdimmed.jpg with our corporate image.# Take ownership takeown /f "C:\ProgramData\Microsoft\Windows\SystemData\S-1-5-18\ReadOnly\LockScreen_Z" /r /d y icacls "...\LockScreen_Z" /grant SYSTEM:F administrators:F # Stop the UI processes Stop-Process -Name LockApp, ShellExperienceHost -Force -ErrorAction SilentlyContinue # Inject our image directly into the secure cache Copy-Item "C:\ProgramData\CorporateWallpaper\lock.jpg" -Destination "...\LockScreen___1920_1080_notdimmed.jpg" -Force # Restore ACLs and refresh icacls "...\LockScreen_Z" /reset /t
Then I pressed Win + L.
🧠 The Renderer Was Never Broken
This is the part that reframes everything. After the bypass worked, I sat back and thought about what I'd actually found.
LockApp works. The SystemData cache works. The display pipeline works perfectly.
The ONLY broken part was the "image ingestion / secure asset generation" step — the bit where Windows takes your source image and processes it into the secure cache. That step was silently failing without telling anyone.
Most admins troubleshoot at the policy level and give up. The actual problem was two layers deeper — and the fix was to skip those broken layers entirely.
Writing registry keys doesn't trigger the Personalization CSP ingestion pipeline. It never did. The CSP does more than write to registry — it validates the image, stages the asset, and invokes the secure desktop import. A script that mimics just the registry part is missing the actual magic.
Part 8 — The Architecture That Actually Works🏗️ Final Deployment Design
After all of this, the final architecture that works reliably in production is a split approach:
| Component | Responsibility | Context |
|---|---|---|
| Win32 App (Intune) | Copy images locally + inject lock screen into SystemData cache | SYSTEM |
| Device Remediation (Intune) | Periodically reapply if Windows overwrites the cache | SYSTEM |
| Wallpaper (Separate) | Handled via user-context script or logon task | USER |
🎯 What This Whole Thing Actually Taught Me
The bypass isn't officially supported, which is why the remediation loop matters. But it works — reliably — where nothing else did.
If you hit the same wall: check your S-1-5-18\ReadOnly\LockScreen_Z folder. Compare the hash to your source image. If they don't match, the pipeline dropped your image and fell back to default. The bypass script is your answer.
💬 Discussion
Hit the same wall with Personalization CSP? Found a better fix? Drop it below.