RecognizeFrame 回调函数

RecognizeFrame 导出函数指示是否将一段数据识别为分析程序检测到的协议。 必须为分析程序 DLL 支持的每个分析程序实现 RecognizeFrame 导出函数。

语法

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
);

parameters

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
分析程序识别数据,但不知道遵循哪个协议。 设置代码后,返回指向遵循已识别协议的剩余未认领数据的指针。 网络监视器使用 以下协议集 继续分析。
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 的指针。

注意

在调用 Register 函数以注册协议属性之前,可以调用 RecognizeFrame。 因此, RecognizeFrame 函数的实现不依赖于在实现协议 Register 函数期间创建或初始化的任何属性或结构。

Handoff Set 和 Follow Set

分析程序可以使用切换集或跟踪集来标识网络监视器遵循已识别数据的协议。

  • 如果识别的数据中提供了信息,则分析程序使用其切换集获取下一个协议的句柄,然后将该句柄传递给网络监视器。
  • 如果信息不可用,则分析程序不会传递句柄,并且网络监视器使用分析程序跟踪集来确定遵循哪个协议。

在协议之间传递信息

使用 lpInstData 参数在协议之间传递信息。 输入时,可以从上一个协议中检索信息。 在输出中,可以将信息传递给下一个协议。

实例数据可以是长度小于或等于DWORD_PTR的任何数据,也可以是指向不需要由分析程序分配或释放的数据(如原始帧数据)的指针。

有关的信息 请参阅
什么是分析程序,以及它们如何与网络监视器配合使用。 分析器
分析程序 DLL 中包含哪些入口点。 分析器 DLL 体系结构
如何实现 RecognizeFrame 包括一个示例。 实现 RecognizeFrame
如何指定移交集并遵循设置。 指定移交集指定关注集

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Netmon.h

另请参阅

GetProtocolFromTable