Как фильтр ISAPI может различать загрузку IIS или ISA? - PullRequest
3 голосов
/ 11 февраля 2010

У меня есть приложение, реализованное в виде фильтра ISAPI, поведение которого нужно менять в зависимости от того, загружается ли оно ISA или IIS. Во время GetFilterVersion необходимо зарегистрироваться на SF_NOTIFY_SEND_RAW_DATA, если загружается ISA или SF_NOTIFY_SEND_RESPONSE, если загружается IIS.

Кажется, что нет никакой информации о сервере, переданном в GetFilterVersion. Существуют ли уловки, которые могут идентифицировать и различать IIS и ISA?

[править]

Приложению необходимо знать, какой сервер загружает его во время инициализации, во время вызова GetFilterVersion. Текущий запрос отсутствует, поэтому попытка получить SERVER_VARIABLE из переменных заголовка не будет работать; на данный момент нет переменных заголовка.

Для уточнения, мое приложение устанавливает заголовки ответов, такие как cookie-файлы и заголовки управления кэшем. При работе в контексте сервера ISA он должен использовать событие SF_NOTIFY_SEND_RAW_DATA для завершения этой операции, изменяя необработанные данные, отправляемые прокси-сервером ISA. Однако в IIS использование этого уведомления приводит к серьезным потерям производительности, поэтому приложение должно использовать SF_NOTIFY_SEND_RESPONSE. SF_NOTIFY_SEND_RESPONSE не будет работать с ISA, потому что это событие не запускается для прокси-ответов, только для ответов, которые исходят от самого ISA, таких как страницы ошибок. Наконец, регистрация событий происходит один раз во время GetFilterVersion () и не может быть изменена после загрузки фильтра.

Таким образом, приложение должно знать, во время инициализации, когда оно решает зарегистрироваться на SF_NOTIFY_SEND_RESPONSE или SF_NOTIFY_SEND_RAW_DATA, загружается ли оно IIS или ISA.

Ответы [ 3 ]

2 голосов
/ 24 февраля 2010

Последние версии IIS и ISA должны работать с рабочими процессами. Имя «w3proxy.exe» принадлежит ISA, а «w3wp.exe» принадлежит IIS. Получить текущее имя процесса и проверить его, вуаля.

РУЧКА winapi GetCurrentProcess ()

и это :

DWORD WINAPI GetModuleFileNameEx(
  __in      HANDLE hProcess,
  __in_opt  HMODULE hModule,
  __out     LPTSTR lpFilename,
  __in      DWORD nSize
);

Должен сделать трюк

0 голосов
/ 18 февраля 2010

вы можете получить SERVER_SOFTWARE (или другую переменную, указывающую ISA против IIS) из среды через getenv().

0 голосов
/ 11 февраля 2010

Я написал только приложения isapi, а не фильтры.но из приложения isapi вы можете вызвать GetServerVariable и запросить значение «SERVER_SOFTWARE»

см. http://msdn.microsoft.com/en-us/library/ms525335.aspx

, если вы не можете вызвать «GetServerVariable» из фильтра, тогда я не будуне знаю, как это сделать.

-don

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...