Implementowanie właściwości AttachProperties
Monitor sieci wywołuje funkcję AttachProperties, aby zamapować właściwości, które istnieją w kawałku rozpoznanych danych. Funkcja AttachProperties przypisuje właściwości do określonej lokalizacji.
Usługa Network Monitor używa następującego procesu do analizowania danych w ramce.
- Najpierw monitor sieci wywołuje RecognizeFrame w celu rozpoznania wszystkich protokołów, które są obecne w ramce.
- Następnie monitor sieci wywołuje AttachProperties dla każdego analizatora, który rozpoznaje fragment danych.
Gdy monitor sieci wywołuje funkcję AttachProperties dla rozpoznanych danych, analizator, który jest wywoływany, musi analizować dane, a następnie mapować każdą istniejącą właściwość na lokalizację w rozpoznanych danych. Analizator określa, które właściwości istnieją i gdzie każda właściwość znajduje się w danych. Na poniższej ilustracji przedstawiono dane rozpoznane przez analizator.
Podczas implementacji AttachPropertiesnależy wywołać jedną z następujących funkcji dla każdej właściwości, która istnieje w ramce danych.
- Wywołaj funkcję AttachPropertyInstanceEx, gdy chcesz zmodyfikować dane właściwości w ramce.
- Wywołaj funkcję AttachPropertyInstance, gdy nie chcesz modyfikować danych właściwości w ramce.
Notatka
Zaleca się użycie danych, które istnieją w przechwyconym materiale.
Poniższa procedura identyfikuje kroki niezbędne do zaimplementowania AttachProperties.
aby zaimplementować funkcję AttachProperties
- Określ, które właściwości istnieją, oraz lokalizację właściwości w danych.
- Wywołaj AttachPropertyInstanceEx dla każdej właściwości z wartością, którą chcesz zmodyfikować.
- Wywołaj AttachPropertyInstance dla każdej właściwości z wartością, której nie chcesz modyfikować. Zazwyczaj jest to jedyna funkcja, którą należy wywołać.
Poniżej przedstawiono podstawową implementację AttachProperties. Należy pamiętać, że w przykładzie nie ma ani kodu, aby określić, które właściwości istnieją, albo kod do zlokalizowania właściwości.
#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;
}