次の方法で共有


RecognizeFrame コールバック関数

RecognizeFrame エクスポート関数は、データの一部がパーサーによって検出されるプロトコルとして認識されるかどうかを示します。 RecognizeFrame エクスポート関数は、パーサー DLL がサポートするパーサーごとに実装する必要があります。

構文

LPBYTE RecognizeFrame(
  _In_    HFRAME      hFrame,
  _In_    LPBYTE      lpFrame,
  _In_    LPBYTE      lpProtocol,
  _In_    DWORD       MacType,
  _In_    DWORD       BytesLeft,
  _In_    HPROTOCOL   hPreviousProtocol,
  _In_    DWORD       nPreviousProtocolOffset,
  _Out_   LPDWORD     ProtocolStatusCode,
  _Out_   LPHPROTOCOL phNextProtocol,
  _Inout_ PDWORD_PTR  lpInstData
);

パラメーター

hFrame [in]

データを含むフレームを処理します。

lpFrame [in]

フレームの最初のバイトへのポインター。 ポインターは、他のパーサーが認識するデータを表示する方法を提供します。

lpProtocol [in]

未要求データの先頭へのポインター。 前のパーサーがこのパーサーの前にデータを要求したため、通常、未要求データはフレームの中央に配置されます。 パーサーは、最初に未要求データをテストする必要があります。

MacType [in]

フレーム内の最初のプロトコルの MAC 値。 通常、 MacType 値は、パーサーがフレーム内の最初のプロトコルを識別する必要がある場合に使用されます。 MacType 値には、次のいずれかを指定できます。

説明
MAC_TYPE_ETHERNET
802.3
MAC_TYPE_TOKENRING
802.5
MAC_TYPE_FDDI
ANSI X3T9.5

BytesLeft [in]

フレーム内の位置からフレームの末尾までの残りのバイト数。

hPreviousProtocol [in]

前のプロトコルのハンドル。

nPreviousProtocolOffset [in]

フレームの前のプロトコル開始のオフセット。

ProtocolStatusCode [out]

プロトコルの状態インジケーター。 パーサー DLL は、次のいずれかの状態コードを設定する必要があります。

説明
PROTOCOL_STATUS_RECOGNIZED
パーサーはデータを認識しますが、どのプロトコルに従うかわからない。 コードを設定した後、認識されたプロトコルに従う残りの未要求データへのポインターを返します。 Network Monitor では、 プロトコルの次のセット を使用して解析を続行します。
PROTOCOL_STATUS_NOT_RECOGNIZED
パーサーはデータを認識しません。 このコードを設定した後、 lpProtocol パラメーターがパーサー DLL に渡すポインターを使用して、データの先頭へのポインターを返します。 ネットワーク モニターでは、前のプロトコルの 次のセット を使用して解析を続行します。
PROTOCOL_STATUS_CLAIMED
パーサーはデータを認識し、残りのデータを要求します。 コードを設定した後、フレームの解析を終了するネットワーク モニターの NULL を 返します。
PROTOCOL_STATUS_NEXT_PROTOCOL
パーサーはデータを認識し、後に続くプロトコルを認識します。 コードを設定した後、 phNextProtocol パラメーターを設定し、認識されたプロトコルに従う残りの未要求データへのポインターを返します。 ネットワーク モニターはフレームの解析を続けます。

phNextProtocol [out]

次のプロトコルのハンドルへのポインター。 このパラメーターは、プロトコルがプロトコルに従うプロトコルを識別するときに設定されます。 次のプロトコルのハンドルを取得するには、 GetProtocolFromTable 関数を呼び出します。

lpInstData [in, out]

入力時に、前のプロトコルのインスタンス データへのポインター。

出力時に、現在のプロトコルのインスタンス データへのポインター。 インスタンス データは、DWORD_PTRの長さより長くすることはできません。

戻り値

関数が成功した場合、戻り値は、認識されたパーサー データの後の最初のバイトへのポインターです。 パーサーが残りのすべてのデータを要求する場合、戻り値は NULL です

関数が失敗した場合、戻り値は lpProtocol パラメーターが渡す初期ポインターです。

注釈

RecognizeFrame 関数は、パーサーが lpProtocol ポインターから生データを認識するかどうかを決定します。

  • プロトコルがデータを認識する場合、 RecognizeFrame 関数は残りのデータへのポインターを返すか、現在のプロトコルがフレーム内の最後のプロトコルである場合は NULL を 返します。
  • プロトコルがデータを認識しない場合、 RecognizeFrame 関数は lpProtocol パラメーターでパーサー DLL に渡されたポインターを返します。

Note

RecognizeFrame は、 Register 関数を 呼び出してプロトコル プロパティを登録する前に呼び出すことができます。 そのため、 RecognizeFrame 関数の実装は、プロトコル Register 関数の実装中に作成または初期化されるプロパティまたは構造体に依存しません。

ハンドオフ セットとフォロー セット

パーサーは、ハンドオフ セットまたはフォロー セットを使用して、認識されたデータに続くプロトコルをネットワーク モニターで識別できます。

  • 認識されたデータで情報が使用可能な場合、パーサーはハンドオフ セットを使用して次のプロトコルへのハンドルを取得し、そのハンドルをネットワーク モニターに渡します。
  • 情報が使用できない場合、パーサーはハンドルを渡せず、Network Monitor はパーサーフォロー セットを使用して、後続のプロトコルを決定します。

プロトコル間で情報を渡す

lpInstData パラメーターを使用して、プロトコル間で情報を渡します。 入力時に、前のプロトコルから情報を取得できます。 出力時に、次のプロトコルに情報を渡すことができます。

インスタンス データには、長さがDWORD_PTR以下の任意のデータ、またはパーサーによって割り当てられたり解放されたりする必要のない生フレーム データなどのデータへのポインターを指定できます。

に関する情報 参照先
パーサーとは何か、およびネットワーク モニターでの動作方法。 パーサー
パーサー DLL に含まれるエントリ ポイント。 パーサー DLL アーキテクチャ
RecognizeFrame を実装する方法には、例が含まれています。 RecognizeFrame の実装
ハンドオフ セットを指定し、セットに従う方法。 ハンドオフ セットを指定してフォロー セットを指定する

要件

要件
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー
Netmon.h

関連項目

GetProtocolFromTable