リモートコマンドの出口(DLL)をあらかじめ用意することで、以下の項目をカスタマイズすることができます。
実際に発行するコマンド文字列
リモートコマンド発行の可否
確認メッセージの表示の是非
作成したDLLは、DLL名を“mprcmdex.dll”とし、リモートコマンドを実際に発行する運用管理クライアントのパスの通った任意のディレクトリに格納してください。
リモートコマンドの出口情報には以下の2つの関数があります。
ChkRcmd()
コンソール操作制御が無効の場合に使用します。
コンソール操作制御が有効の場合に使用すると、コンソール操作制御の認証処理の前に呼び出されます。
ChkRcmd2()
コンソール操作制御が有効の場合に使用します。
コンソール操作制御の認証処理の後に呼び出されます。
なお、コンソール操作制御が有効な場合、コマンドラインのチェック対象は[リモートコマンド実行]画面の実行コマンドに入力されたコマンドです。
呼び出し形式
__declspec(dllexport) int __stdcall ChkRcmd2( char *lpCommand, int iHostCount, char **lpHostname, char **lpRuntype, struct MP_CHKRCMD *mp_chkrcmd_ptr, int iReserv, struct stRcmdData *returnData)
パラメタ
リモートコマンド実行画面で入力された入力文字列
リモートコマンド発行先ホスト数(注1)
リモートコマンド発行先ホスト名
リモートコマンド発行先ホストの運用形態名
リモートコマンドを発行したユーザーID
予約域(注2)
実行情報(リモートコマンドを実行できる場合に実行情報を設定してください。) (注3)
注1) リモートコマンド発行先ホスト名とリモートコマンド発行先ホストの運用形態名の数は同じになります。運用形態名のないホストの場合、対応する運用形態名の値にはNULLが設定されています。
注2) 予約域は参照、代入を行わないでください。
注3) 引数の実行情報には、リモートコマンドを実行できる場合に実行情報を設定してください。実行情報は呼び出し元で領域を確保しますので領域取得、開放処理を行わないでください。
また、コマンド文字列、およびメッセージ文字列サイズは以下が設定されます。
iCommandLengt
実行情報のiCommandLengtにはコマンド文字列(lpCommand)の領域サイズが設定されます。設定する文字列(終端のNULLを含む)の長さは1024バイトを超えないように注意してください。
iReservLength
iReservLengthにはコマンド実行否の場合のメッセージ文字列(lpReserv)の領域サイズが設定されます。設定する文字列(終端のNULLを含む)の長さは256バイトを超えないように注意してください。
構造体の説明
struct MP_CHKRCMD{ char Sw_user[40]; // SystemwalkerコンソールにログインしているユーザーID // (参照のみ) char SW_con_user[70] // コンソール操作制御の認証によって入力され // たユーザーID (参照のみ) void *rsv; // 予約域(参照、代入を行わないでください) int *rsv2; // 予約域(参照、代入を行わないでください) }; struct stRcmdData{ int iCommandLength; //コマンド文字列(lpCommand)の領域サイズ(参照のみ) char *lpCommand; //実行するコマンド文字列 int iConfMsgflag; //確認ダイアログを表示有無 1:表示する 0:表示しない int iReservLength; //メッセージ(lpReserv)の領域サイズ(参照のみ) char *lpReserv; //コマンド実行否の場合のメッセージ文字列 int iReserv; //予約域 };
以下のパラメタ/構造体を編集すれば、カスタマイズすることができます。
コマンド文字列(lpCommand)の領域サイズ(参照のみ)
実際に発行するコマンド文字列
これを編集することで“実際に発行するコマンド文字列”をカスタマイズすることができます。
確認メッセージの表示の是非
以下の値を設定することで確認メッセージの表示を制御できます。
0: 確認メッセージを表示しない。
1: 確認メッセージを表示する。
メッセージ(lpReserv)の領域サイズ(参照のみ)
コマンド実行しない場合のメッセージ文字列
これに文字列を指定すると、リモートコマンド実行時にコマンド実行の可否の確認メッセージが表示されます。
文字列を指定しないと確認メッセージは表示されません。
予約域
代入しないでください。
復帰値
リモートコマンド発行の可否を、関数の復帰値により通知してください。
リモートコマンドを実行する。
リモートコマンドを実行しない。
実行に必要な権限/実行環境
【Windows版】
運用管理サーバ/運用管理クライアントで実行可能です。
【UNIX版】
運用管理クライアントで実行可能です。
コンパイル環境
コンパイル環境は以下のとおりです。
【Windowsの場合】
コンパイラ : Microsoft Visual C++ 2005
ランタイムライブラリ : コンパイルオプションとして、“マルチスレッド(DLL)”を使用してください。
注意事項
作成したDLLを格納する際は、該当の端末の[Systemwalkerコンソール]が起動していない状態で格納してください。
API呼び出し時に渡す引数について、領域はすべて[Systemwalkerコンソール]側で確保しますので、領域の開放処理はしないでください。
DLLはOS環境に合わせて作成してください(32ビット環境では32ビットモジュールとして、64ビット環境では64ビットモジュールとして作成)。
作成したDLLにおいて、不当メモリ参照などでアプリケーションエラーとなった場合、[Systemwalkerコンソール]も異常終了します。
[Systemwalkerコンソール]からDLLをオープンできた場合、関数のアドレス取得処理で失敗した場合は、以下のエラーメッセージを表示します。
エラーメッセージ:関数アドレスの取得に失敗しました。
本DLLによりコマンドが実行できな場合には、以下のメッセージが表示されます。
指定されたコマンドは実行できません。
コンソール操作制御の認証処理は、本DLLの呼び出し前に処理されます。
コンソール操作制御の運用時、コマンドラインのチェック対象は[リモートコマンド実行]画面の実行コマンドに入力されたコマンドです。
確認ダイアログの表示の是非について、[リモートコマンド実行]画面の[オプション]メニューの[確認ダイアログを表示する]がON/OFFに関わらずDLLの復帰値が優先されます。
[Systemwalker Webコンソール]からは、本機能は使用できません。
本機能を使用してリモートコマンド実行処理中も、他の機能は使用可能です。
本DLLでコマンドラインを変更した場合、[リモートコマンド検索]画面には、変更後のコマンドが出力されるため、実際に[リモートコマンド実行]画面で実行したコマンドについては、[リモートコマンド実行]画面を閉じると、後から確認することができません。
本DLLに“ChkRcmd”関数と“ChkRcmd2”関数の両方が存在した場合は、“ChkRcmd2”関数が使用されます。
使用例
ヘッダファイルの使用例を以下に示します。
// File Name: mprcmdex.h // Function :RemoteCommand //コマンドチェック用の復帰値構造体 struct stRcmdData{ int iCommandLength; //コマンド文字列(lpCommand)の領域サイズ(参照のみ) char *lpCommand; //コマンド文字列 int iConfMsgflag; //確認ダイアログを表示有無 1:表示する 0:表示しない int iReservLength; //予約域(lpReserv)の領域サイズ(参照のみ) char *lpReserv; //予約域 int iReserv; //予約域 }; struct MP_CHKRCMD{ char Sw_user[40]; // SystemwalkerコンソールにログインしているユーザーID // (参照のみ) char SW_con_user[70] // コンソール操作制御の認証によって入力され // たユーザーID (参照のみ) void *rsv; // 予約域(参照、代入を行わないでください) int *rsv2; // 予約域(参照、代入を行わないでください) }; __declspec(dllexport) int __stdcall ChkRcmd2(char *,int,char **, char **, struct MP_CHKRCMD *, int,struct stRcmdData *);