ในบล็อกของเราได้นำเสนอข้อมูลเกี่ยวกับการติดตั้ง กำหนดค่า และเปิดใช้งานผลิตภัณฑ์ Microsoft (MS Office และ Windows) โดยใช้ Key Management Service (KMS) แล้ว วันนี้เราจะมาดูเกี่ยวกับแนวคิด KMS Activation Counter วิธีนับจำนวนการเปิดใช้งานของไคลเอ็นต์ และวิธีเพิ่มจำนวนคำขอเปิดใช้งาน KMS ด้วยตนเอง
เข้าใจการเปิดใช้งาน KMS
ก่อนอื่น ให้กลับไปทบทวนพื้นฐานทางทฤษฎีของ KMS Volume Activation ภาพรวม Microsoft KMS Licensing อธิบายรายละเอียดในบทความ KMS Activation FAQ
เคล็ดลับ แนะนำให้อ่านบทความต่อไปนี้บนเว็บไซต์ของเราด้วย:
- การติดตั้ง KMS Server บน Windows Server 2012 R2 / 2016
- การเปิดใช้งาน KMS สำหรับ MS Office 2016 / 2013
ตามโปรแกรม Microsoft Volume License จำนวน License ขั้นต่ำในหนึ่งแพ็กเกจคือ 25 ใบ ลูกค้า Volume License แต่ละรายจะได้รับ CSVLK Key (หรือ KMS Host Key) 特殊 ซึ่งใช้สำหรับเปิดใช้งาน KMS Server ภายในองค์กร ไคลเอ็นต์ภายใน (ทั้ง Windows และ MS Office) สามารถเปิดใช้งานบนเซิร์ฟเวอร์นี้ผ่าน KMS Server ได้ โดยไม่ต้องติดต่อเซิร์ฟเวอร์เปิดใช้งานของ Microsoft ผ่านอินเทอร์เน็ต
ข้อผิดพลาดการเปิดใช้งาน 0xC004F038: จำนวนที่ KMS รายงานไม่เพียงพอ
อย่างไรก็ตาม หลังจากติดตั้งและเปิดใช้งาน KMS Server แล้ว เซิร์ฟเวอร์จะ ไม่ เปิดใช้งานไคลเอ็นต์ที่ติดต่อมาทันที หากลองเปิดใช้งาน OS (Windows 7 Pro ในตัวอย่าง) บน KMS ใหม่ จะได้ข้อผิดพลาด:
Activating Windows 7, Professional edition
0xc004f038: The Software Licensing Service reported that the computer could not be activated. The count reported by your Key Management Service (KMS) is insufficient. Please contact your system administrator.

เหตุผลคือ KMS Server มี ما ที่เรียกว่า Activation Count (KMS Counter) ซึ่งค่าจะเพิ่มขึ้นทุกครั้งที่รับคำขอเปิดใช้งานจากไคลเอ็นต์เครือข่าย เมื่อถูกเข้าถึง KMS Server จะกำหนด Unique Identifier CMID (Client Machine Identification) ให้แต่ละไคลเอ็นต์ และเก็บไว้ในฐานข้อมูลท้องถิ่น (Cache) ในกรณีนี้ OS ของคอมพิวเตอร์ที่ส่งคำขอจะ ไม่ ถูกเปิดใช้งานทันที คำขอเปิดใช้งานเหล่านี้จะสะสมใน KMS Cache ภายในบนเซิร์ฟเวอร์ จนกว่าจะเกินเกณฑ์ขั้นต่ำของคำขอเปิดใช้งานที่ได้รับภายใน 30 วันที่ผ่านมา เกณฑ์นี้คือ 5 คำขอจาก Server OS และ 25 คำขอจาก Desktop Windows OS (เกณฑ์การเปิดใช้งานสำหรับ Desktop/Server OS แยกจากกัน คือ ถ้าจำนวน KMS Count เกิน 25 จาก Client OS เซิร์ฟเวอร์นี้จะไม่เปิดใช้งาน Server OS จนกว่าจำนวนคำขอจากแพลตฟอร์ม Server จะถึง 5) หากไคลเอ็นต์ไม่ติดต่อ KMS Activation Server ภายใน 30 วัน จะถูกลบออกจากฐานข้อมูล KMS อัตโนมัติ และ KMS Activation Counter จะลดลง 1
สามารถดูค่า CMID บนคอมพิวเตอร์ใดคอมพิวเตอร์หนึ่งได้ด้วยคำสั่ง:
Get-WmiObject -class SoftwareLicensingService -ComputerName salarypc121 | Select-object ClientMachineID

