蓝屏,谁之过?

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隐藏得太深,总让人捉摸不定!>

17,924 条评论

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

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

  3. При острой интоксикации врач определяет объем медицинской помощи и необходимость стационара. Клиника не рекомендует самостоятельно использовать сильнодействующие препараты. Любые лекарственные вмешательства должны выполняться после оценки состояния.
    Узнать больше – наркологическая клиника стационар

  4. Важно выяснить длительность запоя, частоту и дозы потребляемого алкоголя, наличие ранее проведённых детоксикаций и психиатрических заболеваний. Эта информация помогает выбрать наиболее подходящий протокол инфузионной и медикаментозной терапии.
    Подробнее тут – https://тайный-вывод-из-запоя.рф

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

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

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

  8. Информация об обращении не передается третьим лицам, а детали лечения обсуждаются только с пациентом.
    Получить больше информации – vyvod-iz-zapoya-nedorogo

  9. Чтобы помощь была прозрачной и управляемой, каждый этап имеет цель, индикаторы безопасности и эффективности, а также понятное «окно оценки» результата. Коррекции проводятся «штучно», по правилу одного изменения — это защищает от полипрагмазии и позволяет читабельно видеть вклад каждого шага.
    Узнать больше – вывод из запоя вызов на дом казань

  10. После бурной ночи бывает так плохо. Ни встать, ни работать. Наркологическая клиника СПб — это когда врач приезжает сам. И голова начинает соображать. Наркологическая помощь стационар — без осуждения. Советую глянуть источник: наркологические клиники наркологические клиники И про центр наркологической помощи для Ленобласти. Не мучайтесь, если можно помочь.

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

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

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

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

  15. Вызов нарколога особенно актуален, если человек употребляет спиртное несколько дней подряд, испытывает выраженное похмелье или не может самостоятельно прекратить запой. Если проблемы продолжаются несколько лет, лечение алкоголизма требует последовательного подхода. Врач на дому оценивает жалобы и решает, допустимо ли лечение дома либо требуется стационарное лечение.
    Узнать больше – нарколог на дом в Красноярске

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

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

  18. «СтаврМедЦентр» собирает лечение из коротких модулей с понятными целями: быстро стабилизировать соматику, вернуть управляемый сон, снизить реактивность вечера, обучить «перехвату» импульса и закрепить это в спокойной рутине. Фармакологию используем дозированно, опираясь на витальные показатели и переносимость; поведенческий контур запускаем сразу: свет, вода, дыхание, цифровая гигиена, семейные договорённости. Ниже — ориентировочная архитектура маршрута. На практике последовательность и длительность настраиваются под конкретного человека и его среду.
    Исследовать вопрос подробнее – лечение в наркологической клинике

  19. Наркологическая клиника в Красноярске оказывает медицинскую помощь людям с алкогольной и наркотической зависимостью, абстинентным синдромом, психическими и соматическими расстройствами. Лечение начинается с приема и диагностики. Врач уточняет длительность употребления алкоголя или психоактивных веществ, оценивает клинические проявления интоксикации, сопутствующие заболевания и поведение человека. После обследования специалисты формируют индивидуальную программу, в которую могут входить дезинтоксикационная терапия, лекарственное лечение, психотерапия, кодирование и реабилитация.
    Получить больше информации – https://narkologicheskaya-klinika-v-krasnoyarske20.ru/

  20. Когда человек пьёт несколько дней подряд, состояние становится жизненно опасным: острая интоксикация этанолом, обезвоживание, скачки давления и угроза судорожных приступов требуют немедленного вмешательства. Частный медицинский центр «Частный Медик 24» в Балашихе и Московской области занимается оказанием неотложной наркологической помощи — мы организуем срочный выезд врача на дом, проводим детоксикацию, подбираем индивидуальную программу лечения алкоголизма и наркомании. Вывод из запоя выполняется быстро, анонимно и в строгом соответствии с лицензией, поэтому получить помощь реально в любое время суток, включая выходные. Наша команда — квалифицированные наркологи, психиатры, психотерапевты и психологи со стажем более 15 лет, а главный врач Довженко Валерий Николаевич лично контролирует сложные случаи. Позвоните по указанному телефону — и мы оперативно приедем, оценим состояние пациента и предложим наиболее эффективный метод решения проблемы.
    Изучить вопрос подробнее – https://3.vyvod-iz-zapoya-balashiha13.ru/

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

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

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

  24. С пациентом работают профильные специалисты, которые оценивают состояние и подбирают безопасный план помощи.
    Получить больше информации – https://1.kapelnica-ot-zapoya-v-moskve14.ru/

  25. Нарколог объясняет родственникам, какие действия допустимы до приезда бригады. Самостоятельно назначать сильнодействующие медикаменты, ставить капельницу или использовать неизвестные препараты не следует.
    Изучить вопрос подробнее – врач нарколог на дом в Красноярске

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

  27. Клиника принимает людей с разным стажем зависимости. Одни обращаются впервые, другие проходили лечение несколько раз за год и сталкивались со срывами. Очень важно не ждать, пока проблемы станут тяжелыми. Наркологическая помощь необходима при выраженной абстиненции, острой интоксикации, патологическом влечении, изменениях поведения и психических нарушениях. Если состояние связано с делирием или другими опасными проявлениями, обращение за медицинской помощью становится жизненно важным.
    Изучить вопрос подробнее – narkologicheskaya-klinika-v-krasnoyarske20.ru/

  28. При наличии опасных симптомов не стоит просить больного потерпеть еще несколько часов или самостоятельно давать лекарства. Бригада оценивает ситуацию, а при угрозе жизни рекомендует экстренное обращение в профильное учреждение. Государственный диспансер, городские больницы и частная наркологическая клиника имеют разные условия приема, однако при неотложной ситуации главным остается своевременное оказание помощи.
    Подробнее – vyvod-iz-zapoya-cena-balashiha

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

  30. Лечение запоя на дому выбирают, когда требуется выездная помощь. Нарколог приезжает домой, врач проводит оценку, а лечение выполняется в рамках доступной услуги. Вывод на дому позволяет организовать помощь без посещения клиники, но формат дома и формат клиники различаются. Наркологическая помощь на дому может включать капельницу, терапию и дальнейшие рекомендации.
    Узнать больше – вывод из запоя на дому цена Красноярск

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

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

  33. Частная наркологическая помощь требуется в различных ситуациях: при длительном запое, абстинентном синдроме, регулярном употреблении психоактивных веществ, наркотической зависимости, ухудшении психического состояния или повторном срыве после периода ремиссии. Наркологическая служба работает круглосуточно, поэтому консультацию можно получить в удобное время, включая выходные. При необходимости организуется срочный выезд врача на дом в Балашихе и Московской области либо госпитализация в стационар. Лечение в клинике проводится по индивидуальному плану, а полный курс может включать восстановление организма, психотерапевтические занятия, работу с родственниками и дальнейшую реабилитационную программу.
    Подробнее – https://narkologicheskaya-klinika-balashiha.ru/

  34. Мы не противопоставляем форматы — комбинируем их. Например, первые часы — выездная стабилизация с титрованной инфузией и чётким контролем АД/ЧСС/SpO?, затем — амбулаторные короткие визиты с вечерними онлайн-вставками. Если появляются «красные флаги» (дыхание, ритм, сознание), маршрут без пауз переводится в стационар: та же карта наблюдения, те же цели, только круглосуточный мониторинг и ночной пост. Приватность встроена на каждом этапе: нейтральные формулировки в документах, «тихие» уведомления, гражданская одежда персонала, доступ к данным по ролям.
    Получить больше информации – https://narkologicheskaya-klinika-stavropol15.ru/

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

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

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

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

发表回复

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