Menerapkan RecognizeFrame

Monitor Jaringan memanggil fungsi RecognizeFrame pengurai untuk menentukan bahwa pengurai mengenali data bingkai yang tidak diklaim. Data yang tidak diklaim mungkin berada di awal bingkai, tetapi biasanya, data yang tidak diklaim terletak di tengah bingkai. Ilustrasi berikut menunjukkan data yang tidak diklaim yang terletak di tengah bingkai.

data yang tidak diklaim yang terletak di tengah bingkai

Monitor Jaringan menyediakan informasi berikut saat memanggil fungsi RecognizeFrame :

  • Handel ke bingkai.
  • Penunjuk ke awal bingkai.
  • Penunjuk ke awal data yang tidak diklaim.
  • Nilai MAC protokol pertama dalam bingkai.
  • Jumlah byte dalam data yang tidak diklaim; yaitu, byte yang tersisa dalam bingkai.
  • Handel ke protokol sebelumnya.
  • Offset protokol sebelumnya.

Ketika DLL pengurai menentukan bahwa data yang tidak diklaim dimulai dengan protokol pengurai, DLL pengurai menentukan di mana protokol berikutnya dimulai, dan protokol mana yang mengikuti. DLL pengurai berfungsi dengan cara bersyarat berikut:

  • Jika DLL pengurai mengenali data yang tidak diklaim, DLL pengurai mengatur parameter pProtocolStatus , dan mengembalikan penunjuk ke protokol berikutnya dalam bingkai, atau NULL. NULL dikembalikan jika protokol saat ini adalah protokol terakhir dalam bingkai.
  • Jika DLL pengurai mengenali data yang tidak diklaim dan mengidentifikasi protokol yang mengikuti (dari informasi yang disediakan dalam protokol), maka DLL pengurai mengembalikan penunjuk ke handel protokol berikutnya dalam parameter phNextProtocol fungsi.
  • Jika DLL pengurai tidak mengenali data yang tidak diklaim, DLL pengurai mengembalikan penunjuk ke awal data yang tidak diklaim, dan Monitor Jaringan terus mencoba mengurai data yang tidak diklaim.

Untuk mengimplementasikan RecognizeFrame

  1. Uji untuk menentukan bahwa Anda mengenali protokol.

  2. Jika Anda mengenali data yang tidak diklaim dan Anda tahu protokol mana yang mengikuti, atur pProtocolStatus ke PROTOCOL_STATUS_NEXT_PROTOCOL, atur phNextProtocol ke pointer yang menunjuk ke handel untuk protokol berikutnya, lalu kembalikan penunjuk ke protokol berikutnya.

    –Atau–

    Jika Anda mengenali data yang tidak diklaim dan Anda tidak tahu protokol mana yang mengikuti, atur pProtocolStatus ke PROTOCOL_STATUS_RECOGNIZED, lalu kembalikan pointer ke protokol berikutnya.

    –Atau–

    Jika Anda mengenali data yang tidak diklaim dan protokol Anda adalah protokol terakhir dalam bingkai, atur pProtocolStatus ke PROTOCOL_STATUS_CLAIMED, lalu kembaliKAN NULL.

    –Atau–

    Jika Anda tidak mengenali data yang tidak diklaim, atur pProtocolStatus ke PROTOCOL_STATUS_NOT_RECOGNIZED, lalu kembalikan penunjuk yang diteruskan kepada Anda di pProtocol.

Berikut ini adalah implementasi dasar 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;

}