AttachProperties 구현
네트워크 모니터는 AttachProperties 함수를 호출하여 인식된 데이터 조각에 있는 속성을 매핑합니다. AttachProperties 함수는 속성을 특정 위치에 매핑합니다.
네트워크 모니터는 다음 프로세스를 사용하여 프레임의 데이터를 구문 분석합니다.
- 먼저 네트워크 모니터는 RecognizeFrame 을 호출하여 프레임에 있는 모든 프로토콜을 인식합니다.
- 그런 다음 네트워크 모니터는 데이터 조각을 인식하는 각 파서에 대해 AttachProperties 를 호출합니다.
네트워크 모니터가 인식된 데이터에 대해 AttachProperties 함수를 호출할 때 호출되는 파서는 데이터를 구문 분석한 다음 각 기존 속성을 인식된 데이터의 위치에 매핑해야 합니다. 파서는 존재하는 속성과 각 속성이 데이터에 있는 위치를 결정합니다. 다음 그림에서는 파서 인식 데이터를 보여 줍니다.
AttachProperties를 구현하는 동안 데이터 프레임에 있는 각 속성에 대해 다음 함수 중 하나를 호출해야 합니다.
- 프레임에서 속성 데이터를 수정하려는 경우 AttachPropertyInstanceEx 함수를 호출합니다.
- 프레임에서 속성 데이터를 수정하지 않으려면 AttachPropertyInstance 함수를 호출합니다.
참고
캡처에 있는 데이터를 사용하는 것이 좋습니다.
다음 절차에서는 AttachProperties를 구현하는 데 필요한 단계를 식별합니다.
AttachProperties를 구현하려면
- 존재하는 속성과 데이터의 속성 위치를 확인합니다.
- 수정하려는 값을 사용하여 각 속성에 대해 AttachPropertyInstanceEx 를 호출합니다.
- 수정하지 않으려는 값으로 각 속성에 대해 AttachPropertyInstance 를 호출합니다. 일반적으로 호출해야 하는 유일한 함수입니다.
다음은 AttachProperties의 기본 구현입니다. 이 예제에는 어떤 속성이 있는지 확인하는 코드 또는 속성을 찾는 코드가 포함되어 있지 않습니다.
#include <windows.h>
LPBYTE BHAPI MyProtocolAttachProperties( HFRAME hFrame,
LPBYTE pMacFrame,
LPBYTE pBLRPLATEFrame,
DWORD MacType,
DWORD BytesLeft,
HPROTOCOL hPreviousProtocol,
DWORD nPrevProtocolOffset,
DWORD InstData)
{
PBLRPLATEHDR pBLRPLATEHdr = (PBLRPLATEHDR)pBLRPLATEFrame;
// Attach summary property.
AttachPropertyInstance( hFrame,
BLRPLATEPropertyTable[BLRPLATE_SUMMARY].hProperty,
(WORD)BytesLeft,
(LPBYTE)pBLRPLATEFrame,
0, // No Help file.
0, // Indent level.
0); // Data flag.
// Attach signature property.
AttachPropertyInstance( hFrame,
BLRPLATEPropertyTable[BLRPLATE_SIGNATURE].hProperty,
sizeof(DWORD),
&(pBLRPLATEHdr->Signature),
0, // No Help file.
1, // Indent level.
0); // Data flag.
// Attach opcode.
AttachPropertyInstance( hFrame,
BLRPLATEPropertyTable[BLRPLATE_OPCODE].hProperty,
sizeof(WORD),
&(pBLRPLATEHdr->Opcode),
0, // No Help file.
1, // Indent level.
0); // Data flag.
// Attach flags summary.
AttachPropertyInstance( hFrame,
BLRPLATEPropertyTable[BLRPLATE_FLAGS_SUMMARY].hProperty,
sizeof(BYTE),
&(pBLRPLATEHdr->Flags),
0, // No Help file.
1, // Indent level.
0); // Data flag.
// Attach flags decode.
AttachPropertyInstance( hFrame,
BLRPLATEPropertyTable[BLRPLATE_FLAGS_FLAGS].hProperty,
sizeof(BYTE),
&(pBLRPLATEHdr->Flags),
0, // No Help file.
2, // Indent level.
0); // Data flag.
RETURN null;
}