레지스터 구현
네트워크 모니터는 캡처 파일에서 캡처를 로드한 다음 식별할 수 있는 모든 프로토콜에 대해 Register 함수를 호출하기 시작합니다. 각 파서 DLL은 파서 DLL이 지원하는 각 프로토콜에 대해 Register 함수를 구현해야 합니다.
Register 함수의 각 구현은 CreatePropertyDatabase 및 AddProperty 함수를 호출하여 프로토콜에 대한 속성 데이터베이스를 만들고 입력한 다음, 필요한 경우 CreateHandoffTable을 호출하여 프로토콜에 대한 핸드오프 테이블을 만들어야 합니다.
참고
프로토콜 속성은 네트워크 모니터에 대해 정의됩니다. AttachProperties 내보내기 함수가 호출될 때까지 속성은 캡처 데이터의 위치에 매핑되지 않습니다.
다음 절차에서는 Register 함수를 구현하는 데 필요한 단계를 식별합니다.
하나의 프로토콜에 대한 등록을 구현하려면
- 프로토콜이 지원하는 각 속성을 설명하는 PROPERTYINFO 구조의 배열을 정의합니다.
- CreatePropertyDatabase를 호출하여 프로토콜 핸들 및 프로토콜이 지원하는 속성 수를 제공합니다.
- 루프에서 AddProperty 를 호출하여 PROPERTYINFO 구조 배열에 정의된 각 속성을 추가합니다.
- 프로토콜이 핸드오프 테이블을 사용하는 경우 프로토콜의 모든 속성이 속성 데이터베이스에 추가된 후 CreateHandoffTable을 호출합니다.
다음은 Register의 기본 구현입니다. 속성 데이터베이스는 두 개의 속성만 지원하는 프로토콜에 대해 만들어집니다. 이 코드 예제는 네트워크 모니터에서 제공하는 제네릭 파서에서 가져옵니다.
#include <windows.h>
PROPERTYINFO MyProtocolPropertyTable[]
{
// Summary property (0)
{
0, // Handle to property.
0, // Reserved.
"Summary", // Property label.
"Summary of protocol packet", // Property comment.
PROP_TYPE_SUMMARY, // Data type of property.
PROP_QUAL_NONE, // Data type qualifier.
NULL, // Reserved.
80, //
FormatPropertyInstance //
}
// WORD property (1)
{
0, // Handle to property.
0, // Reserved.
"WORD property", // Property label.
"16-bit WORD property", // Property comment.
PROP_TYPE_WORD, // Data type of property.
PROP_QUAL_NONE, // Data type qualifier.
NULL, // Reserved.
80, //
FormatPropertyInstance //
}
}
void BHAPI MyProtocolRegister( HPPROTOCOL hProtocol)
{
// Create property database.
DWORD dwNumberOfProperties = 2;
CreatePropertyDatabase (hProtocol,
dwNumberOfProperties
);
// Add properties to database.
WORD i;
for( i=0; i< dwNumberOfProperties; i++)
{
AddProperty(hProtocol, &MyProtocolPropertyTable[i]);
}
// Create handoff table.
CreateHandoffTable("myProtocolHandoffTable",
"myProtocol.ini",
hTable,
MaxEntries,
10 // Handoff set values are base 10.
)
}