Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ağ İzleyicileri, ayrıştırıcının bir çerçevenin sahipsiz verilerini tanıdığını belirlemek için ayrıştırıcının RecognizeFrame işlevini çağırır. Sahipsiz veriler bir çerçevenin başında bulunabilir, ancak çoğunlukla çerçevenin ortasında yer alır. Aşağıdaki çizimde, bir çerçevenin ortasında bulunan sahipsiz veriler gösterilmektedir.
Ağ İzleyicisi, RecognizeFrame işlevini çağırdığında aşağıdaki bilgileri sağlar:
- Çerçeve için bir tutamak.
- Çerçevenin başlangıcına ilişkin bir işaretçi.
- Sahipsiz verilerin başlangıcına yönelik bir işaretçi.
- Çerçevedeki ilk protokolün MAC değeri.
- Sahipsiz verilerdeki bayt sayısı; diğer bir ifadeyle, çerçevede kalan bayt sayısıdır.
- Önceki protokolün tanıtıcısı.
- Önceki protokolün uzaklığı.
Ayrıştırıcı DLL, sahipsiz verilerin ayrıştırıcı protokolüyle başladığını belirlediğinde, ayrıştırıcı DLL'i sonraki protokolün nereden başlayacağını ve hangi protokolün takip ettiğini belirler. Ayrıştırıcı DLL'i aşağıdaki koşullu yollarla çalışır:
- Ayrıştırıcı DLL, sahiplenilmemiş verileri tanırsa, pProtocolStatus parametresini ayarlar ve çerçevedeki bir sonraki protokole veya NULLdeğerine bir işaretçi döndürür. Eğer geçerli protokol çerçevedeki son protokolse NULL döndürülür.
- Ayrıştırıcı DLL sahipsiz verileri tanır ve izleyen protokolü tanımlarsa (protokolde sağlanan bilgilerden), ayrıştırıcı DLL işlevin phNextProtocol parametresinde sonraki protokolün tanıtıcısına yönelik bir işaretçi döndürür.
- Ayrıştırıcı DLL'i sahipsiz verileri tanımıyorsa, ayrıştırıcı DLL'i işaretçiyi sahipsiz verilerin başlangıcına döndürür ve Ağ İzleyicisi sahipsiz verileri ayrıştırmaya çalışmaya devam eder.
RecognizeFrame uygulamak için
Protokolü tanıdığınızı belirlemek için sınayın.
sahipsiz verileri tanıyorsanız ve hangi protokolün izlenmesi gerektiğini biliyorsanız, pProtocolStatus'i PROTOCOL_STATUS_NEXT_PROTOCOL olarak ayarlayın, sonra phNextProtocol'ü, bir sonraki protokolün tutamacını işaret eden bir gösterici olarak ayarlayın ve ardından bir sonraki protokole bir gösterici döndürün.
–veya–
Sahipsiz verileri tanıyorsanız ve hangi protokolü izleyeceğini bilmiyorsanız, pProtocolStatus PROTOCOL_STATUS_RECOGNIZED olarak ayarlayın ve ardından bir sonraki protokole bir işaretçi döndürün.
–veya–
Sahipsiz verileri tanırsanız ve protokolünüzün çerçevedeki son protokol olması durumunda pProtocolStatus PROTOCOL_STATUS_CLAIMED olarak ayarlayın ve NULLdöndürin.
–veya–
Sahipsiz verileri tanımıyorsanız, pProtocolStatus'i PROTOCOL_STATUS_NOT_RECOGNIZED olarak ayarlayın ve ardından pProtocol'e geçirilen işaretçiyi geri döndürün.
Aşağıda, RecognizeFrametemel bir uygulaması yer alır.
#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;
}