蓝屏,谁之过?

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

  1. Мы работаем по принципу «один визит — один измеримый результат». После инфузий пациент обычно отмечает облегчение головной боли, уменьшение тремора и тревоги, улучшение сна к ближайшей ночи. Если ситуация сложнее (длительный многодневный запой, выраженные соматические факторы), врач оставляет ступенчатый план на 24–48 часов с повторным визитом или переводом в стационарный блок по согласованию с пациентом и родными.
    Получить дополнительную информацию – нарколог на дом недорого ставрополь

  2. Чтобы исключить суету и случайные усиления, первые часы делим на небольшие «окна»: цель — действие — маркер — критерий перехода. Если отклика нет, корректируется один элемент — темп инфузии, очередность модулей или поведенческий якорь — и назначается новая точка оценки.
    Разобраться лучше – https://vyvod-iz-zapoya-saratov0.ru

  3. В «МедЛинии Ставрополь» домашний протокол — это последовательность действий, выверенная до минут. Таблица ниже поможет понять, как именно строится визит и какие результаты фиксируются по итогам.
    Детальнее – вызов нарколога на дом

  4. Ниже — примерный «каркас» лечения. Он индивидуализируется по клинической картине, сопутствующим болезням, опыту прошлых попыток и бытовым ограничениям. Ключевой принцип — «одно вмешательство: одна цель — один маркер — одна дата проверки».
    Исследовать вопрос подробнее – http://narkologicheskaya-klinika-petrozavodsk0.ru/

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

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

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

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

  9. Финансовые инструменты позволяют заказчику убедиться в надежности участника и его готовности выполнить обязательства по контракту. При этом грамотное сопровождение снижает вероятность финансовых рисков и помогает правильно оформить документы для банка.
    Не упустите важные детали – тендерное сопровождение под ключ ростов на дону

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

  11. При поступлении вызова нарколог незамедлительно выезжает на дом для проведения первичного осмотра. Специалист собирает анамнез, измеряет жизненно важные показатели – пульс, артериальное давление и температуру – и оценивает степень алкогольной интоксикации. Точная диагностика становится основой для составления индивидуального плана терапии, адаптированного под конкретное состояние пациента.
    Подробнее можно узнать тут – vyvod-iz-zapoya-kruglosutochno tver’

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

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

  14. Госпитализация разворачивается как последовательность шагов: приём и допуск к терапии, старт инфузий, мониторинг 24/7, регулярная переоценка и подготовка к выписке. Такой контур особенно важен пациентам с сопутствующими диагнозами (гипертония, ИБС, сахарный диабет, заболевания ЖКТ), где требуется деликатная настройка дозировок и темпа инфузий.
    Подробнее можно узнать тут – vyvod-narkologicheskaya-klinika

  15. Затянувшийся запой — это состояние, которое опасно не только выраженной интоксикацией, но и непредсказуемыми осложнениями со стороны сердца, нервной системы и обмена веществ. В наркологической клинике «БайкалМедЦентр» (Улан-Удэ) услуги экстренного вывода из запоя организованы в формате «одного окна»: круглосуточный выезд врача-нарколога на дом, инфузионная терапия (капельницы) с индивидуальным подбором составов и детокс-протоколы, учитывающие возраст, сопутствующие заболевания и продолжительность употребления. Команда работает 24/7 по городу и пригородам; время прибытия в большинстве случаев составляет 30–45 минут с момента подтверждения вызова.
    Изучить вопрос глубже – http://vyvod-iz-zapoya-ulan-ude0.ru

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

  17. После первичной диагностики начинается активная фаза медикаментозного вмешательства. Препараты вводятся капельничным методом для быстрого снижения уровня токсинов в крови, нормализации обменных процессов и стабилизации работы внутренних органов, таких как печень, почки и сердце.
    Ознакомиться с деталями – https://narcolog-na-dom-mariupol00.ru/narkolog-na-dom-kruglosutochno-mariupol

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

  19. Домашний формат подойдёт, если нет признаков угрозы жизни и есть возможность обеспечить тишину и наблюдение ночью. Стационар предпочтителен при тяжёлой абстиненции, эпизодах судорог, выраженных скачках давления, неукротимой рвоте, риске делирия, а также когда дома нет условий для безопасного наблюдения. В стационаре под рукой лаборатория, ЭКГ по показаниям, круглосуточный пост — это снижает вероятность осложнений и ускоряет восстановление сна и аппетита.
    Ознакомиться с деталями – http://narkologicheskaya-klinika-sergiev-posad8.ru/anonimnaya-narkologicheskaya-klinika-v-sergievom-posade/

  20. Мы собираем терапию как конструктор из узких модулей. Каждый модуль запускается только при показаниях и выключается сразу после достижения цели — это защищает от «инерции лечения» и возвращает организму пространство для самостоятельной регуляции. Ниже — ориентировочная сетка модулей; фактический состав и дозировки определяет врач на очном осмотре.
    Детальнее – частная наркологическая клиника ростов-на-дону

  21. Каждый из наших врачей не только специалист, но и психолог, способный понять переживания пациента, создать атмосферу доверия. Мы применяем индивидуальный подход, позволяя каждому пациенту чувствовать себя комфортно. Наши наркологи проводят тщательную диагностику, разрабатывают планы лечения, основываясь на данных обследования, психологическом состоянии и других факторах. Основное внимание уделяется снижению абстиненции, лечению сопутствующих заболеваний, коррекции психоэмоционального состояния.
    Изучить вопрос глубже – http://alko-konsultaciya.ru/vivod-iz-zapoya-v-stacionare-v-smolenske/https://alko-konsultaciya.ru

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

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

  24. Терапевтическая стратегия выстраивается вокруг понятных клинических ориентиров, что делает процесс предсказуемым и повышает приверженность пациента к лечению.
    Исследовать вопрос подробнее – http://lechenie-alkogolizma-lugansk0.ru

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

  26. Прежде чем перечислить критичные признаки, зафиксируем принцип: даже один выраженный симптом — повод не откладывать помощь и выбрать безопасный маршрут (дом или стационар) после быстрой очной оценки врача.
    Подробнее можно узнать тут – vitaminy-pri-vyvode-iz-zapoya

  27. Снимаем интоксикацию, купируем абстинентный синдром, стабилизируем давление и сердечный ритм, корректируем электролитный и водный баланс. По показаниям подключаем седативную и противотревожную терапию, защиту печени и желудочно-кишечного тракта, витамины группы B. Цель — безопасно пройти острый период, снизить тягу и нормализовать сон. При необходимости делаем ЭКГ, пульсоксиметрию, контролируем глюкозу, насыщение кислородом, температуру. Если состояние тяжёлое, предложим госпитализацию в стационар с круглосуточным наблюдением, где можно оперативно скорректировать схему лечения.
    Узнать больше – anonimnaya-narkologicheskaya-klinika

  28. Маршрут запускается с короткого, но точного сбора данных: врач уточняет симптомы, лекарства за последние 24–48 часов, аллергии и хронические диагнозы, измеряет давление, пульс, сатурацию, при необходимости выполняет экспресс-ЭКГ и базовый неврологический скрининг. Далее — простое объяснение логики вмешательств: зачем именно такая инфузионная схема, что она даст в ближайшие 30–60 минут, как будет организован вечер и когда мы свяжемся утром. Мы избегаем «оглушающих» седативов и универсальных «сильных смесей», чтобы не получить вечернего отката и побочных реакций; дозы подбираются узко и корректируются по реакции организма. Пациент уходит с письменными рекомендациями на 48–72 часа: вода и лёгкая еда «по часам», правила «тихого вечера», критерии повторного контакта и окно связи. Семья понимает роли: меньше разговорных «разборов», больше тишины и затемнения — в такой среде физиология перестаёт «качать», сон приходит предсказуемо, а утренние показатели выравниваются.
    Исследовать вопрос подробнее – kruglosutochnaya-narkologicheskaya-klinika

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

  30. Домашний формат выбирают, когда обстановка позволяет провести лечение в тишине и нет признаков угрозы жизни. Врач приезжает без опознавательных знаков, начинает с очной оценки и допуска к инфузии, сверяет принятые ранее препараты и аллергии, объясняет ожидаемую динамику. После запуска капельницы мягко корректируются жидкость и электролиты, проводится симптом-контроль (тремор, тошнота, тревога, головная боль), по показаниям — осторожная нормализация сна. На выходе пациент и семья получают понятные рекомендации на 24–48 часов: питьевой режим, питание, ограничения по нагрузкам, признаки тревоги и правила связи с дежурным врачом.
    Ознакомиться с деталями – narkologicheskaya-klinika-vyvod-iz-zapoya

  31. После поступления в клинику проводится осмотр, измеряется давление, оценивается общее состояние. При необходимости проводятся экспресс-анализы на содержание веществ и ЭКГ.
    Выяснить больше – вывод наркологическая клиника

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

  33. В условиях Донецка ДНР наши специалисты применяют современную методику вывода из запоя на дому, которая включает в себя несколько последовательных этапов для обеспечения максимально безопасного и эффективного лечения.
    Подробнее тут – http://vyvod-iz-zapoya-donetsk-dnr0.ru/vyvod-iz-zapoya-kruglosutochno-doneczk-dnr/

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

  35. Чем раньше стартует детокс, тем мягче идёт восстановление. Даже один визит способен перевести состояние из «кризисного» в управляемое, а затем подключается поддержка психолога или амбулаторные встречи для закрепления эффекта.
    Разобраться лучше – http://narkolog-na-dom-stavropol0.ru

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

  37. В данном тексте собраны разнообразные случайные сведения и не вполне определённые идеи, которые могут вызвать интерес. Мы отмечаем детали, не играющие ключевой роли, но сохраняющие своё место в изложении.
    Подробнее читать – https://rostov-narkologiya.ru

  38. Шаг 1. Оператор фиксирует симптомы, хронические болезни, лекарства, аллергии, адрес и удобный временной интервал. Шаг 2. Дежурный нарколог формирует первичный план инфузий и комплект медикаментов. Шаг 3. На месте проводится экспресс-диагностика и уточняется стратегия: объём гидратации, потребность в седативной поддержке и гепатопротекторах. Шаг 4. Запускается капельница с мониторингом давления, пульса и сатурации; при необходимости добавляются противорвотные и антациды. Шаг 5. Пациент получает письменный план на 48–72 часа, рекомендации по сну, питьевому режиму и питанию, номера круглосуточной связи и, при показаниях, слот повторного визита.
    Углубиться в тему – скорая вывод из запоя

  39. Первым шагом является детоксикация организма от токсинов, накопившихся вследствие длительного злоупотребления алкоголем. Врач назначает внутривенные капельницы и препараты, способствующие быстрому выведению алкоголя и стабилизации работы внутренних органов. Такой метод позволяет значительно снизить риск осложнений и ускорить процесс восстановления.
    Ознакомиться с деталями – http://narcolog-na-dom-v-irkutske66.ru/vrach-narkolog-na-dom-irkutsk/

  40. Сочетание методов подбирается индивидуально, чтобы охватить соматические, психологические и социальные компоненты зависимости. Ниже приведены основные направления, используемые в клинической практике.
    Разобраться лучше – лечение в наркологической клинике луганск

  41. Эта карта — рабочий инструмент и для пациента, и для семьи: все видят, какая цель преследуется, какими средствами она достигается, когда проверяется эффект и что будет дальше. Отсюда рождается доверие и строгая приверженность — главный предиктор устойчивого результата.
    Детальнее – наркологическая клиника в саратове

发表回复

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