บทนำ
หลังจากติดตั้ง Security Updates ล่าสุดบน Windows 10 / Windows Server 2016 ผู้ใช้เริ่มรายงานปัญหาการล้มเหลวของบริการ CDPUserSvc อย่างต่อเนื่อง ในบทความนี้เราจะสำรวจว่า CDPUserSvc คืออะไร ทำไมจึงล้มเหลวเป็นระยะ วิธีแก้ไข และว่าสามารถปิดบริการนี้ได้หรือไม่
ข้อผิดพลาด: CDPUserSvc_xxxxx หยุดทำงาน
ผู้ใช้ Windows 10 / Windows Server 2016 หลายรายรายงานข้อผิดพลาดต่อไปนี้ที่ปรากฏเมื่อเริ่มต้น Windows, ปิดเครื่อง หรือแม้แต่ทุกๆ ไม่กี่นาที:
CDPUserSvc_xxxxx has stopped working. A problem caused the program to stop working correctly. Close the program.
ใน Application Log จะพบ Error ซ้ำๆ ดังนี้:
Faulting application name: svchost.exe_CDPUserSvc_12cff5, version: 10.0.14393.0 Faulting module name: cdp.dll, version: 10.0.14393.1715 Exception code: 0xc0000005 Fault offset: 0x0000000000193cf5 Faulting process id: 0x4484 Faulting application path: C:\WINDOWS\system32\svchost.exe Faulting module path: c:\windows\system32\cdp.dll
บน Windows 10 บางเครื่องพบข้อผิดพลาดนี้หลังติดตั้ง Anniversary Update (1607) หรือ Fall Creators Update (1709) ในกรณีนี้ควรลองรัน CDPUserSvc ในกระบวนการแยก (Isolated Process) หรือปิดบริการนี้ทันที (ดูด้านล่าง)
ในส่วนใหญ่ บั๊กนี้เกิดจาก Update KB4048953 (November Update) สำหรับ Windows Server 2016 และ Windows 10
หากติดตั้ง Update นี้อยู่ แก้ไขได้โดย Uninstall KB4048953 ให้ถูกต้อง (wusa.exe /uninstall /kb:4048953) หรือรอ Cumulative Update ถัดไปที่ควรแก้ไขบั๊กนี้แล้ว
CDPUserSvc Service คืออะไร
CDPUserSvc ย่อมาจาก Connected Devices Platform User Service ชื่อเต็มของบริการเป็นแบบ Dynamic ประกอบด้วยสตริง CDPUserSvc_ และตัวอักษรสุ่ม 5 ตัว (ในตัวอย่างคือ CDPUserSvc_65bd2)
Startup Type ของ CDPUserSvc แตกต่างกันในแต่ละ Build ของ Windows 10:
- Windows 10 1507 – Manual
- 1511 – Disabled
- 1607, 1703, 1709, 1803 – Automatic
ตรวจสอบบริการ:
sc query| find "CDPUser"
sc query CDPUserSvc_65bd2
บริการรันใน Process svchost: svchost.exe -k UnistackSvcGroup
Executable: %WinDir%\System32\CDPSvc.dll
น่าสนใจคือ ถ้าเปิด Services.msc จะเห็น Description ของ CDPUserSvc เขียนว่า:
"Failed to read description. error code 15100"
ไม่ชัดเจนว่าเกิดจากสาเหตุอะไร
Microsoft ไม่มีข้อมูลทางการเกี่ยวกับบริการนี้ แต่จากการวิเคราะห์ Connection ของ CDPUserSvc พบว่าบริการนี้เชื่อมต่อไปยังเซิร์ฟเวอร์ Microsoft และ OneDrive เป็นระยะ ส่งข้อมูลบางอย่างผ่าน HTTPS ดู Process ที่รันใน UnistackSvcGroup (ทั้งหมดมีตัวระบุ 5 ตัวอักษรเหมือน CDPUserSvc):
- CDPUserSvc_xxxxx
- OneSyncSvc_xxxxx – ซิงโครไนซ์อีเมล, Contacts, Calendar และข้อมูลผู้ใช้
- PimIndexMaintenanceSvc_xxxxx – บริการ Indexing Contacts เพื่อค้นหาเร็วขึ้น
- UnistoreSvc_xxxxx – จัดเก็บข้อมูลผู้ใช้แบบโครงสร้าง (Contacts, Calendar, Mail)
- UserDataSvc_xxxxx – ให้การเข้าถึงข้อมูลผู้ใช้แบบโครงสร้าง
น่าจะเป็นว่า CDPUserSvc รับผิดชอบซิงโครไนซ์ข้อมูลผู้ใช้กับเซิร์ฟเวอร์ Microsoft (Telemetry?) ดังนั้น CDPUserSvc อาจปิดได้โดยไม่ก่อให้เกิดปัญหากับ OS (หากไม่ใช้แอป Mail, Calendar, Contacts ติดมาของ Windows 10)
การแยก CDPUserSvc (Isolation)
วิธีแก้ไขอีกอย่างคือการรันบริการในโหมด Isolated รันคำสั่งใน Command Prompt (Run as Administrator):
sc config cdpusersvc type= own
ผลลัพธ์: [SC] ChangeServiceConfig SUCCESS
หลังจากนี้ CDPUserSvc จะรันใน svchost.exe Process ของตัวเอง ตรวจสอบว่าปัญหาการ Crash ยังคงอยู่หรือไม่ หากยังคงอยู่ ให้ลองปิดบริการ
วิธีปิด CDPUserSvc Service
หากหยุด CDPUserSvc_6b511 ด้วยตนเองและตั้งค่าเป็น Disabled ใน Services.msc มันจะกลับมาเริ่มใหม่ภายหลัง (ภายใต้ชื่ออื่น)
หมายเหตุ: น่าสนใจคือ ถ้าลบบริการนี้ออกจาก Registry มันจะกลับมาใหม่ภายใต้ชื่ออื่นในเวลาอันสั้น ระบบพยายามป้องกันการลบบริการนี้ (ดูเหมือน Microsoft ใช้ Best Practices ของนักพัฒนาไวรัส 😉)
สามารถปิดการเริ่มต้นของบริการนี้ผ่าน Registry ได้ โดยเปลี่ยนค่า Start จาก 2 (Automatic) เป็น 4 (Disabled) ใน Registry Key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CDPUserSvc
หรือรันคำสั่ง:
sc config CDPUserSvc start= disabled
reg add "HKLM\SYSTEM\CurrentControlSet\Services\CDPUserSvc /v "Start" /t REG_DWORD /d "4" /f