Implémentation d’AttachProperties
Le Moniteur réseau appelle la fonction AttachProperties pour mapper les propriétés qui existent dans une partie de données reconnues. La fonction AttachProperties mappe les propriétés à un emplacement spécifique.
Network Monitor utilise le processus suivant pour analyser les données dans une trame.
- Tout d’abord, le Moniteur réseau appelle RecognizeFrame pour reconnaître tous les protocoles qui existent dans un frame.
- Ensuite, le Moniteur réseau appelle AttachProperties pour chaque analyseur qui reconnaît un élément de données.
Lorsque le Moniteur réseau appelle la fonction AttachProperties pour les données reconnues, l’analyseur appelé doit analyser les données, puis mapper chaque propriété existante à un emplacement dans les données reconnues. L’analyseur détermine les propriétés qui existent et l’emplacement de chaque propriété dans les données. La figure suivante montre des données reconnues par l’analyseur.
Pendant l’implémentation d’AttachProperties, vous devez appeler l’une des fonctions suivantes pour chaque propriété qui existe dans une trame de données.
- Appelez la fonction AttachPropertyInstanceEx lorsque vous souhaitez modifier les données de propriété dans un frame.
- Appelez la fonction AttachPropertyInstance lorsque vous ne souhaitez pas modifier les données de propriété dans un frame.
Notes
Il est recommandé d’utiliser les données telles qu’elles existent dans la capture.
La procédure suivante identifie les étapes nécessaires pour implémenter AttachProperties.
Pour implémenter AttachProperties
- Déterminez les propriétés qui existent et l’emplacement des propriétés dans les données.
- Appelez AttachPropertyInstanceEx pour chaque propriété avec une valeur que vous souhaitez modifier.
- Appelez AttachPropertyInstance pour chaque propriété avec une valeur que vous ne souhaitez pas modifier. En règle générale, il s’agit de la seule fonction que vous devez appeler.
Voici une implémentation de base d’AttachProperties. N’oubliez pas que l’exemple n’inclut pas le code permettant de déterminer quelles propriétés existent, ni le code permettant de localiser les propriétés.
#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;
}