[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

# 11 OpenVMS Events

# 11.1 イベントとは

Windows NTシステムでは，イベントは，システムまたはアプリケーション内で発生する重要な出来事です。 たとえば，サービスの開始や停止， ユーザのログオンやログオフ，リソースへのアクセスなどはイベントです。 システムでイベントが検出されると，イベント・ログ・ サービスがイベント(または監査エントリ)をレコード形式でシステム・ ログ，セキュリティ・ログ，アプリケーション・ログのいずれかに書き込み， 監査トレールを作成します。レコードには日時，ソース(発生源) ，カテゴリ，イベント番号，ユーザ，コンピュータに関する情報が格納されます。Windows NT システムでは，これらのログやそこに記録されているイベントは， イベント・ビューアを使用して表示します。

COM Version 1.0 for OpenVMSでは， OpenVMSはすべてのCOM for OpenVMSイベントをDCOM$EVENTLOG.RPTテキスト・ ファイルに書き込んでいました。COM Version 1.1 for OpenVMSでは，OpenVMSはCOM for OpenVMSイベントのWindows NTログとAdvanced Server for OpenVMSログの両方をサポートするようになりました。COM for OpenVMSイベント(OpenVMSでのCOMサーバの起動など)をログに記録し，Windows NT システムまたはOpenVMSシステムからこれらのOpenVMS イベントを確認できるようになりました。

OpenVMS Eventsの依存関係についてと，OpenVMS EventsがOpenVMSインフラストラクチャの他の部分とどのように関係するかの詳細については， 第4.9節を参照してください。

## 11.1.1 参考文献

イベントと関連トピックの詳細については，次の参考文献が役立ちます。

- イベント・ログに関する書籍:

  - 『Windows NT Server 4.0 Unleashed』Jason Garms 著，SAMS Publishing，Indianapolis，IN，1998。ISBN: 0-672- 30933-5

  - 『Win32 System Services: The Heart of Window 95 and Windows NT』Marshall Brain著，Prentice Hall，Upper Saddle River，NJ，1996。ISBN: 0-13-324732-5

- その他の情報源:

  - Microsoft Win32 Software Development Kit

    特に，`RegisterEventSource`，`ReportEvent`， `DeregisterEventSource` 機能に関する節と，System Services: Event Loggingという節を参照してください。

# 11.2 OpenVMS Eventsの概要

システムはOpenVMS EventsをWindows NTイベント・ログ，Advanced Server for OpenVMSイベント・ログ，OpenVMSシステムのログ・ファイルに記録します。

OpenVMS Eventsを表示するには，次のいずれかを使用します。

- Windows NTイベント・ビューア(第11.2.1項を参照)

- Advanced Server for OpenVMSイベント・ビューア(第11.2.2項を参照)

- OpenVMSイベント・ログ・ファイル(第11.2.3 項を参照)

## 11.2.1 Windows NTイベント・ビューアによるOpenVMS Events の表示

Windows NTイベント・ビューアを使用してOpenVMS Eventsを表示するには， 次の操作を行います。

1. Windows NTイベント・ビューアを起動します。

   「スタート」メニューから「プログラム」，「管理ツール」 ，「イベントビューア」を選択します。

2. 「イベントビューア」ウィンドウで「ログ」メニューの 「コンピュータの選択...」をクリックし，リスト・ボックスからOpenVMS システムを選択します。

3. 「イベントビューア」ウィンドウで「ログ」メニューの 「システム」をクリックして，システム・イベント・ ログを表示します。システム・イベント・ログには，COM for OpenVMSイベントが格納されています。

   COM for OpenVMSイベントだけを表示するには， 次の操作を行います。

   - 「イベントビューア」ウィンドウで「表示」メニューの 「イベントのフィルタ...」をクリックします。

     「フィルタ」ウィンドウが表示されます。

   - 「フィルタ」ウィンドウの「ソース:」リスト・ボックスから「DCOM 」を選択します。

## 11.2.2 Advanced Server for OpenVMSイベント・ ビューアによるOpenVMS Eventsの表示

COM for OpenVMSイベントを表示するには， 次の操作を行います。

1. Advanced Server for OpenVMSが実行されていることを確認します。

2. 次のAdvanced Server for OpenVMS ADMINISTRATORコマンドを入力します。

              $ ADMIN SHOW EVENTS/TYPE=SYSTEM/SOURCE=DCOM/FULL

   ビューアはCOM for OpenVMSイベントだけを表示し，COM for OpenVMS イベントに関連付けられた補足情報も表示します。

## 11.2.3 OpenVMSのみでのイベントのログ

場合によっては，COM for OpenVMSイベントをOpenVMS システムのみで書き込んだり，表示しなければならないことがあります。Windows NT ログの代わりに， CompaqはCOMイベント情報をOpenVMSファイルに書き込む別のイベント・ロガーを提供しています。 このファイルは次の場所にあります。

         SYS$MANAGER:DCOM$EVENTLOG.RPT

COMサーバ(`DCOM$RPCSS` )がエラーを検出すると，COM for OpenVMS はこのイベント・ログ・レポートを自動的に作成します。 イベント・ロガーはファイルの最後に新しいイベントを追加します。 記録されるイベントの形式は次のとおりです。

         event type : ddd mmm dd hh:mm:ss yyyy
         First event message

         event type : ddd mmm dd hh:mm:ss yyyy
         Second event message
         .
         .
         .

例 11-1はイベント・ ログの内容を示しています。

### 例 11-1 OpenVMSイベント・ログの例

    $ Type SYS$MANAGER:DCOM$EVENTLOG.RPT

    【1】
    ERROR : Tue Sep 15 11:18:54 1998
    Unable to start a DCOM Server: {5E9DDEC7-5767-11CF-BEAB-00AA006C3606}
    Runas (null)/SMITH
    The Windows NT error: 1326
    Happened while starting: device:[account]SSERVER.EXE

    【2】
    ERROR : Tue Sep 15 19:14:45 1998
    The server {0C092C21-882C-11CF-A6BB-0080C7B2D682} did not register
    with DCOM within the required timeout.

1. システムは最初のエラー・イベントを`Tue Sep 15 11:18:54 1998` に記録しました。COMサーバ(DCOM$RPCSS) は，`SMITH` アカウントで稼動しているクライアントの代わりに，COM アプリケーション`device:[account]SSERVER.EXE` を起動できませんでした(クライアントは"access denied"などのエラーを受け取っている可能性があります) 。この結果作成されたWindows NTエラーは`1326` であり，これが`"Logon failure: unknown user name or bad password"` に変換されます。

   このエラーを検出した場合は，OpenVMS Authorizeユーティリティ(AUTHORIZE) を使用して，ユーザ・アカウントが有効であるかどうか確認してください。

2. システムは2番目のエラー・イベントを`Tue Sep 15 19:14:45 1998` に記録しました。COMサーバ(DCOM$RPCSS) は，COMアプリケーション`{0C092C21-882C-11CF-A6BB- 0080C7B2D682}` を起動することはできましたが，アプリケーションは正常に動作しませんでした。 アプリケーションは指定された時間内にDCOM$RPCSS に登録されませんでした(クライアントは"Server execution failed" `CO_E_SERVER_EXEC_FAILURE` などのエラーを受け取っている可能性があります) 。

   このエラーを検出した場合は，対話方式でサーバ・アプリケーションを実行し， 整合性を判断してください。

# NTA$EVENTW
OpenVMS Eventsへのインタフェース

アプリケーションがイベント・ログ・ファイルに情報を記録することを許可します。

NTA$EVENTWルーチンはすべての操作を同期的に完了します。

### フォーマット

        NTA$EVENTW   [nullarg], func, itmlst, evsb

### 引数

nullarg

    OpenVMS使用法:   reserved
    type:            longword (unsigned)
    access:          read only
    mechanism:       by value

  Compaqが使用するために予約されています。

func

    OpenVMS使用法:   function_code
    type:            longword (unsigned)
    access:          read only
    mechanism:       by value

  NTA$EVENTWが実行する機能を指定する機能コード。func引数は機能コードを格納したロングワードです。$EVENTDEF マクロは各機能コードの名前を定義します。

itmlst

    OpenVMS使用法:   address of item list
    type:            64-bit address
    access:          read only
    mechanism:       by value

  イベントのソース(発生源)またはイベントに関する情報を指定するアイテム・ リスト。itmlst引数はアイテム記述子のリストの64ビット・アドレスであり， 各記述子は情報アイテムを示します。64ビット形式のアイテム・リストはクォドワードの0 で終了します。

  次の図は，1つのアイテム記述子の64ビット形式を示しています。

evsb

    OpenVMS使用法:   address of status block
    type:            64-bit address
    access:          write only
    mechanism:       by reference

  要求された操作の終了状態が格納されるイベント状態ブロック。

  NTA$EVENTWは要求を開始するときに，状態ブロックを0に設定します。要求の終了時に，EVT$L_VMS_STATUS フィールドには操作の主(OpenVMS)終了状態が格納されます。

  エラーが発生した場合，EVT$L_NT_STATUS (0以外の場合)は，エラー状態をさらに定義する補助エラー状態です。

### 機能コード

EVT$_FC_REGISTER_EVENT_SOURCE
  イベント・ログとの関連性を開きます。

  アイテム・コード | 必須 | パラメータ | データ・タイプ
  --- | --- | --- | ---
  `EVT$_SERVER_NAME` | 省略可能 | 入力 | 文字列(4バイトのUnicode)
  `EVT$_SOURCE` | 省略可能 | 入力 | 文字列(4バイトのUnicode)
  `EVT$_HANDLE` | 必須 | 出力 | 符号なしロングワード

  - EVT$_SERVER_NAME

    この操作が実行されるサーバのUNC (汎用命名規則)名。

    UNC名は\\server\ share\path \fileという形式です。このアイテムは0または未指定でなければなりません。 これはクラスタ内で使用可能なAdvanced Server for OpenVMSサーバで操作を実行します。

  - EVT$_SOURCE

    イベントを記録するアプリケーションの名前。このフィールドは，説明テキストが格納されているアプリケーション・ メッセージ・ファイルをアプリケーションのイベント・ ログ・エントリと関連付けます。

    ソースを指定する場合は，`Eventlog\System` キー， `Eventlog\Security` キー， `Eventlog\Application` レジストリ・キーのサブキーでなければなりません。 たとえば，`Myapp` のソース名は， 次のキーのレジストリ・エントリを示します。

             HKEY_LOCAL_MACHINE\System\CurrentControlSet\
                Services\Eventlog\Application\Myapp)

    `Myapp` レジストリ値`EventMessageFile` は，このアプリケーションのイベントを変換するために使用されるメッセージ・ ファイルとパスの名前を指定します。

    ソースは指定しないか，またはNullとして指定できます。この場合， イベントはアプリケーション・ログ・ファイルに記録されますが，アプリケーションは関連イベントのメッセージ・ ファイルを記録しません( この結果，置換テキストも記録されません)。

  - EVT$_HANDLE

    アプリケーション・イベント・ログへのハンドルを返します。このハンドルは他の$EVENT 機能への入力として必要です。

    エラーが発生した場合，ハンドルとして0が返されます。このハンドルは `CloseHandle` APIの責任の範囲外です。

