"I hate Vista" day

Периодически моя нелегкая программистская судьба заставляет меня тестировать и исправлять что-то на Vista. Все уже на работе знают, что "I hate Vista" и считают, сколько раз за день я это произнесу.

Но сегодня было что-то особенное. Сегодня я понял, что есть что-то похуже висты. Это 64-битная Vista с включенным Account Control. Это уже не просто издевательство над девелопером - это просто какое-то вселенское зло в моем понимании.

Если Win32 приложения работают на этой висте в принципе по-прежнему, то портированные в Win64 сервисы работают совсем по-другому. Некоторые системные вызовы начинают фейлиться. Любой встреченный assert - вылет.

Самое простое - не могу создать глобальный Event, чтобы его было можно открыть в User mode процессе.

Делаю CreateEvent с выставленым DACL (матерь божъя, чем думал тот, кто проектировал API для работы с Security в Windows? И чем думал тот, кто потом спроектировал "упрощенные" функции для работы с Security, в которых без поллитры не разобраться? 2 страницы кода для выставления прав доступа!)

Так вот, создаю CreateEvent с доступом для Everyone в сервисе (в висте сервисы пускаются всегда в нулевой сессии, так что имя евента с Global\). Открываются эти события в юзер-модных процессах. Везде открываются без проблем и только в висте 64 с включенным Account Control не открываются эти эвенты для парочки сервисов. Потому что она почему-то игнорирует мое указание на доступ для Everyone и разрешает доступ только админам.

Почему игнорирует?

А фиг знает, все вызовы API проверяются и ни один не фейлится. Но 2 сервиса стабильно создают недоступные эвенты (Кстати, это очень легко проверяется Process Explorer-ом - всем рекоммендую).

Кто-нибудь встречался с таким странным багом?

Когда CreateEvent игнорирует мой SecurityAttribute и ставит секьюрити параметры по умолчанию? Отчего это может быть?

В общем, провел сегодня целый день в изучении симптомов, написании кода для работы с Security, гуглении про баги в висте и понял, что я не одинок. Интернет полон тех же самых вопросов, что задавал себе я, но ответов на них гораздо меньше, чем вопросов. А сэмплы кода с MSDN просто тупо фейлятся на висте64 с включенным AC.

Зато можно сказать, что получил как минимум +1 к debugging skills и WinAPI skills.

Кстати, я начинаю получать удовольствие от отладки многопроцессных приложений с десятками процессов и сотнями тредов - есть в этом что-то садо-мазо-магически притягательное.

"Доктор, я болен?".

Оригинал

2 комментариев к "I hate Vista" day

Ответить

 

 

 

Вы можете использовать эти HTML тэги

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>