Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сетевой монитор использует функцию экспорта DllMain для идентификации существования средства синтаксического анализа и выпуска ресурсов, которые сетевой монитор использует для хранения сведений о средстве синтаксического анализа.
При первом вызове DllMain средство синтаксического анализа вызывает CreateProtocol выполнить следующие действия:
- Укажите протокол, который обнаруживает средство синтаксического анализа.
- Укажите точки входа для оставшихся функций экспорта синтаксического анализа, которые вызываются сетевым монитором.
Когда Network Monitor вызывает DllMain в последний раз, DllMain вызывает DestroyProtocol, чтобы освободить все ресурсы, которые Network Monitor использует для хранения информации о синтаксическом анализаторе.
Следующая процедура определяет шаги, необходимые для реализации DllMain.
Для реализации DllMain
Укажите структуру ENTRYPOINTS для функции CreateProtocol и глобальной переменной Attach. Переменная Attach используется для отслеживания количества запущенных экземпляров протокола.
Просмотрите значение параметра команды, который задает операционная система.
Если для параметра Command задано значение DLL_PROCESS_ATTACH и присоединение имеет значение 0, вызовите CreateProtocol, чтобы указать имя протокола и точки входа для следующих функций экспорта.
- Регистрация
- Отмена регистрации
- РаспознатьКадр
- ПрисоединитьСвойства
- FormatProperties (только в случае, если сетевой монитор будет отображать свойства протокола).
Если для параметра команды задано значение DLL_PROCESS_DETACH и Attach равен 0, вызовите DestroyProtocol с помощью дескриптора экземпляра, возвращаемого CreateProtocol.
Возвращает TRUE, так как функция синтаксического анализа DllMain всегда должна возвращать TRUE.
Ниже приведена базовая реализация DllMain. В примере кода используется оператор case для перехвата значений параметра команды, чтобы определить, следует ли вызывать CreateProtocol или DestroyProtocol.
#include <windows.h>
// Entry point structure for parser export functions and global
// Attach variable.
ENTRYPOINTS EntryPoints =
{
Register,
Deregister,
RecognizeFrame,
AttachProperties,
FormatProperties
};
DWORD Attached = 0;
BOOL WINAPI DllMain(HANDLE hInstance, ULONG Command, LPVOID Reserved)
{
switch(Command)
{
// Call CreateProtocol.
case DLL_PROCESS_ATTACH:
// Loading parser DLL.
if(Attached == 0)
{
hProtocol = CreateProtocol( "ProtocolName",
&EntryPoints,
ENTRYPOINTS_SIZE);
}
Attached++;
break;
// Call DestroyProtocol.
case DLL_PROCESS_DETACH:
// Unloading parser DLL.
Attached--;
if(Attached == 0)
{
DestroyProtocol( hProtocol);
}
break;
}
return TRUE;
}