EVT$_FC_REPORT_EVENT
  イベント・ログ・エントリを生成します。

  アイテム・コード | 必須 | パラメータ | データ・タイプ
  --- | --- | --- | ---
  `EVT$_HANDLE` | 必須 | 入力 | 符号なしロングワード
  `EVT$_EVENT_TYPE` | 必須 | 入力 | ワード・マスク
  `EVT$_EVENT_CATEGORY` | 省略可能 | 入力 | ワード
  `EVT$_EVENT_ID` | 必須 | 入力 | ロングワード
  `EVT$_USER_SID` | 省略可能 | 入力 | NTセキュリティID
  `EVT$_NUMSTRINGS` | 省略可能 | 入力 | ワード
  `EVT$_DATASIZE` | 省略可能 | 入力 | ロングワード
  `EVT$_STRING_ARRAY` | 省略可能 | 入力 | 可変長記述子の配列(4バイトのUnicode)
  `EVT$_RAW_DATA` | 省略可能 | 入力 | バイナリ・ データ

  - EVT$_HANDLE

    以前のEVT$_FC_REGISTER_EVENT_SOURCE呼び出しから返された値。

  - EVT$_EVENT_TYPE

    イベントの重大度を示します。タイプは次のいずれかです。
    EVT$_SUCCESS
    EVT$_ERROR
    EVT$_WARNING
    EVT$_INFO
    EVT$_AUDIT_SUCCESS
    EVT$_AUDIT_FAILURE

    重大度タイプは，WINNT.Hに定義されているWindows NTの対応する重大度にマップされます。

  - EVT$_EVENT_CATEGORY

    1〜65535の範囲の整数値。EVT$_EVENT_CATEGORYは特定のソース固有の値です。

    EVT$_EVENT_CATEGORYを使用すると，アプリケーションはメッセージ・ ファイルをセクションに分割できます。各セクションにはイベントID がインデックスとして付加されます。カテゴリを指定しなかった場合， デフォルトは0になります。

  - EVT$_EVENT_ID

    無制限の整数値。この値はアプリケーション・メッセージ・ファイルでカテゴリのインデックスとして使用されます。 インデックスはこのイベント・ メッセージに対して表示されるテキスト文字列の場所を示します。 イベントIDは特定のソース固有の値です。

  - EVT$_USER_SID

    イベントをログに記録するスレッドのWindows NTセキュリティID (省略可能)。$PERSONAシステム・サービスを介してWindows NT 資格情報を取得したアプリケーションは， `OpenProcessToken` と`GetTokenInformation` Win32 APIを呼び出すことにより，SID を取得できます。形式はこのサービスからは不明です。

  - EVT$_NUMSTRINGS

    EVT$_STRING_ARRAYアイテム・コードに指定された文字列の数。

  - EVT$_DATASIZE

    EVT$_RAW_DATAアイテム・コードによって示されたバッファの長さ(バイト数) 。

  - EVT$_STRING_ARRAY

    文字列ポインタの配列。各エントリ・ポイントは最後がNullの文字列です。 メッセージ・ファイル内の記述文字列には，%nの形式で文字列プレースホルダを格納できます。%1 は最初のプレースホルダを示します。 この配列に指定された文字列は，システムがイベント・ メッセージを表示するときに，これらのプレースホルダを置き換えます。

  - EVT$_RAW_DATA

    イベント・メッセージにバイナリ・データを含むことを許可します。

    たとえば，エラーが発生したコンポーネントからデータ構造をダンプできます。

