蓝屏,谁之过?

Bug总能在你意想不到的地方给你个措手不及,只是它所带来并不是惊喜,而是Blue Screen Of Death !

既如此,只能兵来将挡。

先介绍一下程序的大体流程:

NTSTATUS
XXXProcessDirents(…)
{    
    do {
        KeEnterCriticalRegion();
        ExAcquireResourceSharedLite(&fcb->Resource, TRUE);

        /* access several members of fcb structure */
        ExReleaseResourceLite(&fcb->Resource);
        KeLeaveCriticalRegion();

         XXXXProcessDirent(…);

    } while (list_is_not_empty(….));

    return status;
}

NTSTATUS
XXXXProcessDirent(…)
{
    HANDLE handle = NULL;
    XXXX_FILE_HEADE fileHead;
    ……

    /* open file */
    status = ZwCreateFile(&handle, GENERIC_READ, &oa, &iosb, NULL, 0,
                          FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
                          FILE_OPEN, 0, NULL, 0);

    /* read file header*/
    status = ZwReadFile(handle, ioevent, NULL, NULL, &iosb, (PVOID)&fileHead,
                        sizeof(XXXX_FILE_HEADE), &offset, NULL);

    /* check whether file is interesting to us */
    if (status == STATUS_SUCCESS && iosb.Information == sizeof(……)) {
        /* it’s my taste, haha */
    }

    /* close file, not interested in it any more */

    if (handle){
        ZwClose(handle);
    }

    return status;
}

过程比较简单,XXXProcessDirents()会循环调用XXXProcessDirent(),直至列表中所有项全检查完毕。

下面再来看windbg分析吧:

1: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 0abc9867, memory referenced
Arg2: 00000002, IRQL
Arg3: 00000001, bitfield :
bit 0 : value 0 = read operation, 1 = write operation
bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: 806e7a2a, address which referenced memory

Debugging Details:
------------------

WRITE_ADDRESS:  0abc9867

CURRENT_IRQL:  2

FAULTING_IP:
hal!KeAcquireInStackQueuedSpinLock+3a
806e7a2a 8902            mov     dword ptr [edx],eax

DEFAULT_BUCKET_ID:  DRIVER_FAULT

BUGCHECK_STR:  0xA

PROCESS_NAME:  System

TRAP_FRAME:  b9019bbc -- (.trap 0xffffffffb9019bbc)
ErrCode = 00000002
eax=b9019c40 ebx=00000000 ecx=c0000211 edx=0abc9867 esi=c0000128 edi=8842d268
eip=806e7a2a esp=b9019c30 ebp=b9019c68 iopl=0         nv up ei ng nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010286
hal!KeAcquireInStackQueuedSpinLock+0x3a:
806e7a2a 8902            mov     dword ptr [edx],eax  ds:0023:0abc9867=????????
Resetting default scope

LAST_CONTROL_TRANSFER:  from 806e7a2a to 80544768

STACK_TEXT:
b9019bbc 806e7a2a badb0d00 0abc9867 804f4e77 nt!KiTrap0E+0x238
b9019c68 806e7ef2 00000000 00000000 b9019c80 hal!KeAcquireInStackQueuedSpinLock+0x3a
b9019c68 b9019d24 00000000 00000000 b9019c80 hal!HalpApcInterrupt+0xc6
WARNING: Frame IP not in any known module. Following frames may be wrong.
b9019cf0 80535873 00000000 8896fb20 00000000 0xb9019d24
b9019d10 b79d87ff ba668a30 8859b7e8 00000440 nt!ExReleaseResourceLite+0x8d
b9019d2c b79d8a5c 8a3ff2f0 00000003 ba6685f0 XXXXX!XXXProcessDirents+0xef
b9019d88 b79e163a e2f6b170 00000001 00000001 XXXXX!XXXKernelQueryDirectory+0x20c
b9019ddc 8054616e b79e1530 88a8ae00 00000000 nt!PspSystemThreadStartup+0x34
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16

问题出在系统函数ExReleaseResourceLite()及KeAcquireInStackQueuedSpinLock()上,且程序要写的地址为0abc9867 ,明显不对,所以此处可做栈损坏推断。

