License Manager

◆概要

『 License Manager 』はソフトウェアに同時稼動数管理の機能を提供し、ソフトウェアの不正使用を事前に防止できます。

◆特徴

◆動作仕様

#ライセンスファイルのイメージ

License Manager は License.exe で作成されるライセンスファイルを使用してライセンス数を管理しています。 ライセンスファイルはブロックと呼ぶ単位で32に分割され、ライセンスはブロック毎に最大512ライセンス割り当てることができます。 このため最多16,384ライセンスを一つのライセンスファイルによって管理することを可能にしています。

ライセンスは、ソフトウェアより ReserveLicense を呼び出すことにより取得します。一般的にはソフトウェアを起動したときでしょう。 そして終了時には ReleaseLicense を呼び出すことにより解放します。この動作繰り返すことによりライセンス管理を実現します。

◆ファイルの説明

以下のファイルを適当なフォルダに保存してください。 License.exe と Keygen.exe はライセンスファイルを生成するためだけに使用し、License.dll とライセンスファイルのみソフトウェアと一緒に配布してください。

License.dll ・・・本体です。アプリケーションからはこのモジュールを使用します。
 
License.exe ・・・ライセンスファイルを作成します。
Keygen.exe ・・・ライセンスキー発行を発行します。
 
License.dat ・・・ライセンスファイルです。License.exe で作成します。

注意)
License.exe と Keygen.exe の実行には License.dll が必要になります。同一フォルダ内へ保存するようにしてください。

◆関数の説明

License.dll は以下の関数を提供しています。

int CertificateModule(
HINSTANCE hInstance // License.dll を利用するモジュールのインスタンスハンドル
);
機能

ライセンスファイルのアクセス許可を取得します。『モジュールを検証する』が指示され、作成されたライセンスファイルを使用するときに実行しなければなりません。
戻値

返された値が0未満の場合は異常終了の通知です。正常に終了した場合は0が返されます。
補足

この関数はライセンスファイルを作成するときに、『モジュールを検証する』で指定されたモジュール以外のアクセスを拒否します。


int GetFreeData(
LPVOID lpVoid, // データのバッファ ( max 255byte )
WORD wLen // コピーするデータのサイズ
);
機能

ライセンスファイルを作成するときに、入力されたフリーデータを取得します。
戻値

返された値が0未満の場合は異常終了の通知です。正常に終了した場合は0が返されます。
補足

このデータは License Manager で何の意味も持ちません。オリジナルの認証キーや、シリアル番号の設定に利用してださい。


int GetParam(
WORD wCmd, // 取得するデータのタイプ
int nNum, // 予約済み
LPVOID lpVoid // 予約済み
);
機能

License Manager で設定されているパラメータを取得します。
戻値

返された値が0未満の場合は異常終了の通知です(※戻り値が−1の場合は、指定されたデータタイプがサポートされていない場合です)。正常に終了した場合は取得するパラメータによって異なります。
補足

wCmd へ指定できるパラメータは、後述の表をご参照ください。


int GetLicenseVersion(
void // 無し
);
機能

License Manager で現在選択されている、ライセンスファイルのバージョンを取得します。
戻値

返された値が0未満の場合は異常終了の通知です。それ0以上の値はライセンスファイルのバージョンを意味します。
補足

バージョンは '0x0103' (ver1.3) というように 16 進数で表されています。


int ReserveLicense(
WORD wBlock, // ブロックナンバー
LPCSTR lpszPassword // 認証のパスワード
);
機能

ライセンスを取得します。正常終了した場合は ReleaseLicense されるまで解放されません。ブロックナンバーには1から32まで任意の数値を指定してください。 認証のパスワードはライセンスファイルを作成するときに指定した文字列を渡します。 パスワードが一致しない場合はエラーになります。
戻値

返された値が0未満の場合は異常終了の通知です。正常に終了した場合は、ブロックナンバー毎に一意の数値である、ライセンスナンバーが返されます。
補足

ライセンスファイルの初期設定は、License.dll と同一フォルダ内にある License.dat を使用します。ライセンスファイル名が異なる場合には、ReplaseLicenseHandle で予め変更しておいてください。
同じブロックナンバーで複数のライセンスを取得することはできません。ライセンスはインスタンス毎に割り当てられる為、他のスレッドにおいても同様となります。


int ReleaseLicense(
WORD wBlock // ブロックナンバー
);
機能

ライセンスを解放します。ブロックナンバーには ReserveLicense で指定を行った数値を指定してください。
戻値

返された値が0未満の場合は異常終了の通知です。正常に終了した場合は、取得していたライセンスナンバーが返されます。