EVT$_DEREGISTER_EVENT_SOURCE
  イベント・ログとの関連付けを閉じます。

  アイテム・コード | 必須 | パラメータ | データ・タイプ
  --- | --- | --- | ---
  `EVT$_HANDLE` | 必須 | 入力 | 符号なしロングワード

  - EVT$_HANDLE

    以前のEVT$_FC_REGISTER_EVENT_SOURCE呼び出しから返された値。

アイテム・コード

アイテム・コード | パラメータ・タイプ | データ・タイプ
--- | --- | ---
`EVT$_SERVER_NAME` | 入力 | 文字列
`EVT$_SOURCE` | 入力 | 文字列
`EVT$_HANDLE` | 入力/出力 | 符号なしロングワード
`EVT$_ EVENT_TYPE` | 入力 | ワード・マスク
`EVT$_EVENT_CATEGORY` | 入力 | ワード
`EVT$_EVENT_ID` | 入力 | ロングワード
`EVT$_USER_ SID` | 入力 | NTセキュリティID
`EVT$_NUMSTRINGS` | 入力 | ワード
`EVT$_DATASIZE` | 入力 | ロングワード
`EVT$_STRING_ ARRAY` | 入力 | 文字列ポインタの配列
`EVT$_RAW_DATA` | 入力 | バイナリ・データ

