Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Network Monitors chama a função RecognizeFrame do de um analisador para determinar que o analisador reconhece os dados não reivindicados de um frame. Os dados não reivindicados podem estar no início de um quadro, mas, normalmente, os dados não reivindicados estão localizados no meio de um quadro. A ilustração a seguir mostra dados não reivindicados localizados no meio de um quadro.
O Monitor de Rede fornece as seguintes informações quando chama a função RecognizeFrame:
- Uma alça para o quadro.
- Um ponteiro para o início do quadro.
- Um ponteiro para o início dos dados não reivindicados.
- O valor MAC do primeiro protocolo no quadro.
- O número de bytes nos dados não reivindicados; ou seja, os bytes restantes no quadro.
- Um identificador para o protocolo anterior.
- O deslocamento do protocolo anterior.
Quando a DLL do analisador determina que os dados não reivindicados começam com o protocolo do analisador, a DLL do analisador determina onde o próximo protocolo é iniciado e qual protocolo segue. A DLL do analisador funciona das seguintes maneiras condicionais:
- Se a DLL do analisador reconhecer dados não reivindicados, a DLL do analisador definirá o parâmetro pProtocolStatus e retornará um ponteiro para o próximo protocolo no quadro ou para NULL. NULL será retornado se o protocolo atual for o último protocolo no quadro.
- Se a DLL do analisador reconhecer dados não reivindicados e identificar o protocolo que se segue (a partir das informações fornecidas no protocolo), a DLL do analisador retornará um ponteiro para o identificador do próximo protocolo no parâmetro phNextProtocol da função.
- Se a DLL do analisador não reconhecer dados não reivindicados, a DLL do analisador retornará o ponteiro para o início dos dados não reivindicados e o Monitor de Rede continuará tentando analisar os dados não reivindicados.
Para implementar o RecognizeFrame
Teste para determinar se você reconhece o protocolo.
Se você reconhecer dados não reivindicados e souber qual protocolo segue, defina pProtocolStatus como PROTOCOL_STATUS_NEXT_PROTOCOL, defina phNextProtocol para um ponteiro que aponte para o identificador do próximo protocolo e, em seguida, retorne um ponteiro para o próximo protocolo.
–ou–
Se você reconhecer dados não reivindicados e não souber qual protocolo segue, defina pProtocolStatus como PROTOCOL_STATUS_RECOGNIZED e, em seguida, retorne um ponteiro para o próximo protocolo.
–ou–
Se reconhecer dados não reclamados e o seu protocolo for o último num quadro, defina o pProtocolStatus como PROTOCOL_STATUS_CLAIMED e, em seguida, retorne NULL.
–ou–
Se você não reconhecer dados não reivindicados, defina pProtocolStatus como PROTOCOL_STATUS_NOT_RECOGNIZED e, em seguida, retorne o ponteiro que é passado para você em pProtocol.
A seguir está uma implementação básica do RecognizeFrame.
#include <windows.h>
LPBYTE BHAPI MyProtocol_RecognizeFrame( HFRAME hFrame,
LPBYTE pMacFrame,
LPBYTE pProtocol,
DWORD MacType,
DWORD BytesLeft,
HPROTOCOL hPrevProtocol,
DWORD nPreviuosProtOffset,
LPDWORD pProtocolStatus,
LPHPROTOCOL phNextProtocol,
LPDWORD InstData)
// Test unclaimed data.
// If unclaimed data is recognized, but you do not know what follows.
*pProtocolStatus = PROTOCOL_STATUS_RECOGNIZED;
return pProtocol + MY_PROTOCOL_LENGTH;
// If unclaimed data is recognized and you know what follows.
*pProtocolStatus = PROTOCOL_STATUS_NEXT_PROTOCOL;
phNextProtocol = GetProtocolFromTable(
hTable,
ItemToFind,
lpInstData);
return pProtocol + MY_PROTOCOL_LENGTH;
// If unclaimed data is recognized and the protocol is the last
// protocol in the frame.
*pProtocolStatus = PROTOCOL_STATUS_CLAIMED;
return NULL;
// If the unclaimed data is not recognized.
*pProtocolStatus = PROTOCOL_STATUS_NOT_RECOGNIZED;
return *pProtocol;
}