Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I monitor di rete chiamano la funzione RecognizeFrame di un parser per determinare che il parser riconosce i dati non reclamati di un frame. I dati non reclamato possono trovarsi all'inizio di un frame, ma in genere i dati non reclamato si trovano al centro di un frame. La figura seguente mostra i dati non reclamato che si trovano al centro di un frame.
Network Monitor fornisce le seguenti informazioni quando chiama la funzione RecognizeFrame:
- Maniglia per il telaio.
- Puntatore all'inizio del frame.
- Un puntatore all'inizio dei dati non reclamati.
- Valore MAC del primo protocollo nel frame.
- La quantità di byte nei dati non reclamati; ovvero, i byte rimanenti nel frame.
- Riferimento al protocollo precedente.
- L'offset del protocollo precedente.
Quando la DLL del parser determina che i dati non reclamati iniziano con il protocollo del parser, la DLL del parser determina dove inizia il protocollo successivo e quale protocollo segue. La DLL del parser funziona nei modi condizionali seguenti:
- Se la DLL del parser riconosce i dati non richiesti, la DLL del parser imposta il parametro pProtocolStatus e restituisce un puntatore al protocollo successivo nel frame oppure NULL. NULL viene restituito se il protocollo corrente è l'ultimo protocollo nel frame.
- Se la DLL del parser riconosce i dati non reclamati e identifica il protocollo seguente (dalle informazioni fornite nel protocollo), la DLL del parser restituisce un puntatore all'handle del protocollo successivo nel phNextProtocol parametro della funzione.
- Se il parser DLL non riconosce i dati non reclamati, il parser DLL restituisce il puntatore all'inizio dei dati non reclamati e il monitoraggio di rete continua a tentare di analizzare i dati non reclamati.
Per implementare il RecognizeFrame
Testare per determinare di riconoscere il protocollo.
Se si riconoscono i dati non richiesti e si sa quale protocollo seguire, impostare pProtocolStatus su PROTOCOL_STATUS_NEXT_PROTOCOL, impostare phNextProtocol su un puntatore che indirizza l'handle per il protocollo successivo e quindi restituire un puntatore che indirizza al protocollo successivo.
–o–
Se si riconoscono dati non richiesti e non si sa quale protocollo segue, impostare pProtocolStatus su PROTOCOL_STATUS_RECOGNIZED e quindi restituire un puntatore al protocollo successivo.
–o–
Se si riconoscono i dati non richiesti e il protocollo è l'ultimo protocollo nel frame, imposta pProtocolStatus su PROTOCOL_STATUS_CLAIMED e poi restituisci NULL.
–o–
Se non si riconoscono dati non richiesti, impostare pProtocolStatus su PROTOCOL_STATUS_NOT_RECOGNIZED e quindi restituire il puntatore che è stato passato a voi in pProtocol.
Di seguito è riportata un'implementazione di base di 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;
}