Итак, мы с Вами умеем создавать фильтр и добавлять его к IIS. В тот момент когда мы добавляем фильтр к IIS вызывается функция GetFilterVersion.
BOOL WINAPI GetFilterVersion ( PHTTP_FILTER_VERSION pVer // структура с информацией для сервера );
Эта функция вызывается только один раз в момент запуска сервера. В виду такого ее поведения она подходит для инициализации данных, если они нужны. Ну, например, сколько раз производилось обработка запроса фильтром за сеанс работы. Сервер хранит набор фильтров. Наверно есть массив :-))) ответственный за хранения фильтров и информации от них. И наверно когда добавляется новый фильтр выделяется новая ячейка. А вот чтобы заполнить ее информацией сервер просто передает Вам указатель на структуру HTTP_FILTER_VERSION, чтобы Вы могли ее заполнить сами. Структура эта такая:
typedef struct _HTTP_FILTER_VERSION { DWORD dwServerFilterVersion; // Версия сервера Данные передаются заполненные !!! DWORD dwFilterVersion; // версия фильтра CHAR lpszFilterDesc[SF_MAX_FILTER_DESC_LEN+1]; // короткое описание DWORD dwFlags; // приоритет фильтра } HTTP_FILTER_VERSION, *PHTTP_FILTER_VERSION;
Наш волшебник уже создал класс на основе класса CHttpFilter, который уже фильтр. И функцию GetFilterVersion уже создал, давайте посмотрим.
BOOL CMyFilterFilter::GetFilterVersion(PHTTP_FILTER_VERSION pVer) { // Вызываем инициализацию по молчанию CHttpFilter::GetFilterVersion(pVer); // Очишаем набор флагов базавого класса pVer->dwFlags &= ~SF_NOTIFY_ORDER_MASK; // Устанавливаем флаги pVer->dwFlags |= SF_NOTIFY_ORDER_HIGH | SF_NOTIFY_SECURE_PORT | SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_END_OF_NET_SESSION; // Читаем строку описания и передаем в структуру TCHAR sz[SF_MAX_FILTER_DESC_LEN+1]; ISAPIVERIFY(::LoadString(AfxGetResourceHandle(), IDS_FILTER, sz, SF_MAX_FILTER_DESC_LEN)); _tcscpy(pVer->lpszFilterDesc, sz); return TRUE; }
Кроме приоритетов мы должны так же указать серверу о каких событиях передавать уведомления. Вот эти флаги:
Эти флаги можно установить вручную, а можно воспользоваться вторым шагом в волшебнике. Вот смотрите, здесь вы устанавливаете уведомления.