Привет. У меня есть перехват неких функци. Внутри перехвата заполняется файл маппинг.Для исключения одновремменого доступа к нему,использую критические секции. Однако у меня есть перехват ZwCloseHandle Там также есть критическая секция.. Незнаю,что происходит при LeaveCriticalSection в дебрях,но иногда при выполнение происходит самоблокировка,при чем подозреваю, что пападаю в перехват ZwCloseHandle,там останавливаюсь на EnterCriticalSection В итоге стою на LeaveCriticalSection в функции 1 и стою на EnterCriticalSection в ZwCloseHandle Пример условный Код (Text): Func_1 () { EnterCriticalSection(&cs); ... ... ... ... LeaveCriticalSection (&cs);// почему-то иногда попадаю в прехват ZwCloseHandle } ZwCloseHandle() { EnterCriticalSection(&cs);//Вот тут жду освобождение LeaveCriticalSection из Func_1 ... ... ... ... LeaveCriticalSection (&cs); } Уже голову сломал-как можно обойти? Снимать перехват в Func_1 () перед LeaveCriticalSection (&cs);А после нее сразу ставит-убьет и скорость и функциональность... Мож есть у кого какие соображение (м... юзермод).
Че то я не пойму.. Ну обойдешь ты свои собственные EnerCriticalSection, выполнится ZwCloseHandle и произойдет непосредственно одновременный доступ к мапенгу. Ты же этого избегаешь? Зачем обходить тогда? Надо искать другие пути выхода из ситуации.
Его то как раз и не собираюсь я обходить. Меня тревожит LeaveCriticalSection.Видимо там происходит закрытие хендла.Как-то его хочу обойти... Ксати ,то же самое происходит,если использовать другие методы синхронизации.В частности мютекс. Вот ищу,потому сюда и обратился.
Вот там и произойдет одновременный доступ... не суть вообщем. А ты потрейси LeaveCriticalSection, если ты говоришь, что не всегда происходит взаимоблокировка, то может она не всегда вызыввает ZwCloseHandle, разберись почему.. Хотя на бред похоже %)
Похоже..Только это так.Если убрать критсекцию из ZwCloseHandle,все работает. К сожалению потестить в полной мере ZwCloseHandle не могу. Ибо Хендлов куча в приложениях! Любых! И оконных OutputDebugString на ZwCloseHandle валит DbgView в синьку.Проверте сами Конечно не всегда! Ведь критсекция работает только из разных тредов. Но знаю одно-при моем расскладе последнюю строчку,которую выдает DbgView-"Начало освобождения критсекции " в таком коде Код (Text): Func_1 () { OutputDebugString(L"Начало завхвата критсекции"); EnterCriticalSection(&cs); OutputDebugString(L"Конец завхвата критсекции"); ... ... ... ... OutputDebugString(L"Начало освобождения критсекции"); LeaveCriticalSection (&cs); OutputDebugString(L"Конец освобождения критсекции"); } потом все замирает... Так что вот так..
Хм..Ну да ладно..Вообщем насколько терпения хватило, настолько в отладке ни разу не попался после LeaveCriticalSection (&cs); хендл в структуре cs.Буду дальше искать..
Незнаю даже,что и делать.. Все равно происходит.Но стоит только обрать критсекцию из ZwCloseHandle,как все рабоает.