Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Monitor Jaringan menggunakan fungsi ekspor ParserAutoInstallInfo untuk menginstal pengurai. Ketika ParserAutoInstallInfo dipanggil, pengurai mengembalikan struktur PF_PARSERDLLINFO yang berisi semua informasi yang diperlukan Monitor Jaringan untuk menginstal DLL pengurai.
Catatan
Monitor Jaringan menyimpan daftar pengurai yang ada dalam file Parser.ini , dan membuat file INI terpisah untuk setiap pengurai yang diinstal.
Selama proses penginstalan, DLL pengurai harus mengidentifikasi hal-hal berikut:
- Jumlah pengurai di DLL—termasuk deskripsi nama dan komentar untuk setiap pengurai.
- Protokol yang mendahului protokol pengurai.
- Protokol yang mengikuti protokol pengurai.
Catatan
Monitor Jaringan menggunakan informasi protokol pengurai sebelumnya dan berikut untuk memperbarui set handoff dan mengikuti set pengurai yang diidentifikasi DLL pengurai Anda.
Prosedur berikut mengidentifikasi langkah-langkah yang diperlukan untuk mengimplementasikan ParserAutoInstallInfo.
Untuk mengimplementasikan ParserAutoInstallInfo
- Alokasikan struktur PF_PARSERDLLINFO menggunakan HeapAlloc.
- Kembalikan memori ke timbunan menggunakan HeapFree.
- Ketahuilah bahwa panggilan ini juga harus mengalokasikan struktur PF_PARSERINFO untuk setiap pengurai di DLL.
- Tentukan jumlah pengurai (biasanya satu) yang dimuat DLL di anggota nParsers dari PF_PARSERDLLINFO.
- Tentukan nama, komentar, dan file Bantuan opsional di anggota szProtocolName, szComment, dan szHelpFile dari setiap struktur PF_PARSERINFO.
- Tentukan protokol yang mendahului setiap protokol DLL. Salah satu kondisi berikut berlaku untuk set handoff masuk.
- Jika protokol sebelumnya dapat menentukan bahwa protokol Anda mengikuti dari data dalam protokol sebelumnya, atur anggota p Siapa HandsOffToMe dari PF_PARSERINFO. Dalam hal ini, protokol Anda kemudian ditambahkan ke set handoff dari protokol sebelumnya.
- Jika protokol sebelumnya tidak dapat menentukan bahwa protokol Anda mengikuti dari data dalam protokol sebelumnya, atur p Siapa CanPrecedeMe anggota PF_PARSERINFO. Dalam hal ini, protokol Anda kemudian ditambahkan ke kumpulan protokol berikut.
- Tentukan protokol yang mengikuti setiap protokol DLL. Salah satu kondisi berikut berlaku untuk set tindak lanjut keluar.
- Jika protokol Anda dapat menentukan protokol mana yang diikuti berdasarkan data dalam protokol Anda, atur anggota PF_PARSERINFO p Siapa DoIHandOffTo. Dalam hal ini, protokol ini ditambahkan ke kumpulan handoff protokol Anda.
- Jika protokol Anda tidak dapat menentukan protokol mana yang diikuti berdasarkan data dalam protokol Anda, atur anggota p Siapa CanFollowMe dari PF_PARSERINFO. Dalam hal ini, protokol ini ditambahkan ke kumpulan protokol Anda berikut.
- Mengembalikan struktur PF_PARSERDLLINFO ke Monitor Jaringan.
Berikut ini adalah implementasi dasar ParserAutoInstallInfo. Contoh kode diambil dari pengurai generik yang disediakan Network Monitor.
#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;
}