説明NTA$EVENTW ルーチンを使用すると，イベントのソースの登録と登録の解除， イベント・データの報告を行うことができます。このイベント・ログ機能を使用すると， アプリケーションの内部から情報を記録できます。イベント・ ルーチンを使用して，アプリケーション内で進行状況を追跡したり， アプリケーションで検出された問題を識別できます。

NTA$EVENTWルーチンは同期的に終了します。つまり，要求が終了した後で制御は呼び出しプロセスに戻されます。

イベント・データを書き込むには，次の操作を行います。

1. イベント・ソースを登録します。

   この操作は，イベント・データが書き込まれるイベント・ログを定義します。

2. イベントを報告します。

   この操作を実行すると，情報が適切なイベント・ログに書き込まれます。

3. イベント・ソースの登録を解除します。

   この操作は，イベント・ソースの登録の一部として取得されたリソースを解放します。

### 返される状態値

`SS$_NORMAL` サービスは正常終了しました。
`SS$_ ACCVIO` 引数の1つを読み込み/書き込みすることができません。
`SS$_BADPARAM` パラメータが不正です。
`SS$_NOPRIV` 特権が不足しているため， 指定されたイベント・ログにアクセスできません。
`SS$_TIMEOUT` 要求がタイムアウトしました。
`SS$_ UNREACHABLE` イベント・サービスを使用できません。
`SS$_REJECT` Windows NT LAN Managerサーバがエラーを検出しました。 詳細については，Win32の状態情報を参照してください。

