蓝屏,谁之过?

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,988 条评论

  1. Схема помощи зависит от состояния, стажа употребления, противопоказаний и дальнейших целей лечения.
    Получить больше информации – vyvod-iz-zapoya-kapelnica

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

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

  4. Помощь можно получить анонимно, с аккуратным оформлением и внимательным отношением к личным данным.
    Получить больше информации – запой нарколог на дом

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

  6. Telefonumda mərc etmək üçün ən rahat yol tətbiqdir. Araşdırdım və gördüm ki, rəsmi mənbə var. 1xbet mobil indir — arayüz son dərəcə sürətlidir. Oyun başlayanda xəbərdarlıq edir. Həftəlik promosyonlar. İndi telefonumdan istənilən yerdə mərc edə bilirəm. 1xbet mobil yükle 1xbet mobil yükle Linkə baxın üçün Azərbaycan. Ən rahat yol budur. 1xbet indir — hər zaman, hər yerdə mərc azadlığı!

  7. Самостоятельно выйти из продолжительного запоя удается не всегда. Резкий отказ от алкоголя способен сопровождаться тремором рук, бессонницей, рвотой, тревожностью, скачками артериального давления, нарушениями работы сердца и нервной системы. В сложных случаях развивается тяжелый абстинентный синдром, судорожный приступ или алкогольный психоз. Поэтому человеку, который пьет несколько дней подряд и чувствует заметное ухудшение здоровья, рекомендуется своевременно обратиться за медицинской помощью. В клинике «Детокс» вывод из запоя проводится с учетом клинической ситуации, а при возможности врач организует срочный выезд нарколога на дом.
    Получить больше информации – вывод из запоя 24

  8. Городская среда Калининграда специфична: морской ветер, сезонные пробки, яркие витрины в вечерние часы. Эти факторы часто усиливают тревожность и мешают засыпанию. Поэтому мы проектируем выезд «мягко»: согласованная парковка, немаркированный вход, короткий маршрут до места процедуры, отсутствие громких звонков и «визуального шума» у порога. Родственникам предоставляем «тихие окна» связи — короткие апдейты в заранее оговорённое время без лишних подробностей. Такой формат не просто комфортнее, он клинически полезен: чем меньше стимулов, тем меньше потребность в ночных «усилениях» и тем стабильнее проходит первая ночь.
    Углубиться в тему – https://vyvod-iz-zapoya-v-kaliningrade15.ru/

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

  10. На первом этапе проводится комплексное обследование, позволяющее выявить степень зависимости, определить физическое и психическое состояние пациента, а также выявить сопутствующие заболевания. Это позволяет составить индивидуальный план лечения.
    Подробнее можно узнать тут – http://lechenie-narkomanii-novosibirsk0.ru

  11. Кодирование от алкоголизма в «Мед Алко» в Москве применяется как часть комплексной программы помощи людям с алкогольной зависимостью. Лечение строится после очной оценки состояния, анамнеза, срока употребления алкоголя и готовности человека соблюдать трезвость. Врач-нарколог уточняет противопоказания, проводит диагностику, объясняет, как действует выбранный способ, и определяет, требуется ли предварительная детоксикация организма. Такой подход позволяет подобрать лечение индивидуально, снизить вероятность нежелательных реакций и сделать процедуру медицински обоснованной. Помощь доступна анонимно, а круглосуточная наркологическая служба принимает обращения по телефону и через заявку на сайте.
    Подробнее – https://kodirovanie-ot-alkogolizma-moskva15-1.ru/

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

  13. Мы отказываемся от «пакета ради пакета». Программа собирается из модулей, каждый из которых имеет конкретную цель, окно оценки и критерии, при выполнении которых команда двигается дальше. Ниже — примерная карта: она не заменяет приём, но показывает, как мы принимаем решения без импровизаций.
    Узнать больше – наркологическая клиника наркологический центр в воронеже

  14. В этой статье рассматриваются способы преодоления зависимости и успешные истории людей, которые справились с этой проблемой. Мы обсудим важность поддержки со стороны близких и профессионалов, а также стратегии, которые могут помочь в процессе выздоровления. Научитесь первоочередным шагам к новой жизни.
    Где можно узнать подробнее? – клиника частный медик 24 отзывы

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

  16. «Как отмечает главный врач-нарколог Виктор Сергеевич Левченко, «современная наркологическая клиника должна обеспечивать не только медикаментозное лечение, но и комплексную поддержку пациента на всех этапах восстановления».»
    Разобраться лучше – https://narkologicheskaya-klinika-krasnodar14.ru/anonimnaya-narkologicheskaya-klinika-krasnodar/

  17. Вызвать врача стоит, если человек не может самостоятельно прекратить употребление спиртного, появились выраженные признаки абстиненции или самочувствие заметно ухудшается. Чем дольше продолжается запой, тем выше вероятность осложнений.
    Узнать больше – https://5.narcolog-na-dom-krasnoyarsk0.ru/

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

  19. Подготовка может занять от нескольких минут на консультацию до более длительного периода, если необходимо полное восстановление после тяжелой выпивки. Решение о проведении процедуры принимает врач после оценки текущего состояния. Такой порядок снижает риск осложнений и помогает подобрать безопасное лечение алкоголизма.
    Узнать больше – kodirovanie-ot-alkogolizma-cena

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

  21. В этой статье мы говорим о важности поддержки в процессе выздоровления. Рассматриваются семьи, группы поддержки, специалисты и онлайн-ресурсы, которые могут сыграть решающую роль в избавлении от зависимости.
    Читать полностью – вывод из запоя на дому цена в воронеже

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

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

  24. Петрозаводск добавляет нюансы: влажные сумерки, ветер от Онежского озера, «звонкие» подъезды старого фонда. Поэтому бригада «СеверКар Медикус» приезжает в гражданской одежде, быстро и без лишних фраз. Координатор заранее уточняет код домофона, парковку, «окна связи» для близких; рекомендует приглушить верхний свет, подготовить воду комнатной температуры и свободный доступ к розетке. Такой «тихий сценарий» снижает сенсорную нагрузку, сглаживает пульсовые «пики» к вечеру и помогает заснуть без избыточной фармакологии.
    Выяснить больше – http://vyvod-iz-zapoya-petrozavodsk15.ru/vyvod-iz-zapoya-kruglosutochno-petrozavodsk/

  25. Вывод из запоя «Похмельная служба» в Москве помогает прекратить длительное пьянство, снять похмелье и стабилизировать самочувствие человека под контролем квалифицированного врача. Наркологическая служба оказывает помощь круглосуточно: нарколог приезжает на дом, проводит первичную диагностику, подбирает препараты и решает, допустимо ли лечение дома или безопаснее продолжить его в клинике. Если пациент страдает алкоголизмом несколько лет, запои стали продолжительными, появились судороги, галлюцинации, боли в сердце или выраженные расстройства психики, может потребоваться лечение в стационаре.
    Ознакомиться с деталями – vyvod-iz-zapoya-moskva-i-oblast

  26. В городе и ближайших районах клиника «УралМед Трезвость» обеспечивает оперативный выезд и амбулаторный приём без очередей. На этапе первичного контакта координатор уточняет только клинически значимые моменты: постоянные препараты и дозы, аллергии, эпизоды судорог/психозов в прошлом, базовые показатели (АД/ЧСС/SpO?, если доступны), длительность симптомов, возможность организовать «тихое окно» на 20–30 минут. Вместо долгих разговоров — короткая, спокойная логика: где безопаснее начать (дом/амбулатория/стационар), какую ближайшую цель выбираем, в каком интервале ждём эффект и что считаем сигналом для связи с дежурным врачом.
    Выяснить больше – http://narkologicheskaya-klinika-v-chelyabinske16.ru

  27. Когда нарколог приезжает на адрес, проводится полноценный медицинский осмотр. Врач оценивает сознание, пульс, давление, дыхание, признаки обезвоживания и выраженность абстинентного синдрома. При необходимости уточняется, какие лекарственные средства человек уже принимал самостоятельно. На основании этих данных доктор подбирает оптимальную схему лечения, а не ставит одинаковую капельницу каждому пациенту.
    Подробнее – skoraya-pomoshch-vyvoda-iz-zapoya

  28. Если человек ведет себя агрессивно, перестал ориентироваться в происходящем, появилась рвота, сильная тревога или психоз, родственникам нужно действовать своевременно. При критических признаках требуется скорая медицинская помощь.
    Узнать больше – https://4.narcolog-na-dom-krasnoyarsk0.ru/

  29. Запой — это тяжелое состояние, при котором человек на протяжении нескольких дней или даже недель не может самостоятельно перестать употреблять алкоголь. Оно сопровождается сильной интоксикацией, продуктами распада алкоголя в крови, выраженной абстиненцией, бессонницей, тревожностью, отсутствием аппетита, болями, скачками артериального давления и другими опасными симптомами. Организм страдает от токсинов, нарастает угроза развития белой горячки и алкогольного психоза. В такой момент важно действовать быстро: чем раньше будет оказана медицинская помощь, тем ниже риск осложнений со стороны сердца, печени, мозга и нервной системы. Наркологическая клиника в Москве уже более 15 лет помогает пациентам выйти из запоя безопасно, анонимно и с максимальным вниманием к каждому обратившемуся. Мы работаем круглосуточно, выезжаем на дом по любому адресу в московской области и принимаем в собственном стационаре. Наши специалисты — это опытные врачи психиатры-наркологи, психотерапевты, психологи, реаниматологи и квалифицированные медсестры, которые используют современные методы детоксикации, медикаментозной поддержки и восстановительной терапии. Главная цель — не просто снять острые симптомы, но и создать условия для дальнейшего лечения алкоголизма и возвращения человека к полноценной жизни без алкоголя. Мы знаем, как помочь даже в самых тяжелых случаях, и даём гарантии на все виды услуг. Один звонок в нашу клинику может спасти жизнь.
    Подробнее – вывод из запоя

  30. Но в этот раз всё было иначе — он не выходил из запоя почти две недели. Я вызвала скорую, но они отказались его госпитализировать. А он не мог даже встать с кровати. Мне ответили: «Ждите, врач будет через час». Вывод из запоя на дому — Осмотрел мужа, поставил капельницу. Попросил воды, потом поел. Всё прошло анонимно, без учёта. Сейчас муж не пьёт уже три месяца. вывод из запоя с выездом вывод из запоя с выездом Сохраните, поделитесь, не потеряйте для Воронежа. Помощь есть, и она рядом. Вывод из запоя на дому — верните близкого к жизни!

  31. Если среда дома шумная или приватность под угрозой, мы предложим «короткий коридор» через отдельный вход амбулатории. Если условия позволяют, проводим процедуры на дому: свет приглушён, доступ к розетке организован, рядом столик для расходников и приборов. Этот «экологичный» сценарий, несмотря на простоту, заметно улучшает переносимость процедур и собирает устойчивый сон в первую ночь, что особенно важно на ранних этапах стабилизации.
    Узнать больше – наркологическая клиника цены челябинск

  32. Ночной блок ориентирован на тишину и сон: приглушённый свет, короткие дыхательные циклы, мягкая фармакоподдержка по показаниям. Днём мы уточняем показатели, корректируем план воды/питания и, при необходимости, назначаем краткий очный контроль. Вечером — фокус на рутине: цифровая гигиена, «тихие окна», спокойная коммуникация с близкими. У пациента и семьи на руках памятка простым языком — без стигмы и жаргона — где перечислены «зелёные зоны» и поводы для связи с дежурным врачом.
    Получить дополнительные сведения – https://narkologicheskaya-klinika-voronezh15.ru/chastnaya-narkologicheskaya-klinika-voronezh/

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

  34. В «Центр Трезвости Воронеж» приватность не обсуждается — она проектируется. Выбор нейтральных формулировок в чеках, немаркированные выезды, «беззвучные» уведомления, отдельные входы и доступ к карте наблюдения только по ролям — это норма, а не «услуга». Пациент может назначить доверенное лицо, чтобы получать краткие апдейты в согласованные временные окна.
    Ознакомиться с деталями – наркологическая клиника нарколог воронеж

  35. Мы с женой долго выбирали кухню. Друзья посоветовали обратиться напрямую к производителю. Кухни на заказ — Сразу видно, что ребята знают своё дело. Показали материалы, фурнитуру. Через месяц установили гарнитур. Советую всем, кто ищет кухню в СПб. кухни gloria кухни gloria По ссылке — подробная информация для Питера. Хотите заказать кухню мечты — переходите по ссылке. Кухни на заказ — качество от производителя!

发表回复

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