蓝屏,谁之过?

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

  1. Мы отказываемся от «пакета ради пакета». Программа собирается из модулей, каждый из которых имеет конкретную цель, окно оценки и критерии, при выполнении которых команда двигается дальше. Ниже — примерная карта: она не заменяет приём, но показывает, как мы принимаем решения без импровизаций.
    Выяснить больше – http://narkologicheskaya-klinika-v-voronezhe15.ru

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

  3. Анонимность — не опция, а стандарт: документы формулируются нейтрально, чеки не содержат «говорящих» формулировок, фото- и видеосъёмка исключены. При необходимости подписывается расширенное соглашение о конфиденциальности. Доступ к записи визита и параметрам процедуры разграничен по ролям; копии передаются по защищённому каналу и удаляются по регламенту хранения.
    Выяснить больше – нарколог на дом вывод из запоя петрозаводск

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

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

  6. Вывод из запоя в Подольске в центре «Частный Медик 24» проводится с учетом продолжительности употребления алкоголя, возраста человека, общего самочувствия, наличия хронических заболеваний и выраженности абстиненции. Наркологическая помощь доступна круглосуточно: можно вызвать врача на дом, обратиться в клинику для амбулаторного приема или организовать лечение в стационаре. Специалисты оценивают состояние пациента, измеряют артериальное давление и пульс, выясняют количество выпитого спиртного, уточняют принимаемые лекарства и только после осмотра подбирают индивидуально схему медицинской поддержки.
    Ознакомиться с деталями – vyvod-iz-zapoya-na-domu-moskovskaya

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

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

  9. Чтобы обеспечить безопасное выведение психоактивных веществ и восстановление организма, применяется детоксикация под контролем врача-нарколога и анестезиолога-реаниматолога.
    Получить дополнительную информацию – http://lechenie-narkomanii-arkhangelsk0.ru

  10. Наркологическая клиника «Мед Алко» в Москве оказывает медицинскую помощь людям с алкогольной и наркотической зависимостью. Лечение организуется анонимно, круглосуточно и с учетом клинической ситуации каждого обратившегося. Врач оценивает физическое и психическое состояние, историю употребления алкоголя или наркотиков, хронические заболевания, длительность зависимости и предыдущий опыт терапии. После первичной диагностики определяется индивидуальный план: детоксикация, вывод из запоя, снятие ломки, медикаментозное лечение, кодирование, психотерапия, амбулаторное наблюдение или лечение в стационаре.
    Узнать больше – narkologicheskaya-bolnica-moskvy

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

  12. Кодирование рассматривается врачом как один из этапов лечения зависимости, а не как универсальный способ решения любой проблемы, связанной с выпивкой. Чтобы процедура была безопасной, необходимо добровольное согласие и желание самого человека прекратить прием алкоголя. Если больной находится в состоянии опьянения, выраженного похмелья или тяжелой интоксикации, сначала проводится снятие острых проявлений. В ряде случаев требуется капельница, детоксикация организма или наблюдение в стационаре. Только после стабилизации врач решает, какой способ лечения и какой срок кодировки допустимы.
    Узнать больше – https://kodirovanie-ot-alkogolizma-moskva15.ru/

  13. После приезда врач проводит осмотр, уточняет анамнез зависимости и оценивает последствия длительного употребления спиртных напитков. Измеряются пульс и давление, при необходимости проверяются другие показатели. Нарколог задает вопросы родственникам и самому больному, уточняет сведения о лекарственных препаратах, аллергических реакциях, прошлых эпизодах лечения алкоголизма и возможном употреблении наркотических веществ.
    Получить больше информации – http://1vyvod-iz-zapoya-podolsk77.ru

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

  15. Наркологическая помощь нужна не только для облегчения похмелья. Врач должен понять, насколько далеко зашла болезнь, есть ли признаки сформированной зависимости и сможет ли пациент продолжать лечение алкоголизма. Чем раньше начат системный процесс, тем выше шансы на устойчивое выздоровление.
    Подробнее – vyvod-iz-zapoya-klinika

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

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

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

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

  20. В программе используются когнитивно-поведенческая терапия, мотивационное интервьюирование, арт- и телесно-ориентированные практики. Занятия помогают пациенту осознать причины употребления, выработать навыки управления эмоциями и стрессом, сформировать устойчивую внутреннюю мотивацию к отказу от вещества.
    Детальнее – http://lechenie-narkomanii-arkhangelsk0.ru

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

  22. Наши стандарты включают конфиденциальную маршрутизацию, детализированные инструкции для семьи, модульный план лечения и прозрачное разделение бесплатных и платных блоков. Каждому пациенту назначается ведущий специалист, который сопровождает его на всём пути — от первого звонка до контрольных чек-инов после процедур. Мы не «наращиваем» объём вмешательств ради впечатления: используется минимально достаточный набор мер, который действительно влияет на целевые маркеры — переносимость воды, качество сна, сглаживание вегетативных «качелей» и возвращение утренней ясности.
    Подробнее можно узнать тут – http://narkologicheskaya-klinika-v-chelyabinske16.ru

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

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

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

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

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

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

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

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

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

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

  33. Рекомендации строятся вокруг состояния человека, а не по универсальному шаблону для всех случаев.
    Подробнее – vyvod-iz-zapoya-moskovskaya

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

  35. Схему детоксикации подбирают индивидуально. Один и тот же стандарт капельницы не подходит каждому человеку, поскольку состояние организма после двух дней употребления и после продолжительного запоя может существенно отличаться. В «Частный Медик 24» используются проверенные и сертифицированные лекарственные средства, а применение конкретных препаратов определяется медицинскими показаниями.
    Ознакомиться с деталями – narkologiya-vyvod-iz-zapoya

  36. Каждый метод «привязан» к решаемой задаче. Если динамика «плоская», мы не усиливаем всё сразу: корректируем один параметр (скорость инфузии, последовательность шагов, длительность вечерних вставок) и повторно оцениваем результат в оговорённое время. Такая бережная настройка снижает риск побочных эффектов и сохраняет ясность днём.
    Ознакомиться с деталями – лечение в наркологической клинике в воронеже

  37. Первый этап лечения начинается с беседы и медицинской оценки. Нарколог выясняет, сколько лет существует проблема, как часто человек употребляет алкоголь или наркотические вещества, когда был последний прием, присутствуют ли симптомы интоксикации, бессонницы, тревоги или психических расстройств. При необходимости назначаются анализы и дополнительная диагностика. Врач также учитывает документы и выписки, если ранее лечение проводилось в другой организации. Такой подход позволяет подобрать безопасные методы лечения пациента и определить, может ли помощь оказываться на дому либо необходима госпитализация в стационар.
    Узнать больше – https://narkologicheskaya-klinika-moskva15-4.ru/

发表回复

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