第一嫌疑要考虑的是,XXXProcessDirents()中有锁保护的部分,此部分是果真是最容易造成栈损坏buffer复制操作。但经过仔细检查及测试,便排除了此部分出错的可能。

在排除第一嫌疑后,就没有明显目标了。只好再接着看windbg log:

貌似KeAcquireInStackQueuedSpinLock()要写的地址是LockHandle的LockQueue->Next,而LockHandle一般都在从当前堆栈分配的,由此可肯定之前对于栈损坏的推断。可问题是,是谁导致的栈损坏。

Stack中有hal!HalpApcInterrupt()调用记录,它是处理APC的软中断。hal!HalpApcInterrupt()会一般会调用nt!KiDeliverApc()来处理线程的APC队列。但当ExReleaseResourceLite()调用的时候,线程还处于临界区内(Critical Section),此时User mode APC及Kernel mode normal APC都会被禁止的,但Kernel mode special APC不会。

Kernel Special APC最常见的情况便是由IoCompleteRequest()添加的:在APC Level中调用IopCompleteRequest()以处理Irp的Stage 2的清理工作。

至此,问题终于有些眉目了。分析代码中唯一有可能导致APC添加的地方就在函数XXXXProcessDirent()中的ZwReadFile()调用,而且fileHead正是于堆栈中分配的。

想到此处,此bug的根据原因便付出水面:

XXXXProcessDirent()没有处理ZwReadFile()返回STATUS_PENDING的情况,此情形下,XXXXProcessDirent()退出并继续执行,而之前的ZwReadFile()的IRP完成操作也在同时进行(还没有完成),并且此完成操作所要写的fileHead地址,正是早已被回收并加以重用的当前栈。

搞清楚之后,便在调用ZwReadFile()后,特别针对STATUS_PENING的情况来调用ZwWaitForSingleObject()以确保读操作全部完成后,再进行下一步操作。

到此,问题解决!

一个蓝屏的问题,竟然如此之绕,不禁让我想起刘震云的《一句顶一万句》,只是这能顶一万句的一句到底是哪句呢?

<下一步打算写写APC相关的东西,操作系统将APC隐藏得太深,总让人捉摸不定!>

