Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Netzwerkmonitor verwendet die Exportfunktion ParserAutoInstallInfo, um einen Parser zu installieren. Wenn ParserAutoInstallInfo aufgerufen wird, gibt der Parser eine PF\_PARSERDLLINFO-Struktur zurück, die alle Informationen enthält, die der Netzwerkmonitor zum Installieren einer Parser-DLL benötigt.
Hinweis
Der Netzwerkmonitor behält eine Liste vorhandener Parser in der Datei Parser.ini bei und erstellt für jeden installierten Parser eine separate INI-Datei.
Während des Installationsvorgangs muss die Parser-DLL Folgendes identifizieren:
- Die Anzahl der Parser in der DLL, einschließlich eines Namens und einer Kommentarbeschreibung für jeden Parser.
- Die Protokolle, die dem Parserprotokoll vorausgehen.
- Die Protokolle, die dem Parserprotokoll folgen.
Hinweis
Der Netzwerkmonitor verwendet die vorausgehenden und folgenden Parserprotokollinformationen, um die Handoffsätze und Folgesätze von Parsern zu aktualisieren, die von der Parser-DLL identifiziert werden.
Im folgenden Verfahren werden die Schritte identifiziert, die zum Implementieren von ParserAutoInstallInfo erforderlich sind.
So implementieren Sie ParserAutoInstallInfo
- Weisen Sie eine PF_PARSERDLLINFO-Struktur mithilfe von HeapAlloc zu.
- Geben Sie den Speicher mithilfe von HeapFree an den Heap zurück.
- Beachten Sie, dass dieser Aufruf auch eine PF_PARSERINFO-Struktur für jeden Parser in der DLL zuweisen muss.
- Geben Sie die Anzahl der Parser (in der Regel eine) an, die die DLL im nParsers-Element von PF_PARSERDLLINFO enthält.
- Geben Sie einen Namen, einen Kommentar und eine optionale Hilfedatei in den Elementen szProtocolName, szComment und szHelpFile jeder PF_PARSERINFO-Struktur an.
- Geben Sie die Protokolle an, die jedem DLL-Protokoll vorausgehen. Eine der folgenden Bedingungen gilt für einen eingehenden Handoffsatz.
- Wenn die vorausgehenden Protokolle bestimmen können, dass Ihr Protokoll aus Daten in den vorausgehenden Protokollen folgt, legen Sie das pWhoHandsOffToMe-Element von PF_PARSERINFO fest. In diesem Fall wird Ihr Protokoll dann den Handoffsätzen der vorausgehenden Protokolle hinzugefügt.
- Wenn die vorausgehenden Protokolle nicht bestimmen können, dass Ihr Protokoll aus Daten in den vorausgehenden Protokollen folgt, legen Sie das pWhoCanPrecedeMe-Element von PF_PARSERINFO fest. In diesem Fall wird das Protokoll dann den nachfolgenden Sätzen der Protokolle hinzugefügt.
- Geben Sie die Protokolle an, die jedem DLL-Protokoll nachfolgen. Eine der folgenden Bedingungen gilt für einen ausgehenden Folgesatz.
- Wenn Ihr Protokoll anhand der Daten in Ihrem Protokoll bestimmen kann, welche Protokolle nachfolgen, legen Sie das pWhoDoIHandOffTo-Element von PF_PARSERINFO fest. In diesem Fall werden diese Protokolle dem Handoffsatz Ihrer Protokolle hinzugefügt.
- Wenn Ihr Protokoll anhand der Daten in Ihrem Protokoll nicht bestimmen kann, welche Protokolle nachfolgen, legen Sie das pWhoCanFollowMe-Element von PF_PARSERINFO fest. In diesem Fall werden diese Protokolle dem Folgesatz Ihrer Protokolle hinzugefügt.
- Geben Sie die PF_PARSERDLLINFO-Struktur an den Netzwerkmonitor zurück.
Im Folgenden finden Sie eine grundlegende Implementierung von ParserAutoInstallInfo. Das Codebeispiel stammt aus dem generischen Parser, den der Netzwerkmonitor bereitstellt.
#include <windows.h>
PPF_PARSERDLLINFO WINAPI ParserAutoInstallInfo()
{
/////////////////////////////////////////////////////////////////
//
// Allocate memory for PF_PARSERDLLINFO structure.
//
/////////////////////////////////////////////////////////////////
PPF_PARSERDLLINFO pParserDllInfo;
PPF_PARSERINFO pParserInfo;
DWORD NumProtocols;
DWORD NumParsers;
DWORD NumFollows;
NumParsers = 1;
pParserDllInfo = (PPF_PARSERDLLINFO)HeapAlloc( GetProcessHeap(),
HEAP_ZERO_MEMORY,
sizeof( PF_PARSERDLLINFO ) +
NumParsers * sizeof( PF_PARSERINFO) );
if( pParserDllInfo == NULL)
{
return NULL;
}
/////////////////////////////////////////////////////////////////
//
// Specify the number of parsers in the DLL.
//
/////////////////////////////////////////////////////////////////
pParserDllInfo->nParsers = NumParsers;
/////////////////////////////////////////////////////////////////
//
// Specify the name, comment, and Help file for each protocol.
//
/////////////////////////////////////////////////////////////////
pParserInfo = &(pParserDllInfo->ParserInfo[0]);
sprintf_s( pParserInfo->szProtocolName, MAX_PROTOCOL_NAME_LEN,
"TestProtocol" );
sprintf_s( pParserInfo->szComment, MAX_PROTOCOL_COMMENT_LEN,
"Test protocol for SDK" );
sprintf_s( pParserInfo->szHelpFile, MAX_PATH, "");
/////////////////////////////////////////////////////////////////
//
// Specify preceding protocols.
//
/////////////////////////////////////////////////////////////////
PPF_HANDOFFSET pHandoffSet;
PPF_HANDOFFENTRY pHandoffEntry;
// Allocate PF_HANDOFFSET structure.
NumHandoffs = 1;
pHandoffSet = (PPF_HANDOFFSET)HeapAlloc( GetProcessHeap(),
HEAP_ZERO_MEMORY,
sizeof( PF_HANDOFFSET ) +
NumHandoffs * sizeof( PF_HANDOFFENTRY) );
if( pHandoffSet == NULL )
{
return pParserDllInfo;
}
// Fill in handoff set
pParserInfo->pWhoHandsOffToMe = pHandoffSet;
pHandoffSet->nEntries = NumHandoffs;
// TCP PORT FFFF
pHandoffEntry = &(pHandoffSet->Entry[0]);
sprintf_s( pHandoffEntry->szIniFile, MAX_PATH, "TCPIP.INI" );
sprintf_s( pHandoffEntry->szIniSection, MAX_PATH, "TCP_HandoffSet" );
sprintf_s( pHandoffEntry->szProtocol, MAX_PROTOCOL_NAME_LEN,
"BLRPLATE" );
pHandoffEntry->dwHandOffValue = 0xFFFF;
pHandoffEntry->ValueFormatBase = HANDOFF_VALUE_FORMAT_BASE_DECIMAL;
/////////////////////////////////////////////////////////////////
//
// Specify the following protocols.
//
/////////////////////////////////////////////////////////////////
PPF_FOLLOWSET pFollowSet;
PPF_FOLLOWENTRY pFollowEntry;
// Allocate PF_FOLLOWSET structure
NumFollows = 1;
pFollowSet = (PPF_FOLLOWSET)HeapAlloc( GetProcessHeap(),
HEAP_ZERO_MEMORY,
sizeof( PF_FOLLOWSET ) +
NumFollows * sizeof( PF_FOLLOWENTRY) );
if( pFollowSet == NULL )
{
return pParserDllInfo;
}
// Fill in the follow set
pParserInfo->pWhoCanFollowMe = pFollowSet;
pFollowSet->nEntries = NumFollows;
// Add SMB
pFollowEntry = &(pFollowSet->Entry[0]);
sprintf_s( pFollowEntry->szProtocol, MAX_PROTOCOL_NAME_LEN, "SMB" );
/////////////////////////////////////////////////////////////////
//
// Return the PF_PARSERDLLINFO structure.
//
/////////////////////////////////////////////////////////////////
return pParserDllInfo;
}