Алексей Пахунов

… также известный как "Not a kernel guy"

Алексей Пахунов

  • Вести с полей.

    Сегодня был мой последний день работы в Microsoft. Завтра мне еще будет нужно выполнить последние формальности, но рабочим днем завтра назвать язык не поворачивается. Доступа к почте и корпоративной сети у меня уже нет. В общей сложности я проработал...
  • Про то, как мы один тест запускали…

    Проект, над которым я сейчас работаю, небольшой. Экспериментальная железка, драйвер, вспомогательный сервис, скрипты всякие. Пишут это все два с половиной человека: я, да полтора землекопа контрактника. Дописали мы все это до состояния, когда уже можно...
  • Почему Process.TotalProcessorTime не работает для удаленных процессов.

    Вопрос из почты: Скажите пожалуйста. Есть тут такой класс, верней конкретно одно из его свойств http://msdn.microsoft.com/en-us/library/system.diagnostics.process.totalprocessortime.aspx . Сказано, что его можно получить только локально. А почему...
  • Linux, или туда и обратно.

    Две истории про переход Windows программистов на Linux и обратно: I sincerely tried, but I still hate Linux Why I’ve finally had it with my Linux server and I’m moving back to Windows Вторая особенно хороша - David Gewirtz там...
  • Переход на зимнее время. 2 серия.

    На Хабре опубликована детальная статья про отмену перехода на зимнее время: http://habrahabr.ru/blogs/sysadm/130305 . Украина, Белоруссия, Армения Что касается изменения часовых поясов в Белоруссии, Украине и Армении, то компании Microsoft известно...
  • Looking for Russian and Ukrainian graduates.

    Microsoft проведет очередной набор разработчиков в Киеве. На этот раз рассматриваются выпускники 2011 года и будущие выпускники 2012 года. Пожалуйста, ссылайтесь на этот блог (blog.not-a-kernel-guy.com) при отправке резюме. Шансов на положительное решение...
  • Переход на зимнее время - ой.

    Все-таки в Раде балбесы сидят. Отказались от перехода на зимнее время за месяц до запланированного перехода. А софт когда обновлять будем, вы подумали? Ну, допустим, Microsoft успеет – выпустит обновление за неделю до перехода. Его поставит процентов...
  • Как работают виртуальные рабочие столы в Windows.

    Читаю статью на Хабре про виртуальные рабочие столы в Windows . В конце статьи висит вопрос: UPD: Если вы знаете принцип работы подобных программ или какой-либо отдельной в частности, поделитесь этими знаниями, нам всем будет очень интересно. ...
  • Команда Bing стала немного больше.

    На объявление Bing Search will be hosting a recruiting trip to Russia в этом блоге откликнулось, по словам рекрутера, больше 20-ти человек. Из них трое прошли все интервью и получили предложение о работе. Довольно неплохо, я полагаю. Cross-posted from...
  • Microsoft Advertising will be hosting a recruiting trip to Russia.

    Команда Microsoft Advertising собирается приехать в Москву в октябре собеседовать разработчиков из России и соседних стран, желающих вступить в ряды империи зла перебраться в США. Просьба, при посылке резюме ссылаться на меня (Alexey Pakhunov) - очень...
  • Можно ли использовать функцию RtlCaptureContext() из x86 кода?

    Вопрос из почты: The question is really simple: could we use RtlCaptureContext on X86? The MSDN ( http://msdn.microsoft.com/en-us/library/ms680659(v=VS.85).aspx ) says it’s only for 64 but the bug is for X86 and I see some kernel code are...
  • Bing Search will be hosting a recruiting trip to Russia.

    Пробежало по внутренней рассылке. Рекрутер (Anubha Mahajan) просила ссылаться на меня (Alexey Pakhunov), чтобы отследить кандидатов, пришедших с этого блога. Bing will be hosting a recruiting event in late July/Early August this year to recruit...
  • afd.sys

    Windows Sockets общаются с сетевым стеком через драйвер afd.sys. Происхождение этого имени для меня было загадкой до тех пор, пока я не заглянул в список «Non-Plug and Play Drivers» в Device Manager. Для этого нужно выбрать в меню «Show hidden devices...
  • Функция DeviceIoControlEx.

    Win32 API предоставляет «Ex» варианты функций ReadFile и WriteFile, в то время как «Ex» варианта функции DeviceIoControl не предлагается. Исправить этот недостаток очень просто, так как соответствующая функция Native API документирована...
  • Неогороженное минное поле – это еще не повод по нему ходить.

    Пришло письмо с вопросом:

    Обнаружилась следующая проблема:

    Наша программа сохраняет и считывает последнюю открытую ею директорию в разделе реестра, где сохраняют последние посещенные ими директории и другие программы, а именно в ветке «HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU». Это в 32-х разрядной версии. Но оказывается, что в 64-х разрядной версии данной ветки реестра в узле HKCU не существует, а она находится в «HKEY_USERS\<некий идентификатор пользователя>\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU».

    Так вот вопрос: как мне программно доступиться к этой ветке, если идентификатор пользователя неизвестен? Или, может, есть способ узнать этот идентификатор каким-то образом? А может где-то есть в реестре зеркало этой ветки, к которой можно получить доступ более простым способом?

  • OSPF: оптимизм.

    Протокол Open Shortest Path First (OSPF) позволяет IP-маршрутизаторам автоматически определять топологию сети и генерировать оптимальные таблицы маршрутизации. Публикуемые элементы топологии снабжаются меткой возраста и порядковым номером. Тем самым даже...
  • Список состояний конечного автомата.

    Подсмотрел у коллеги простой и довольно удобный способ держать список состояний/событий конечного автомата в одном месте. А то обычно они норовят расползтись по разным углам: enum, объявляющий соответствующие константы, массив имен состояний для отладки...
  • Вы, конечно, будете смеяться, …

    … но я понятия не имел, что вложенные структуры в C/C++ можно инициализировать плоским списком значений. Есть, например, вот такая структура: struct foo { int value; }; struct bar { int value; }; struct foobar { foo value1; bar value2;...
  • Впечатления от поездки и конференции.

    Впечатления от поездки. Пыльно, грязновато. Дороги и тротуары по обыкновению разбиты, однако заметно, что если выровнять тротуары и бордюры, разбить газоны, починить заборы, поддерживать это все в чистоте (и не делать более ничего другого), то запросто...
  • РИТ++ 2011: Сетевая подсистема Windows глазами разработчика.

    Слайды моего доклада на РИТ++ 2011: Сетевая подсистема Windows глазами разработчика . Спасибо за внимание. ;-) MD5: 9d095bbc517f564758ec98ca779fadd4 SHA1: 46bebb8991f5b977ffcf978f277eb82b3cc08140 PDF версия: Сетевая подсистема Windows глазами разработчика...
  • Inception.

    Сижу я сегодня на работе, никого не трогаю, отладчиком отладчик отлаживаю. А что, отладчик - тоже человек программа. Тем более что немногим ранее я его немножко совсем поломал, пытаясь добавить поддержку некоей конфигурации, которая текущей реинкарнацией отладчика не поддерживается. Ну вот, запускаю я его примерно вот таким образом:

    windbg.exe kd.exe -k com:port=com1,baud=115200

    …и замечаю, что что-то не так. А именно - опять сломался наш корпоративный прокси. А я как раз хотел посмотреть в… ну скажем MSDN. Попробовал и так и сяк. Не работает, вылетает по таймауту. Ну хорошо, но тут начитают происходить еще более мистические вещи. Outlook вдруг перестает реагировать мышь и клавиатуру; IE вообще не запускается – процесс стартует, но окно не показывается. Несколько подозрительно для проблем с прокси.

  • РИТ++, секция «RootConf».

    Меня пригласили выступить на конференции РИТ++ 2011 , которая пройдет в Москве в конце апреля. Предварительная тема доклада: «Сетевая подсистема Windows глазами разработчика. Краткий, неполный и, в основном, неверный обзор. :-)» Я собираюсь рассказать...
  • Про то, как отцепиться и ничего не порушить.

    Главная проблема с хуками состоит не в том, как зацепиться, а в том, как отцепиться и ничего не порушить. К примеру, приходит недавно письмо:

    We recently saw an AV in stress where our vectored exception handler was called after our dll was unloaded. After investigating the issue, it seems like removing the vectored exception handler does not wait for all users of that exception handler to finish (and does not even remove the exception handler from list for future users if there is one current user). So, there seems to be no way to synchronize removing the exception handler and the dll unloading – any synchronization within the exception handler is useless since the exception thread may be about to call the exception handler.

    Недавно мы наблюдали падение приложения во время стрессового тестирования, вызванное тем, что векторный обработчик исключения был вызван после того, как наша DLL была выгружена из памяти. В процессе расследования выяснилось, что, похоже, снятие векторного обработчика исключения не ожидает, пока все пользователи этого обработчика закончат работу (и даже не удаляет обработчик для будущих пользователей, если обработчик в данный момент используется). Так, похоже, что не существует способа синхронизировать снятие векторного обработчика и выгрузку DLL – любая синхронизация в пределах обработчика исключения бесполезна, поскольку поток, в котором произошло исключение, может только готовится вызвать обработчик исключения.

  • Правильный прототип функции DebugBreak().

    Функция DebugBreak() объявлена вот таким образом: void WINAPI DebugBreak(void); Если подумать, то это не очень удачный вариант объявления. Гораздо более удобным вариантом был бы: void __cdecl DebugBreak(...); Почему? В такую функцию можно...
  • История одной оптимизации.

    Писал я тут свой первый драйвер для сетевой карты. Взял, как полагается, за основу готовый образец драйвера. Выкинул всю аппаратно-зависимую часть. Добавил свою. По ходу дела выяснил, что tear-down код в примере отсутствует напрочь, чтение стандартной конфигурации не сделано, кругом hardcoded константы. В общем, обычная история, что вы хотите от образца?

    Дописал до работающего состояния, протестировал скорость TCP/IP соединения. Получается примерно 3 MByte/sec на одно соединение, около 12 MByte/sec – пиковая пропускная способность нескольких параллельных соединений. Маловато для 1 Gbit/sec соединения.