蓝屏,谁之过?

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

6,366 条评论

  1. Все препараты, применяемые при выезде, сертифицированы и подобраны с учётом общего состояния пациента, наличия хронических заболеваний и степени алкогольной интоксикации. Такой подход обеспечивает безопасность процедуры и предсказуемый результат уже в первые часы терапии.
    Получить больше информации – https://narkolog-na-dom-tolyatti0.ru/tolyatti-narkologicheskij-dispanser/

  2. Наркологическая клиника — это медицинское учреждение, где лечение зависимости выстроено системно: от купирования острых симптомов до длительного сопровождения пациента. В клинике «ДальМедБаланс» терапия проводится под круглосуточным врачебным контролем, а ключевыми принципами являются безопасность, анонимность и индивидуальный подход. Каждый пациент проходит путь восстановления под наблюдением специалистов, которые учитывают физиологическое состояние, психоэмоциональные особенности и социальный контекст. Лечение направлено не только на избавление от физической зависимости, но и на возвращение мотивации к здоровой жизни.
    Подробнее можно узнать тут – http://narkologicheskaya-klinika-v-khabarovske0.ru/khabarovsk-narkologicheskaya-pomoshh/

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

  4. Такие состояния позволяют проводить лечение на дому с контролем динамики. При выявлении рисков врач может изменить тактику и рекомендовать стационар или другие методы лечения зависимости.
    Изучить вопрос глубже – нарколог на дом вывод из запоя в санкт-петербурге

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

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

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

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

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

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

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

  12. В клинике «АвтоГрад МедСтаб» применяется комплексное лечение, направленное не только на выведение этанола, но и на восстановление функций всех систем организма. В таблице представлены ключевые терапевтические методы и их результаты.
    Подробнее тут – вывод из запоя вызов на дом в тольятти

  13. Вывод из запоя на дому в Екатеринбурге: эффективное лечение, детоксикация и восстановление организма в наркологической клинике «Детокс»
    Получить дополнительные сведения – vyvod-iz-zapoya-na-domu-ekaterinburg-18.ru/

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

  15. Запой сопровождается интоксикацией, нарушением сна, слабостью, тревожностью и нестабильностью работы сердечно-сосудистой системы, что характерно для алкоголизма и других форм зависимости, включая наркомании. При этом самостоятельный выход из состояния может сопровождаться усилением симптомов, что требует медицинского вмешательства. Капельницы на дому позволяют очень быстро снизить выраженность проявлений и начать восстановление под наблюдением врача, помогая человеку стабилизировать состояние.
    Получить больше информации – https://vyvod-iz-zapoya-na-domu-sankt-peterburg-11.ru/

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

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

  18. Вывод из запоя — это комплексная медицинская процедура, направленная на устранение интоксикации, стабилизацию состояния и восстановление нормальной работы организма. В клинике «АвтоГрад МедСтаб» в Тольятти данная помощь оказывается в условиях круглосуточного наблюдения и индивидуального подхода. Врачи-наркологи применяют сертифицированные препараты и безопасные методы дезинтоксикации, что позволяет быстро снять абстинентные симптомы, восстановить водно-солевой баланс и нормализовать работу нервной системы. Все процедуры проводятся анонимно, без постановки на учёт, с соблюдением медицинской этики и конфиденциальности.
    Детальнее – срочный вывод из запоя тольятти

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

  20. Нарколог на дом в Москве: срочный выезд врача, капельницы и помощь при запое в наркологической клинике «Клиника доктора Калюжной».
    Подробнее можно узнать тут – http://narkolog-na-dom-moskva-17.ru/

  21. Отдельно выделяют ситуации, когда проблема выходит за рамки одного эпизода. Если запои повторяются, усиливаются последствия алкоголизма, нарушается обычный режим жизни, а состояние после употребления становится тяжелее, домашний выезд часто становится первым этапом более последовательной помощи. При выраженном ухудшении самочувствия, признаках отравлении алкоголем или высокой нагрузке на системы организма может потребоваться наблюдение не только дома, но и в стационаре.
    Разобраться лучше – https://narkolog-na-dom-ekaterinburg.ru

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

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

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

发表回复

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