Шаг 4 - GetFilterVersion

Итак, мы с Вами умеем создавать фильтр и добавлять его к 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;
}

Кроме приоритетов мы должны так же указать серверу о каких событиях передавать уведомления. Вот эти флаги:

Эти флаги можно установить вручную, а можно воспользоваться вторым шагом в волшебнике. Вот смотрите, здесь вы устанавливаете уведомления.

4_1.gif (11556 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.