Странное поведение KMUTEX

Тема в разделе "WASM.NT.KERNEL", создана пользователем katrus, 9 июл 2008.

  1. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    В хуке функции вызываемой через SDT добавил mutex, чтоб создать critical section. Пользуюсь mutex'ом следующим образом:
    Код (Text):
    1. // инициализация
    2. KMUTEX mutex;
    3. KeInitializeMutex(&mutex, 0);
    4.  
    5. // вход в critical section
    6. KeWaitForSingleObject(&mutex, Executive, KernelMode, FALSE, NULL);
    7.  
    8. // завершение critical section
    9. KeReleaseMutex(&мutex, FALSE);
    Вроде все настолько просто, что нет места для ошибок. Но ... совершенно очевидно вижу, что несколько потоков одновременно проходят в critical section. Может кто видит в чем ошибка?
     
  2. shtepa_sergey

    shtepa_sergey New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2008
    Сообщения:
    6
    Мне не понятно из кода где именно выделяется память для mutex. Если это производится в стеке, то тогда понятно почему не работает.

    Согласно В.П.Солдатову память должна быть выделена в нестраничном пуле.

    Для отладки предлагаю вывести содержимое структуры KMUTEX после инициализации и при входе в критическую секцию и посмотреть что там да как.
     
  3. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Он определен глобальной переменной.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    katrus
    попробуй FastMutex'ы.
     
  5. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    katrus, не понял, ты что его каждый раз инициализаруешь ? Надо только один раз, а потом юзать KeWaitForMutexObject/KeReleaseMutex
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    хе мне даже не приходило в голову что он инициализацию проводит в коде обработчика :\
     
  7. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Конечно инициализирую только один раз и не в коде обработчика