int ReplaseLicenseHandle(
LPCSTR lpszPath // ライセンスファイルの位置
);
機能

使用するライセンスファイルを変更します。名称を変えた場合やパスを変更したい場合などに利用します。
戻値

返された値が0未満の場合は異常終了の通知です。正常に終了した場合は0が返されます。
補足

この関数を実行すると、いままで取得したライセンスは全て解放されます。


GetParam のデータタイプ
タイプ説明
1誤ったパスワードでアクセスを行ったとき、License Manager を停止させる時間。ライセンスファイルの設定により変化する。
2License.dll のバージョン。'0x0103' (ver1.3) というように 16 進数で表されている。


異常終了時の戻り値
-1:ライセンスファイルが見つからないか破損しています。
-2:指定されたブロックナンバーが不正です。(1〜32が範囲)
-3:ライセンス数が制限を超えました。
-4:すでにライセンスを取得しています。
-5:ライセンスを取得していません。
-6:指定されたパスワードが間違っています。
-7:不正なモジュールからアクセスされました。
-8:アクセスの許可がされていません。

◆ライセンスファイルの作成

ライセンスファイルは License.exe を使用して用意します。

#実行画面

@環境に合わせて設定を行います。

ライセンスファイル
作成するライセンスファイル名を記述します。すでに存在しているファイル名を指定した場合は、そのファイルに記録されたライセンス情報を表示します。上書きでの作成はできませんのでご注意ください。


ライセンス情報
1〜32の番号はライセンスブロックを表しています。番号にはそれぞれに入力項目を持ちますが左はライセンス数、右はパスワードを入力してください。パスワードは ReserveLicense で指定する文字列と一致させなければなりません。ライセンス数は最多512、パスワードは最長8文字まで指定できます。


ファイルを検証する
ライセンスファイルの不正コピーの検査を行います。もし異常が検出された場合は破損ファイルとして、 ReserveLicense でエラーになります。検査機能を有効にさせる場合にはライセンスキーの入力が必要になり、このライセンスキーは Keygen.exe で取得します。
※データの改竄は、この項目に関係無く検査されます。

#実行画面

Keygen.exe の実行には License.dat を保存する場所にコピーし、そのコピーされた Keygen.exe を実行するようにしてください。この手順を行わなければ正しいキーは発行されませんのでご注意ください。
ライセンスキーの入力は省略することも可能です。その場合はライセンスファイルの作成先から自動的に取得され登録されます。



モジュールの検証する
ライセンスファイルにソフトウェアのコードパターンを登録します。License.dll を利用する実行可能モジュールファイル ( exe や dll ) のパスを入力してください。ファイルの場所は何処にあってもかまいません。この設定を行った場合、指示された実行可能モジュール以外のプログラムからアクセスができません。


フリーデータ
255バイト以内で自由に入力ができます。


オプション
Sleep ・・・ この項目をチェックしライセンスファイルを作成すると、誤ったパスワードでアクセスを行ったときに License Manager を一時停止させることができます。停止時間は右側のエディットボックスに秒単位 (1〜99秒) で指定します。これはパスワードを解析するツール対策に用意した設定です。
※文字列を少しずつ変更しながら ReserveLicense を実行し、パスワードを取得するツールを想定しました。
A設定が完了したらOKボタンを押します。暫くすると終了のメッセージが表示され、生成が完了します。

◆留意事項

ver1.2 以前のライセンスキー発行プログラム ( Keygen.exe ) は単体で動作しましたが、ver1.3 より License.dll が必要になりました。Keygen.exe を配布する場合には、必ず一緒に配布してください。

レジストリなどの変更は一切行っていないため、アンインストールを行う場合はファイルを削除していただくだけです。

ネットワーク上でライセンス管理を行う場合、ライセンスファイルを共有させてください。

『ファイルの妥当性を検証』を行っている場合、ライセンスファイルが発行されたマシンのディスクを交換したり、再フォーマットを行った場合はライセンスファイルが使用できなくなります。この場合は再度ライセンスファイルの発行を行ってください。

強制終了やネットワークの障害でライセンスが解放されないことがあります。その場合は異常となったマシンの再起動を行ってください。再起動で解放されない場合は、サーバーから解放されていない資源を強制的に解放させる必要があります。

License Manager は次のオペレーティングシステムで利用できます。
#ver1.0 は下記のOSを全て動作確認しましたが、ver1.3 は Win2K と Win98 でのみ検査しています。もし異常が発生するようでしたら、お手数ですがご一報をください。