FilterGetMessage without OVERLAPPED
От: Age91  
Дата: 28.01.15 08:49
Оценка:
Доброго времени суток.

Занимаюсь разработкой минифильтра фс. В юзер моде сервис с которым драйвер взаимодействует посредством FltSendMessage (с нулевым таймаутом снизу) и FilterGetMessage (с OVERLAPPED и GetOverlappedResult) и FilterReplyMessage сверху. Всё работает очень даже не плохо, пока не сделаешь логOFF ибо дальнейший логON совершить не удается: не появляется курсор в поле ввода пароля (Win XP x86) при этом остальной интерфейс отвечает . Просмотрев стек вызовов всех потоков каждого процесса WinDbg'ом в этот момент, очень огорчился не увидев там ни одного "подвешенного" вызова с моим драйвером. Ладно, пишем заглушку эмулирующую отправку сообщений на обработку сервисной части (может там Lock), при этом исключается взаимодействие с драйвером. Логин проходит.
Делаю вывод что проблема во взаимодействии 0 и 3 кольца. Использование OVERLAPPED по msdn'у: для каждого вызова FilterGetMessage заново инициализированная структура и новое событие с ручным сбросом для нее. Но все же вызывает подозрение. Вообще его использовал для получения длины входящего сообщения — оно может изменяться. Хватает буфера — хорошо, мало — выделим сколько нужно. Ок, попробую без overlapped... Вторые сутки пробую и больше 3-4ех сообщений от драйвера получить не удается:
FilterGetMessage раз: срабатывает result == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) -> держи буфер побольше.
FilterGetMessage два: S_OK
FilterGetMessage три: S_OK
FilterGetMessage четыре: E_FAIL и никакой инфы больше.

FilterGetMessage работает в ОДНОМ потоке (архитектурно).

Есть мысли по этому поводу?
Re: FilterGetMessage without OVERLAPPED
От: Andrew.W Worobow https://github.com/Worobow
Дата: 02.02.15 08:25
Оценка:
Здравствуйте, Age91, Вы писали:

A>Есть мысли по этому поводу?


Мне кажется, что вопрос вам надо все же сформулировать более четко.
Не все кто уехал, предал Россию.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.