監査マネージャーで使用するように構成された各エミッターは、既知のものか動的にロードされるものかに関係なく、本セクションで説明するインターフェイスに準拠します。
動的にロードされるエミッターは、mfaudit.emitter 構成ファイル エントリで指定されたプログラム名を使用して監査マネージャーによってロードされます (「mfaudit.emitter.emitter-name」を参照)。
ロードされると、ロードされたプログラムの GET_AUDIT_EMITTER_FUNCS エントリ ポイントが呼び出され、関数ポインター テーブルのアドレスが取得されます (「AUDIT_EMITTER_FUNCS の構造と Typedef」を参照)。このテーブルには、エミッターの初期化、エミッターの初期化解除、監査イベントの出力、およびエミッターのプロパティ変更の通知の処理を行う関数セットのポインターが含まれています。次の例は、エミッターのメイン エントリ ポイントが、通常、AUDIT_EMITTER_FUNCS 構造体を返すためにどのようにコーディングされるかを示しています。
.... #include "mfaudit.h" .... static int audit_emitter_deinit(cobuns32_t flags, void *emitter_data); static int audit_emitter_init(cobuns32_t flags, const cobuns8_t *emitter_name, AUDIT_EMITTER_EVENT *audit_event, void **emitter_data); static void audit_emitter_notify(cobuns32_t notif_type, void *notif_buf, void *emitter_data); static int audit_emitter_output(cobuns32_t flags, AUDIT_EMITTER_EVENT *audit_event, Void *emitter_data); static AUDIT_EMITTER_FUNCS audit_emitter_funcs = { 0, /* Version of structure format */ 0, /* Reserved for future use */ audit_emitter_init, /* Function to initialise the */ /* emitter */ audit_emitter_deinit, /* Function to deinitialise the */ /* emitter */ audit_emitter_output, /* Function to output a trace event */ audit_emitter_notify, /* Function to handle notifications */ /* of emitter config changes */ }; .... AUDIT_EMITTER_FUNCS * GET_AUDIT_EMITTER_FUNCS() { return &audit_emitter_funcs; } ....
エミッターの初期化 (fn_init AUDIT_EMITTER_FUNCS 関数の呼び出し) は、出力する必要がある最初の監査イベントの直前まで監査マネージャーによって遅延されます。エミッターの初期化中に、エミッターは通常、CBL_AUDIT_EMITTER_PROPERTY_GET API を呼び出して、既知の各プロパティに関連付けられた値を取得します。
エミッターの初期化解除 (fn_deinit AUDIT_EMITTER_FUNCS 関数の呼び出し) は、監査マネージャーの初期化解除中に実行されます。エミッターの初期化解除中に、エミッターは以前の呼び出し時に取得したすべてのリソースを解放します。
監査イベントの出力 (fn_output AUDIT_EMITTER_FUNCS 関数の呼び出し) は、コンポーネントが CBL_AUDIT_EVENT API を呼び出すと実行されます (「CBL_AUDIT_EVENT (非推奨)」を参照)。
エミッターは、初期化後に発生する各構成変更 (プロパティ値の変更など) の通知を受けます (fn_notify AUDIT_EMITTER_FUNCS 関数の呼び出し)。