Посоветуйте обход самоблокировки при перехвате UsMode

Тема в разделе "WASM.WIN32", создана пользователем coocky, 18 мар 2008.

  1. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    Привет. У меня есть перехват неких функци. Внутри перехвата заполняется файл маппинг.Для исключения одновремменого доступа к нему,использую критические секции. Однако у меня есть перехват ZwCloseHandle Там также есть критическая секция.. Незнаю,что происходит при LeaveCriticalSection в дебрях,но иногда при выполнение происходит самоблокировка,при чем подозреваю, что пападаю в перехват ZwCloseHandle,там останавливаюсь на EnterCriticalSection В итоге стою на LeaveCriticalSection в функции 1 и стою на EnterCriticalSection в ZwCloseHandle

    Пример условный
    Код (Text):
    1. Func_1 ()
    2.  
    3. {
    4.  EnterCriticalSection(&cs);
    5. ...
    6. ...
    7. ...
    8. ...
    9. LeaveCriticalSection (&cs);// почему-то иногда попадаю в прехват ZwCloseHandle
    10. }
    11.  
    12. ZwCloseHandle()
    13.  
    14. {
    15. EnterCriticalSection(&cs);//Вот тут жду освобождение LeaveCriticalSection из Func_1
    16. ...
    17. ...
    18. ...
    19. ...
    20. LeaveCriticalSection (&cs);
    21. }
    Уже голову сломал-как можно обойти?
    Снимать перехват в Func_1 () перед LeaveCriticalSection (&cs);А после нее сразу ставит-убьет и скорость и функциональность...
    Мож есть у кого какие соображение (м... юзермод).
     
  2. a1ss

    a1ss New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2007
    Сообщения:
    120
    Че то я не пойму.. Ну обойдешь ты свои собственные EnerCriticalSection, выполнится ZwCloseHandle и произойдет непосредственно одновременный доступ к мапенгу. Ты же этого избегаешь? Зачем обходить тогда?

    Надо искать другие пути выхода из ситуации.
     
  3. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    Его то как раз и не собираюсь я обходить. Меня тревожит LeaveCriticalSection.Видимо там происходит закрытие хендла.Как-то его хочу обойти... Ксати ,то же самое происходит,если использовать другие методы синхронизации.В частности мютекс.
    Вот ищу,потому сюда и обратился.
     
  4. a1ss

    a1ss New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2007
    Сообщения:
    120
    Вот там и произойдет одновременный доступ... не суть вообщем.

    А ты потрейси LeaveCriticalSection, если ты говоришь, что не всегда происходит взаимоблокировка, то может она не всегда вызыввает ZwCloseHandle, разберись почему.. Хотя на бред похоже %)
     
  5. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    Похоже..Только это так.Если убрать критсекцию из ZwCloseHandle,все работает.
    К сожалению потестить в полной мере ZwCloseHandle не могу. Ибо Хендлов куча в приложениях! Любых! И оконных
    OutputDebugString на ZwCloseHandle валит DbgView в синьку.Проверте сами :)
    Конечно не всегда! Ведь критсекция работает только из разных тредов. Но знаю одно-при моем расскладе последнюю строчку,которую выдает DbgView-"Начало освобождения критсекции " в таком коде
    Код (Text):
    1. Func_1 ()
    2.  
    3. {
    4.  
    5. OutputDebugString(L"Начало завхвата критсекции");
    6.  EnterCriticalSection(&cs);
    7. OutputDebugString(L"Конец завхвата критсекции");
    8. ...
    9. ...
    10. ...
    11. ...
    12. OutputDebugString(L"Начало освобождения критсекции");
    13. LeaveCriticalSection (&cs);
    14. OutputDebugString(L"Конец освобождения критсекции");
    15. }
    потом все замирает... Так что вот так..
     
  6. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    Хм..Ну да ладно..Вообщем насколько терпения хватило, настолько в отладке ни разу не попался после LeaveCriticalSection (&cs); хендл в структуре cs.Буду дальше искать..
     
  7. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    Незнаю даже,что и делать.. :dntknw:
    Все равно происходит.Но стоит только обрать критсекцию из ZwCloseHandle,как все рабоает.