สามารถรีเซ็ต CMID ปัจจุบันได้โดยรัน Sysprep หรือใช้คำสั่ง:
slmgr /rearm
(ต้องรีบูท)
สามารถดูจำนวนคำขอเปิดใช้งานทั้งหมดที่ KMS Server ได้รับตลอดเวลาได้ด้วยคำสั่ง:
slmgr /dli
ในตัวอย่าง ค่า KMS Counter (Current count) บน KMS Server คือ 50
หมายเหตุ KMS Server เก็บ Cache เฉพาะ CMID ล่าสุด 50 ตัว (ในกรณีนี้ จำนวน KMS Clients บนเซิร์ฟเวอร์อาจมากกว่า 50 มาก)

เพื่อดูค่าตัวนับที่แม่นยำ ให้รันคำสั่งต่อไปนี้บน KMS Server:
cscript slmgr.vbs /dlv 98ebfe73-2084-4c97-932c-c0cd1643bea7
Key Management Service cumulative requests received from clients
Total requests received: 2599
หมายความว่า KMS Server นี้ได้รับคำขอเปิดใช้งานจากไคลเอ็นต์ 2599 ครั้ง

KMS Client Activation Period คือ 180 วัน และทุก 7 วัน (7 วันเป็นค่า Default สามารถเปลี่ยนได้ด้วยคำสั่ง slmgr.vbs /sri) ไคลเอ็นต์จะพยายามต่ออายุการเปิดใช้งาน (อีก 180 วัน) หากภายใน 180 วัน ไคลเอ็นต์ไม่ต่ออายุการเปิดใช้งานบน KMS Server เซิร์ฟเวอร์จะลบ CMID ของไคลเอ็นต์ออกจากฐานข้อมูลและลด Activation Counter OS ของไคลเอ็นต์ยังคงเปิดใช้งานอยู่ 180 วัน ไคลเอ็นต์ที่ไม่ได้ต่ออายุการเปิดใช้งานบน KMS Server ภายใน 180 วัน จะเข้าสู่โหมด Grace Period
กรณีที่พยายามเปิดใช้งาน Client OS บน KMS Server แต่นับไม่เพิ่มขึ้น อาจเกิดจาก:
- CMID ซ้ำกัน (มักเกิดจากการ Clone OS)
- มี KMS Server มากกว่าหนึ่งในเครือข่าย โดย Default ไคลเอ็นต์จะค้นหา KMS Server ใน Domain เองผ่าน DNS Record เฉพาะ srv _vlmcs._tcp (สามารถดูชื่อเซิร์ฟเวอร์ได้ด้วยคำสั่ง:
nslookup -type=srv _vlmcs._tcp) สามารถระบุ KMS Server ด้วยตนเองได้:slmgr /skms kms_server.woshub.com:1688) - ระบุ Key บนไคลเอ็นต์ผิด เช่น ใช้ MAK / Retail Key แทน GVLK (Generic Volume License Key) หรือ Key ไม่ตรงกับ OS
สคริปต์เพิ่ม KMS Server Current Count
ในบางกรณี แม้จะซื้อ VLC แล้ว แต่ยากที่จะหาจำนวนไคลเอ็นต์ที่จำเป็นเพื่อให้เกินเกณฑ์การเปิดใช้งานของ KMS Server ทันที (ปัญหานี้เฉพาะเจาะจงกับเครือข่ายขนาดเล็กหรือแยกต่างหาก) เมื่อไคลเอ็นต์พยายามเปิดใช้งานบนเซิร์ฟเวอร์ในกรณีนี้ จะเกิดข้อผิดพลาด 0xC004F038
ในกรณีนี้ ผู้ดูแลระบบจะคิดหาวิธีเพิ่ม KMS Activation Counter ด้วยตนเอง แต่ไม่ได้ง่ายอย่างที่คิด... ไม่ว่าจะเป็น Sysprep หรือการเปลี่ยน MAC Address ของการ์ดเครือข่าย ก็ไม่สามารถหลอก KMS Server ได้ วิธีที่นิยมคือสร้าง Virtual Machine จำนวนที่ขาดหายไปและเปิดใช้งานบน KMS Server (VM ต้องเป็น Unique) แต่วิธีนี้ใช้เวลานาน และต้องดูแลให้ VM ทั้งหมดทำงานอยู่เสมอ (หรือ Redeploy/เปิดใหม่ทุก 180 วัน)
เป็นทางเลือกที่ง่ายกว่า เราแนะนำให้ใช้ CMD Script ต่อไปนี้ที่ช่วย เพิ่มจำนวนการเปิดใช้งานบน KMS Server ติดตั้ง OS เวอร์ชันที่ต้องการ (ในตัวอย่างคือ Windows 7 Professional) สร้างโฟลเดอร์และคัดลอกไฟล์ BAT ต่อไปนี้เข้าไป ในโฟลเดอร์เดียวกันสร้างไฟล์ว่าง 2 ไฟล์ชื่อ:
7B296FB0-376B-497e-B012-9C450E1B7327-5P-0.C7483456-A289-439d-8115-601632D005A0
7B296FB0-376B-497e-B012-9C450E1B7327-5P-1.C7483456-A289-439d-8115-601632D005A0
รัน increase_kms_count.bat:
@echo off
set skms=kms_server.woshub.com
for %%i in (. . . . . . . . . . . . . . . . . . . . . . . . . .) do call :Act %skms%
slmgr /ato
sc stop sppsvc
goto :end
:Act
sc stop sppsvc
xcopy "7B296FB0-376B-497e-B012-9C450E1B7327-5P-0.C7483456-A289-439d-8115-601632D005A0" "%systemroot%\system32\*" /H /R /K /Y
xcopy "7B296FB0-376B-497e-B012-9C450E1B7327-5P-1.C7483456-A289-439d-8115-601632D005A0" "%systemroot%\system32\*" /H /R /K /Y
sc start sppsvc
cscript.exe "%systemroot%\system32\slmgr.vbs" /skms %1
ping 127.0.0.1 -n 5 > nul
cscript.exe "%systemroot%\system32\slmgr.vbs" /ipk FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4
cscript.exe "%systemroot%\system32\slmgr.vbs" /ato
sc stop sppsvc
:end
จำนวนจุดในบรรทัดที่ 3 คือจำนวนคำขอที่ต้องการส่งไปยัง KMS Server (ในตัวอย่างจำลองการเข้าถึงของ 25 ไคลเอ็นต์ Unique)
ในสคริปต์เพิ่ม Delay 5 วินาที ในบางกรณีระบบแจ้งว่าไฟล์ Busy ทำให้การพยายามเปิดใช้งานไม่นับ
สำคัญ ห้ามรันสคริปต์นี้บน KMS Server เอง! มิฉะนั้นจะต้องเปิดใช้งาน KMS Server ใหม่ (อนุญาตให้เปิดใช้งาน VLC Key เดียวกันได้เพียง 6 ครั้งเท่านั้น)
หลังจากรันสคริปต์เสร็จ ให้ตรวจสอบ KMS Count:
slmgr /dli
ค่า Current count ควรเพิ่มขึ้น 25 หลังจากนั้น KMS Server จะเปิดใช้งานระบบ Desktop ทั้งหมดที่เข้าถึง (Windows 7, 8, 10) ต่อจากนี้ สคริปต์นี้ (ถ้ายังไม่มีไคลเอ็นต์จริงพอ) ควรรันทุก 30 วัน เนื่องจาก Activation Count จะลดลงหากไม่มีคำขอเปิดใช้งานเข้ามา
วิธีเพิ่ม Activation Count ด้วย VM Snapshots
หากสคริปต์ข้างต้นไม่ช่วยเพิ่ม Activation Count บน KMS Server ได้ สามารถเพิ่มค่าตัวนับได้โดยใช้เทคโนโลยี Snapshot ของ Virtual Machine ใน Hyper-V / VMWare ขั้นตอนดังนี้:
- สร้าง VM ใหม่กับ Windows 10 (อย่าเปิดใช้งาน และอย่าใส่ GVLK Key แนะนำให้ตัดเครือข่ายชั่วคราว)
- สร้างสคริปต์ 2 ไฟล์บน Desktop ของ VM หนึ่งไฟล์สำหรับ Reset CMID และเปลี่ยน Hostname อีกไฟล์สำหรับเปิดใช้งาน OS
Rearm.bat
kms_activate.batstart “cmd /c slmgr /rearm" timeout /t 15 /nobreak > NUL wmic computersystem where name="%COMPUTERNAME%" call rename name="vmpc-%random%" shutdown /r /t 0set skms= kms_server.woshub.com sc start sppsvc cscript.exe "%systemroot%\system32\slmgr.vbs" /skms %1 cscript.exe "%systemroot%\system32\slmgr.vbs" /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX cscript.exe "%systemroot%\system32\slmgr.vbs" /ato - วาง kms_activate.bat ไว้ใน Startup ของ Windows
- สร้าง Snapshot ของ Virtual Machine
- รัน Rearm.bat ด้วยสิทธิ์ Administrator VM จะรีบูทและเปิดใช้งานบน KMS Server
- Rollback VM กลับสู่ Snapshot ก่อนหน้า

- ทำซ้ำขั้นตอน 5, 6 ตามจำนวนคำขอเปิดใช้งานที่ต้องการเพิ่มบน KMS Server