В хуке функции вызываемой через SDT добавил mutex, чтоб создать critical section. Пользуюсь mutex'ом следующим образом: Код (Text): // инициализация KMUTEX mutex; KeInitializeMutex(&mutex, 0); // вход в critical section KeWaitForSingleObject(&mutex, Executive, KernelMode, FALSE, NULL); // завершение critical section KeReleaseMutex(&мutex, FALSE); Вроде все настолько просто, что нет места для ошибок. Но ... совершенно очевидно вижу, что несколько потоков одновременно проходят в critical section. Может кто видит в чем ошибка?
Мне не понятно из кода где именно выделяется память для mutex. Если это производится в стеке, то тогда понятно почему не работает. Согласно В.П.Солдатову память должна быть выделена в нестраничном пуле. Для отладки предлагаю вывести содержимое структуры KMUTEX после инициализации и при входе в критическую секцию и посмотреть что там да как.
katrus, не понял, ты что его каждый раз инициализаруешь ? Надо только один раз, а потом юзать KeWaitForMutexObject/KeReleaseMutex