KMSアクティベーションカウントを手動で増やす方法|0xC004F038エラーの原因と対処法
当ブログではこれまで、Key Management Service(KMS)を使用したMicrosoft製品(MS OfficeやWindows)のインストール・構成・ライセンス認証に関する情報をお届けしてきました。本記事では、KMSの「アクティベーションカウンター」という概念を取り上げ、クライアントのライセンス認証数の仕組みと、KMSへのライセンス認証リクエスト数を手動で増やす方法について詳しく解説します。
目次
- KMSアクティベーションの仕組み
- ライセンス認証エラー 0xC004F038:KMSから報告されたカウントが不十分
- スクリプトでKMSサーバーの現在のカウントを増やす
- VMスナップショットを使用してライセンス認証数を増やす方法
KMSアクティベーションの仕組み
まず、KMSボリュームライセンス認証の基本的な仕組みをおさらいしましょう。Microsoft KMSライセンスの詳細な概要については、「KMS Activation FAQ」の記事をご参照ください。
ヒント:以下の関連記事も併せてお読みいただくことをお勧めします。
- Windows Server 2012 R2 / 2016へのKMSサーバーのインストール
- MS Office 2016 / 2013のKMSライセンス認証
Microsoftボリュームライセンスプログラムでは、1パッケージあたりの最小ライセンス数は25となっています。各ボリュームライセンス顧客には、社内のKMSサーバーをライセンス認証するための特別なCSVLKキー(KMSホストキー)が発行されます。社内のクライアント(WindowsおよびMS Officeの両方)は、インターネット経由でMicrosoftのライセンス認証サーバーに接続することなく、このKMSサーバー経由でライセンス認証を行えます。
ライセンス認証エラー 0xC004F038:KMSから報告されたカウントが不十分
ただし、インストールとライセンス認証を完了した直後のKMSサーバーは、接続してきたクライアントをすぐにはライセンス認証しません。新しく構築したKMSサーバーでOS(この例ではWindows 7 Professional)をライセンス認証しようとすると、次のようなエラーが表示されます。
Activating Windows 7, Professional edition
0xc004f038: ソフトウェア ライセンス サービスにより、コンピューターをライセンス認証できなかったことが報告されました。キー管理サービス(KMS)から報告されたカウントが不十分です。システム管理者に問い合わせてください。
この理由は、KMSサーバーにはアクティベーションカウント(KMSカウンター)と呼ばれる値があり、ネットワーククライアントからライセンス認証リクエストを受信するたびにこの値が増加する仕組みになっているためです。KMSサーバーは、アクセスしてきた各クライアントに一意の識別子CMID(Client Machine ID)を割り当て、ローカルデータベース(キャッシュ)に保存します。この時点では、リクエスト元のコンピューターのOSは即座にライセンス認証されず、ライセンス認証リクエストはサーバー内部のKMSキャッシュに蓄積されていきます。そして、過去30日以内に受信したライセンス認証リクエスト数が一定の最小しきい値を超えると、初めてライセンス認証が可能になります。
このしきい値は、サーバーOSからの5件、デスクトップWindows OSからの25件です。なお、デスクトップOSとサーバーOSのしきい値はそれぞれ独立しており、例えばクライアントOSからのリクエストが25件を超えていても、サーバーOSからのリクエストが5件に達しない限り、サーバーOSはライセンス認証されません。また、クライアントが30日間KMSサーバーに接続しなかった場合、そのクライアントは自動的にKMSデータベースから削除され、アクティベーションカウンターは1つ減少します。
特定のコンピューターのCMID値は、次のコマンドで確認できます。
Get-WmiObject -class SoftwareLicensingService -ComputerName salarypc121 | Select-object ClientMachineID
現在のCMIDをリセットするには、sysprepを実行するか、次のコマンドを使用します(再起動が必要です)。
slmgr /rearm
KMSサーバーが受信したライセンス認証リクエストの総数は、いつでも次のコマンドで確認できます。
slmgr /dli
この例では、KMSサーバー上のカウンター値(Current count)は50です。
注意:KMSサーバーがキャッシュするのは最新の50個のCMIDのみです。そのため、サーバー上のKMSクライアントの実際の数は50を大きく上回る場合があります。
カウンターの正確な値を取得するには、KMSサーバーで次のコマンドを実行します。
cscript slmgr.vbs /dlv 98ebfe73-2084-4c97-932c-c0cd1643bea7
Key Management Service cumulative requests received from clients
Total requests received: 2599
この出力は、このKMSサーバーがクライアントから累計2,599件のライセンス認証リクエストを受信したことを示しています。
KMSクライアントのライセンス認証有効期間は180日間であり、クライアントは7日ごと(デフォルト設定。slmgr.vbs /sriコマンドで変更可能)にライセンス認証の更新を試みます。180日以内にクライアントがライセンス認証を更新しなかった場合、KMSサーバーはそのクライアントのCMIDをデータベースから削除し、アクティベーションカウンターを減らします。なお、クライアントのOS自体は引き続き180日間ライセンス認証された状態が維持され、180日間更新が行われなかったクライアントは猶予期間モードへ移行します。
クライアントOSをKMSサーバーでライセンス認証しようとしてもカウントが増加しない場合、以下の原因が考えられます。
- CMIDの重複 — 通常、OSのクローン作成時に発生します。
- ネットワーク内に複数のKMSサーバーが存在する — デフォルトでは、クライアントは特別なDNSレコード _vlmcs._tcp(SRVレコード)を使用してドメイン内のKMSサーバーを自動検出します。サーバー名は
nslookup -type=srv _vlmcs._tcpコマンドで確認できます。KMSサーバーを手動で指定する場合は、slmgr /skms kms_server.woshub.com:1688のように実行します。 - クライアント側で無効なキーが指定されている — 例えば、公開GVLK(Generic Volume License Key)の代わりにMAKキーやリテールキーが指定されている、あるいはOSに対応しないキーが入力されているケースです。
スクリプトでKMSサーバーの現在のカウントを増やす
ボリュームライセンス契約(VLC)を結んでいる場合でも、KMSサーバーのライセンス認証しきい値を超えるのに十分な数のクライアントをすぐに用意できないことがあります(この問題は小規模ネットワークや隔離された環境で特に顕著です)。このような状況でクライアントがサーバーに対してライセンス認証を試みると、エラー0xC004F038が発生します。
こうした場合、管理者はKMSアクティベーションカウンターを手動で増やすことを検討します。しかし、実際にはそう簡単ではありません。sysprepを実行しても、ネットワークカードのMACアドレスを変更しても、KMSサーバーを欺くことはできません。よく知られた対策としては、不足分の仮想マシンを作成してKMSサーバーでライセンス認証する方法があります(仮想マシンはそれぞれ一意である必要があります)。ただし、この方法は手間がかかるうえ、すべての仮想マシンを稼働状態に保つか、180日ごとに再展開・起動し続ける必要があります。
そこで、より簡単な代替手段として、KMSサーバー上のアクティベーション数を増やせる次のCMDスクリプトをご紹介します。まず、必要なバージョンの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サーバーへのリクエスト回数に相当します(この例では、25台の一意なクライアントからのアクセスをシミュレートしています)。
スクリプトには5秒の待機時間が設けられています。これは、タイミングによってはシステムが「ファイルが使用中」の状態を返し、ライセンス認証の試行がカウントされないケースがあるためです。
重要:このスクリプトをKMSサーバー本体で実行しないでください。実行するとKMSサーバーの再ライセンス認証が必要になります(1つのVLCキーに対するライセンス認証は6回までしか許可されていません)。
スクリプトの実行後、KMSカウントを確認します。
slmgr /dli
Current countの値が25増加していれば成功です。以降、KMSサーバーはアクセスしてくるすべてのデスクトップOS(Windows 7、8、10のいずれでも)をライセンス認証できるようになります。実際のクライアント数が不足している場合は、ライセンス認証リクエストがないまま30日が経過するとカウントが減少するため、30日ごとにこのスクリプトを再実行する必要があります。
VMスナップショットを使用してライセンス認証数を増やす方法
上記のスクリプトでうまくいかない場合は、Hyper-VやVMwareの仮想マシンスナップショット機能を利用してカウンター値を増やすこともできます。手順は以下の通りです。
- Windows 10の新しい仮想マシンを作成します(ライセンス認証は行わず、GVLKキーも入力しません。作業中は一時的にネットワークから切断しておくのが安全です)。
- 仮想マシンのデスクトップに、次の2つのスクリプトを作成します。1つ目はCMIDのリセットとホスト名の変更を行い、2つ目はOSのライセンス認証を実行します。
Rearm.batstart "cmd /c slmgr /rearm"
timeout /t 15 /nobreak > NUL
wmic computersystem where name="%COMPUTERNAME%" call rename name="vmpc-%random%"
shutdown /r /t 0
kms_activate.batset skms= kms_server.woshub.com
sc start sppsvc
script.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 をWindowsのスタートアップに登録します。
- 仮想マシンのスナップショットを作成します。
- 管理者権限で Rearm.bat を実行します。仮想マシンが再起動し、KMSサーバーに対してライセンス認証が行われます。
- 仮想マシンをスナップショット作成時の状態にロールバックします。
- KMSサーバーに追加したいライセンス認証リクエストの数だけ、手順5と6を繰り返します。
この方法を使えば、実環境に十分な数のクライアントが存在しない場合でも、KMSサーバーのアクティベーションカウンターを効率的に増やすことができます。運用環境に適用する前に、必ずテスト環境で十分に検証することをお勧めします。
-
iPhoneのストレージ容量を増やす方法|外付けデバイス・クラウド活用・整理術を徹底解説
iPhoneは常にストレージ不足に陥りがちで、この傾向は今後も変わらないでしょう。どれだけ容量があっても、あっという間に埋まってしまうのが実情です。残念ながら、iPhoneのフラッシュストレージはロジックボードにはんだ付けされているため、極めて高度なDIYスキルを持つ人でもない限り、本体を開けてストレージを増設することは現実的ではありません。購入時に搭載されていた容量のまま使い続けるしかないのです。だからこそ、購入時には「必要だと思う容量よりワンランク上」を選ぶことを常におすすめしています。とはいえ、この問題へのアプローチ方法は他にもあります。本記事では、iPhoneのストレージを実質的に増や
-
画像の解像度を上げる方法|Photoshop・オンラインツール・AIソフトで高画質化する手順
画像の解像度とは、1インチあたりに表示されるピクセル数のことです。解像度が高いほど、画像にはより多くのピクセル情報が含まれ、高品質で精細な仕上がりになります。逆に解像度が低いと、ピクセル数が少なく、粗く見える低画質の画像になってしまいます。しかし、細部をもっと鮮明に確認したい、印刷や拡大表示に使いたいといった理由で、既存の画像の解像度を上げたいと考えるユーザーも少なくありません。本記事では、画像の解像度を引き上げるための3つの方法を、具体的な手順とともにご紹介します。Photoshopで画像の解像度を上げる方法Photoshopは、画像編集アプリケーションの中でも最も有名で高性能なソフトウェア