18,244 条评论

  1. Этот текст представляет собой обзор свежих данных и исследований в области медицины. Он призван помочь читателям понять, как научные достижения влияют на лечение, диагностику и общее состояние системы здравоохранения.
    Изучить аспект более тщательно – вызвать капельницу от запоя

  2. Наркологическая клиника «Трезвый путь» в Москве оказывает профессиональную медицинскую помощь людям с алкогольной и наркотической зависимостью. В центре проводится лечение алкоголизма, наркомании, абстинентного синдрома, последствий длительного употребления алкоголя и наркотиков. Специалисты работают круглосуточно, поэтому обратиться за консультацией, вызвать нарколога на дому или приехать в стационар можно в любое время. Для каждого человека подбирается индивидуальный план лечения с учетом состояния организма, стажа зависимости, сопутствующих заболеваний, психических расстройств и ранее проводившейся терапии.
    Изучить вопрос подробнее – https://narkologicheskaya-klinika-moskva15.ru/

  3. Ломка — это острый синдром отмены, возникающий после длительного употребления алкоголя или наркотических веществ. При резком прекращении приема подобных веществ организм испытывает острую нехватку необходимых компонентов, что приводит к развитию тяжелых симптомов, таких как сильная тревожность, бессонница, мышечные судороги, головокружение, потливость и повышенная возбудимость. В такой критической ситуации быстрое и квалифицированное вмешательство врача-нарколога является залогом сохранения здоровья и предупреждения серьезных осложнений.
    Подробнее – http://snyatie-lomki-nnovgorod8.ru/snyatie-lomki-narkomana-v-nnovgorode/

  4. В этой статье рассматриваются актуальные вопросы, связанные с развитием медицинской науки и её внедрением в повседневную практику. Особое внимание уделено вопросам профилактики, ранней диагностики и использованию технологий для улучшения здоровья человека.
    Все материалы собраны здесь – вызов частного нарколога

  5. В этой статье мы обсудим процесс восстановления после зависимостей, акцентируя внимание на различных методах и подходах к реабилитации. Читатели узнают, как создать план выздоровления и использовать полезные ресурсы для достижения устойчивых изменений.
    Погрузиться в детали – нарколог на дом круглосуточно

  6. Помощь можно получить анонимно, с аккуратным оформлением и внимательным отношением к личным данным.
    Узнать больше – sdelat-kapelnicu-ot-zapoya

  7. Публикация охватывает основные направления развития современной медицины. Мы обсудим значимость научных исследований, инноваций в лечении и роли общественного участия в формировании системы здравоохранения.
    Ознакомиться с отчётом – нарколог на дом недорого

  8. Если при первичном звонке выявляются «красные флаги» — неукротимая рвота, одышка, спутанность, «скачущий» ритм, подозрение на травму — мы немедленно резервируем палату усиленного наблюдения. При низком риске стартуем амбулаторно или на дому с бесшовным переводом в стационар, если динамика меняется. В любом случае цель одна: безопасно стабилизировать состояние, вернуть питьё и физиологичный сон, объяснить семье и пациенту короткий «язык фактов», по которому судим об эффективности.
    Разобраться лучше – запой наркологическая клиника

  9. Все шаги фиксируются в карте наблюдения. Если динамика «плоская», меняется один параметр (скорость/объём/последовательность), и через оговорённое окно проводится повторная оценка. Это снижает риск побочных реакций и сохраняет дневную ясность.
    Узнать больше – http://vyvod-iz-zapoya-kaliningrad15.ru/vyvod-iz-zapoya-kaliningrad-staczionar/https://vyvod-iz-zapoya-kaliningrad15.ru

  10. Вывод из запоя на дому подходит пациентам со стабильными показателями, когда нет признаков тяжелого психоза, судорог, выраженной сердечной недостаточности и других состояний, требующих стационара. Дом позволяет получить лечение в привычной обстановке и сохранить конфиденциальность. Нарколог приезжает по указанному адресу, проводит осмотр, уточняет данные об употреблении алкоголя и заболеваниях, затем подбирает лечение. Заказать выезд можно по телефону; при первичном звонке важно сообщить длительность запоя, возраст, основные симптомы и лекарства, которые человек уже принимал.
    Ознакомиться с деталями – вывод из запоя москве

  11. Перед применением конкретных средств врач проводит обследование, определяет уровень интоксикации и выявляет сопутствующие заболевания. Это позволяет максимально точно подобрать лечение. Ниже представлены ключевые методы, которые применяются для стабилизации состояния пациента:
    Получить дополнительную информацию – http://vyvod-iz-zapoya-rostov-na-donu14.ru/vyvedenie-iz-zapoya-rostov-na-donu/

  12. Ниже представлен перечень основных направлений, используемых в современной наркологической помощи. Этот список отражает комплексный подход к лечению зависимостей.
    Получить дополнительную информацию – экстренная наркологическая помощь

  13. Ломка — это острый синдром отмены, возникающий после длительного употребления алкоголя или наркотических веществ. При резком прекращении приема подобных веществ организм испытывает острую нехватку необходимых компонентов, что приводит к развитию тяжелых симптомов, таких как сильная тревожность, бессонница, мышечные судороги, головокружение, потливость и повышенная возбудимость. В такой критической ситуации быстрое и квалифицированное вмешательство врача-нарколога является залогом сохранения здоровья и предупреждения серьезных осложнений.
    Детальнее – снятие ломок на дому

  14. I wanted something that would make my trip unforgettable. I searched for premium rental options before my trip. Then I found a company that truly delivered. rent a luxury car miami — the fleet was incredible. The staff was professional and genuine. It added a whole new level of excitement to my trip. This is the company to trust. luxury car rentals miami luxury car rentals miami Save it, share it, don’t lose it for the area. If you want a luxury car in Miami — just use the link. Luxury car rental Miami — drive the dream!

  15. Капельница на дому «Элегия Мед» — медицинская услуга для жителей Москвы, которым врач рекомендовал внутривенное лечение и которым удобнее получить помощь дома, а не тратить время на дорогу в клинику. Выезд на дому организуется круглосуточно по предварительной записи: оператор уточняет адрес, жалобы, возраст обратившегося, наличие хронических заболеваний, лекарства, которые принимаются постоянно, цель обращения и тип капельницы. Москва — большой город, поэтому возможность провести назначенную капельницу на дому особенно востребована у пожилых людей, маломобильных пациентов и тех, кому сложно посещать медицинский центр в рабочие часы.
    Изучить вопрос подробнее – https://nadomu2.kapelnica-ot-zapoya-v-moskve14-1.ru/

  16. Мы не ограничиваемся капельницей. Сервис включает организационные, клинические и поведенческие элементы, которые уменьшают хаос и ускоряют восстановление. Ниже — ключевые блоки, которые пациенты отмечают в отзывах как наиболее полезные и «приземлённые».
    Разобраться лучше – https://narkolog-na-dom-v-samare16.ru/vyvod-iz-zapoya-samara-narkolog-na-dom

  17. На протяжении всего периода лечения специалисты клиники контролируют динамику состояния, анализируя результаты лабораторных исследований и поведение пациента. Такой подход позволяет своевременно корректировать терапевтическую схему и предотвращать осложнения. Применяемые методы терапии соответствуют современным стандартам и одобрены медицинскими сообществами.
    Исследовать вопрос подробнее – https://narkologicheskaya-klinika-v-kazani16.ru/

  18. Вызов нарколога на дому подходит при стабильном самочувствии и отсутствии признаков, требующих лечения в стационаре. Выездная служба работает по Москве круглосуточно. При тяжелой интоксикации, судорогах, нарушении сознания, выраженной сердечной недостаточности или психических расстройствах пациенту может потребоваться лечение в клинике. Анонимно получить консультацию можно перед выездом: специалист уточнит ситуацию, расскажет, как проходит капельница на дому и какое лечение алкоголизма может быть рекомендовано после детокса.
    Ознакомиться с деталями – капельница от запоя клиника

  19. Если к «окну оценки» динамика ниже ожидаемой, меняется один параметр: последовательность введения, плотность «тихих окон», режим воды или время вечернего «безэкранного коридора». Такой минимализм делает вклад каждого шага прозрачным и снижает риск перегрузки.
    Подробнее – https://vivod-iz-zapoya-v-sankt-peterburge16.ru/vyvod-iz-zapoya-anonimno-v-sankt-peterburge/

  20. Для пациента важно проходить весь рекомендованный курс лечения, а не ограничиваться облегчением самочувствия. При алкоголизме продолжительностью 3 года, 5 лет, 15 лет и более подход может различаться. То же относится к наркомании: зависимость продолжительностью несколько лет часто требует реабилитационной программы и регулярного контроля в центре.
    Узнать больше – государственная наркологическая клиника москва

  21. Индивидуальная программа у нас — это модульный конструктор. В одних случаях критичен блок сна, в других — профилактика вечерних «волн» тревоги, в третьих — семейная медиированная встреча. Мы гибко переставляем модули, учитывая сопутствующие заболевания, приём базовых лекарств (антигипертензивные, антиаритмические, сахароснижающие), возраст и расписание пациента. Цель проста: чтобы терапия вписалась в жизнь, а не наоборот.
    Подробнее – https://narkologicheskaya-klinika-ryazan14.ru/

  22. Мы работаем с вниманием к деталям повседневности: как человек засыпает на фоне вечернего света, сколько воды переносит малыми глотками, как реагирует на цифровые уведомления, есть ли привычные «включатели» тяги и как на организм влияет шумное окружение. Врач и куратор переводят этот жизненный контекст в ясные, измеримые ориентиры: время до сна, число пробуждений, вариабельность пульса к сумеркам, объём воды, аппетит, переносимость тёплой мягкой пищи. Решения принимаются адресно и последовательно, чтобы сохранять ясность днём и избегать ненужной фармаконагрузки.
    Исследовать вопрос подробнее – http://narkologicheskaya-klinika-kaliningrad15.ru/kaliningrad-narkologicheskij-dispanser/

  23. Наркологическая помощь в Перми представляет собой комплекс мероприятий, направленных на диагностику, лечение и профилактику различных форм зависимостей. Современные наркологические клиники обеспечивают индивидуальный подход к каждому пациенту, учитывая особенности его состояния и историю заболевания. Важно своевременно обращаться за квалифицированной помощью, чтобы снизить риски осложнений и улучшить качество жизни.
    Получить больше информации – http://narkologicheskaya-pomoshh-perm0.ru/narkolog-perm-czeny/

  24. Специалист также может отказаться проводить инфузию на дому, если отсутствует подтвержденное назначение, имеются противопоказания к препарату, требуется постоянное мониторирование показателей или невозможно обеспечить безопасные условия. При наличии инфекционных заболеваний учитываются особенности организации визита и правила обработки материалов. Иногда правильный выбор — не капельница на дому, а прием в клинике, обследование или направление в профильное отделение больницы.
    Изучить вопрос подробнее – капельница на дому цена

  25. Лечение ломки в клинике «Эдельвейс» проходит по четко отлаженной схеме, которая учитывает индивидуальные особенности каждого пациента. После первоначального осмотра и сбора анамнеза составляется персональный план терапии, цель которого – как можно быстрее снять симптомы ломки и стабилизировать состояние пациента. Ниже приведен поэтапный алгоритм лечения:
    Ознакомиться с деталями – нарколог на дом снятие ломки

  26. Сочетание медицинских и психотерапевтических мер создаёт устойчивую систему поддержки. Пациенты получают возможность постепенно восстановить утраченное здоровье и психологическую стабильность.
    Подробнее – https://narkologicheskaya-klinika-v-kazani16.ru/narkologicheskaya-klinika-kazan-otzyvy/

  27. Соблюдаем конфиденциальность, бережно общаемся с пациентом и его близкими на каждом этапе.
    Ознакомиться с деталями – narkologicheskaya-klinika

  28. Городская среда Калининграда — контрастные подъезды, близость моря с переменчивым ветром, плотный сезонный трафик — может усиливать вечернюю реактивность. Поэтому маршруты организованы «тихо»: согласованная парковка, отдельный вход без вывесок и очередей, короткая регистрация, приглушённая тёплая подсветка в зоне ожидания, отсутствие громких объявлений. Коммуникация с пациентами и близкими строится через защищённые каналы, а уведомления приходят в «беззвучном» режиме в согласованные «окна». Такой дизайн не ради «красоты сервиса», а ради клинического эффекта: чем меньше сенсорной нагрузки, тем быстрее выравнивается пульс к вечеру, тем легче возвращается переносимость питья и тёплой пищи, тем меньше потребность в ночных «усилениях».
    Подробнее тут – вывод наркологическая клиника калининград

  29. Вывод из запоя на дому — это управляемый медицинский процесс, где каждая деталь имеет значение: от первичного осмотра и грамотного подбора инфузионного профиля до сенсорной дисциплины в помещении и чётких «окон оценки» результата. В наркологической клинике «СеверМед Трезвость» мы используем принцип минимально достаточных вмешательств: одна цель на этап, один измеримый маркер и одна корректировка за раз. Такой подход снижает нагрузку на организм, повышает предсказуемость и делает восстановление переносимым для пациента и его близких.
    Разобраться лучше – наркологический вывод из запоя

  30. Этот документ охватывает важные аспекты медицинской науки, сосредотачиваясь на ключевых вопросах, касающихся здоровья населения. Мы рассматриваем свежие исследования, клинические рекомендации и лучшие практики, которые помогут улучшить качество лечения и профилактики заболеваний. Читатели получат возможность углубиться в различные медицинские дисциплины.
    Что ещё нужно знать? – нарколог вывод из запоя

  31. Публикация знакомит читателей с различными подходами к реабилитации. От традиционных методов до современных программ — вы узнаете, как выбрать оптимальный путь к выздоровлению и преодолеть препятствия на этом пути.
    Открой скрытое – лечение алкоголизма

  32. Эта доказательная статья представляет собой глубокое погружение в успехи и вызовы лечения зависимостей. Мы обращаемся к научным исследованиям и опыту специалистов, чтобы предоставить читателям надежные данные об эффективности различных методик. Изучите, что работает лучше всего, и получите информацию от экспертов.
    Изучить материалы по теме – нарколог вывод из запоя

  33. Вывод начинается с осмотра пациента. Квалифицированный врач уточняет продолжительность запоя, возраст, хронические заболевания, сведения о ранее принятых лекарствах и примерное количество выпитого. Для правильного выбора схемы нужно знать о заболеваниях сердца, печени, почек, психических нарушениях и аллергических реакциях. При необходимости берут анализы крови или мочи, выполняют ЭКГ и назначают дополнительные исследования.
    Изучить вопрос подробнее – вызвать капельницу от запоя

  34. В данной статье мы поговорим о будущем медицины, акцентируя внимание на прорывных разработках и их потенциале. Читатель узнает о новых подходах к лечению, роли искусственного интеллекта и возможностях персонализированной медицины.
    Дополнительно читайте здесь – Частная наркологическая клиника

  35. Капельница на дому не сводится к механическому введению раствора. Медик оценивает состояние пациента, давление, пульс, температуру, показатели крови при наличии результатов, переносимость препаратов и вероятность осложнений. Для медицинского персонала важны качество процедуры, корректная дозировка и контроль реакции организма. Выездной формат особенно удобен пожилому человеку, человеку со сниженной физической активностью или тому, кому тяжело посещать клиники самостоятельно.
    Узнать больше – https://nadomu1.kapelnica-ot-zapoya-v-moskve14-1.ru/

  36. Медицинские услуги на дому выбирают при стабильном самочувствии, когда нет признаков тяжелого острого состояния и врач допускает лечение вне клиники. На дому можно провести курс назначенных внутривенных капельниц, выполнить отдельный укол, организовать наблюдение медсестры и получить консультацию врача. Услуга полезна, если обратившемуся сложно самостоятельно приехать на прием или требуется провести лечение в удобное время.
    Подробнее – http://www.nadomu2.kapelnica-ot-zapoya-v-moskve14-1.ru

  37. Единая панель оценки помогает действовать быстро и безошибочно. Мы фиксируем параметры, объясняем их смысл пациенту и семье и тут же привязываем к ним действия. Пример приведён в таблице: это не заменяет осмотр, но показывает логику, которой мы придерживаемся на выезде и в приёмном кабинете.
    Углубиться в тему – запой наркологическая клиника рязань

  38. Этот обзор медицинских исследований собрал самое важное из последних публикаций в области медицины. Мы проанализировали ключевые находки и представили их в доступной форме, чтобы читатели могли легко ориентироваться в актуальных темах. Этот материал станет отличным подспорьем для изучения медицины.
    Узнать из первых рук – Частная наркологическая клиника

  39. Такая карта снимает неопределённость. Пациент понимает, чего ожидать; родственники — когда и по каким метрикам судить об успехе; команда — что именно корректировать, чтобы сохранить управляемость терапии даже ночью.
    Разобраться лучше – https://narkologicheskaya-klinika-murmansk15.ru/

  40. Наркологическая клиника «РеМед Карелия» — это круглосуточная медицинская помощь, построенная на принципе клинической точности: каждая процедура имеет цель, проверяемые маркеры и назначенное окно переоценки. Мы используем современные методы детоксикации и постабстинентной стабилизации, не перегружая терапию «на всякий случай» и не полагаясь на универсальные «сильные капельницы». Вместо этого — модульные схемы, корректировка одного параметра за раз и обязательная оценка результата. Такой подход снижает фармаконагрузку, ускоряет восстановление сна и аппетита и делает лечение предсказуемым для пациента и его семьи. Анонимность встроена в процессы: немаркированные входы, гражданская форма персонала, нейтральные формулировки в документах, «тихие» уведомления и разграниченный доступ к карте наблюдения.
    Выяснить больше – http://narkologicheskaya-klinika-v-petrozavodske15.ru/petrozavodsk-narkologiya/https://narkologicheskaya-klinika-v-petrozavodske15.ru

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注