# 11.3 独自のイベントの作成

デフォルト設定では，システムはCOM for OpenVMSで生成されたDCOMイベントをログに記録します。COM for OpenVMSイベントを記録する他に， ユーザが作成したCOMアプリケーションのCOMアプリケーション・イベントをログに記録することもできます。

COM for OpenVMSキットには，Win32 API を使用してアプリケーション・イベントを生成する方法を示すサンプル・ コードが含まれています。このサンプル・コードは，Windows NTシステムでそのまま使用できます。 また， OpenVMSでCOM for OpenVMSアプリケーションを作成する指示に従って， このサンプル・コードを正しく作成することもできます( 必要なヘッダ・ファイルはDCOM$LIBRARYから取得してください) 。これらの手順については，第6章を参照してください。 また，このサンプル・コードには，Wind/Uを使用して例を作成するためのリンク手順も示されています。

# 11.4 OpenVMS Eventsの問題への対処

イベントを報告するときに発生したエラーは，追跡が困難なことがあります。 これは，途中にあるいくつものソフトウェア・レイヤをイベントが通過するからです。 ここでは，OpenVMS EventsがWindows NTログに記録されるまでに， 他のソフトウェア・レイヤをどのように通過するかについて説明します。

1. アプリケーションはWin32イベント機能のいずれか(`RegisterEventSource`， `ReportEvent`，`Deregis )を呼び出します。

   `
2. Win32 APIは指定された引数を使用して，適切なアイテム・リストを作成し，NTA$EVENTW ルーチンを呼び出します。

3. NTA$EVENTWルーチンは，指定された情報(機能コード，アイテム・ リストなど)を確認し，SYS$ACMシステム・サービスに対して適切なアイテム・ リストを作成します。

   NTA$EVENTがエラーを検出すると，R0とイベント状態ブロックを使用して， そのエラーをWin32 APIに返します。

4. SYS$ACMシステム・サービスは情報を確認し，その情報をNT ACMEに渡します。

   SYS$ACMがエラーを検出すると，R0とACM状態ブロックを使用して，そのエラーをNTA$EVENTW に返します。

5. NT ACMEは指定された情報を(IPCパイプを使用して) Advanced Server for OpenVMS のディスパッチャに渡します。

   NT ACMEがエラーを検出すると，ACM状態ブロックを使用して，そのエラーを呼び出し側プロセスに返します。

6. Advanced Server for OpenVMSディスパッチャは情報を確認し， 要求された操作(登録，レポート，登録の解除) を実行するために適切なルーチンを呼び出します。

   Advanced Server for OpenVMSがエラーを検出すると， そのエラーをNT ACMEに報告します。NT ACMEはエラーを他の呼び出しプロセスに渡します。

イベント状態ブロックの内容を確認すると，エラーがどこで発生したのかを判断するのに役立ちます。 表 11-1は， 実行しなければならないチェックを(重要な順に)示しています。

### 表 11-1 OpenVMS Eventsエラーへの対処法

R0状態 | 状態フィールド値 | チェックするコンポーネント
--- | --- | ---
エラー(ビット0 がクリア) | EVT$L_NT_STATUSフィールドが0以外の値である。 | エラーはAdvanced Server for OpenVMSの内部で発生している可能性が最も高い。
エラー | EVT$L_VMS_STATUSフィールドが0 以外の値で，EVT$L_NT_STATUSが0である。 | エラーはSYS$ACM システム・サービスまたはNT ACMEの内部で発生している可能性が最も高い。
エラー | EVT$L_ VMS_STATUSが0で，EVT$L_NT_STATUSが0である。 | エラーはSYS$ACM システム・サービスの内部で発生している可能性が最も高い。

注意
  Win32 APIは通常，エラー状態を適切なNT エラー状態コードに変換し，GetLastError Win32 APIを介して提供します( イベントAPIから返された状態は単に一般的なエラーを示します) 。

[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]