蓝屏,谁之过?

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

18,228 条评论

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

  2. Экстренный вывод из запоя на дому — это управляемая медицинская последовательность, а не «сильная капельница на удачу». В наркологической клинике «КалининградМедПрофи» мы выстраиваем помощь вокруг трёх опор: безопасность, конфиденциальность и предсказуемый результат. Выездная бригада приезжает круглосуточно, работает в гражданской одежде и без опознавательных знаков, чтобы не привлекать внимания соседей. Каждое вмешательство имеет измеримую цель, окно проверки и прозрачный критерий перехода к следующему шагу. Благодаря этому темп лечения остаётся мягким, а динамика — понятной для пациента и близких.
    Подробнее тут – https://vyvod-iz-zapoya-kaliningrad15.ru/vyvod-iz-zapoya-kaliningrad-staczionar/

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

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

  5. В «РостовМедЦентре» лечение начинается с подробной оценки факторов риска и мотивации. Клиническая команда анализирует стаж употребления, тип вещества, эпизоды срывов, соматический фон, лекарства, которые пациент принимает постоянно, и уровень социальной поддержки. Уже на первой встрече составляется «дорожная карта» на ближайшие 72 часа: диагностический минимум, объём медицинских вмешательств, пространство для психологической работы и точки контроля. Безопасность — не абстракция: скорости инфузий рассчитываются в инфузомате, седацию подбирают по шкалам тревоги и с обязательным контролем сатурации, а лекарственные взаимодействия сверяет клинический фармаколог. Пациент получает прозрачные цели на день, на неделю и на месяц — без обещаний мгновенных чудес и без стигмы.
    Подробнее можно узнать тут – https://narkologicheskaya-klinika-rostov-na-donu14.ru/

  6. Проблемы зависимости нельзя решать одним действием или «чудо-процедурой». Клиника «РостовМедЦентр» в Ростове-на-Дону строит помощь вокруг человека, а не вокруг диагноза: от точной диагностики и безопасной детоксикации до психотерапевтической работы, реабилитации и постлечебного сопровождения. Мультидисциплинарная команда — врачи-наркологи, психиатры, терапевты, клинические психологи, реабилитологи и консультанты по зависимостям — формируют маршрут терапии под конкретную ситуацию, возраст, сопутствующие заболевания и семейные обстоятельства. В основе — доказательные методики, мониторинг жизненно важных показателей и четкие критерии эффективности, которые пациент видит в понятном ему плане. Конфиденциальность обеспечивается на каждом этапе: от анонимного первичного обращения до нейтральных формулировок в выданных документах.
    Выяснить больше – http://www.domen.ru

  7. Если на первичном звонке звучат «красные флаги» (выраженная одышка, спутанность сознания, скачки ритма), мы предлагаем стационарное окно мониторинга. При низком риске стартуем дома или амбулаторно и поддерживаем человека вечерними видеовставками по 15–20 минут, чтобы пройти «трудный час» без лишних поездок и паники.
    Исследовать вопрос подробнее – срочный вывод из запоя

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

  9. При выводе из запоя в Ростове-на-Дону используются разные терапевтические подходы. Основной задачей является устранение токсинов и восстановление работы систем организма. Врач подбирает терапию индивидуально в зависимости от состояния пациента и длительности запоя.
    Получить дополнительные сведения – http://vyvod-iz-zapoya-rostov-na-donu14.ru/

  10. When I visited, I didn’t want to blend in with regular rentals. Others were way overpriced for what they offered. Then I came across a company that changed everything. RealCar luxury cars Miami — they had an amazing fleet. They walked me through all the options. Cruised down South Beach with the top down. No huge deposits or hidden fees. If you want to experience Miami in style. luxury car rental Miami by RealCar luxury car rental Miami by RealCar Save it, share it, don’t lose it for South Florida. If you want a luxury car in Miami — just use the link. RealCar — drive luxury, arrive in style!

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

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

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

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

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

  16. Все шаги фиксируются в карте наблюдения. Если динамика «плоская», меняется один параметр (скорость/объём/последовательность), и через оговорённое окно проводится повторная оценка. Это снижает риск побочных реакций и сохраняет дневную ясность.
    Ознакомиться с деталями – вывод из запоя на дому в калининграде

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

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

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

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

  21. Вся динамика фиксируется в единой карте наблюдения. При переводе в амбулаторную точку мы не «сбрасываем» историю: решения продолжаются с учётом уже сделанного и реакции пациента на вмешательства.
    Исследовать вопрос подробнее – вывод из запоя дешево воронеж

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

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

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

  25. Наркологическая клиника «Эдельвейс» в Екатеринбурге специализируется на оказании оперативной и квалифицированной помощи при снятии ломки. Наши специалисты обладают многолетним опытом работы и применяют современные методики для безопасного и эффективного лечения абстинентного синдрома. Мы работаем круглосуточно, что позволяет оказывать помощь в любое время суток, обеспечивая анонимность и конфиденциальность каждого пациента.
    Детальнее – http://snyatie-lomki-ekb8.ru/snyatie-lomki-na-domu-v-ekb/

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

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

  28. Если ожидаемая динамика «плоская», врач меняет один параметр и назначает повторную оценку. Такой подход сохраняет ясность днём и снижает вероятность побочных реакций.
    Получить дополнительные сведения – http://narkologicheskaya-klinika-kaliningrad15.ru

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

  30. Капельница от запоя в центре «Мед Алко» в Москве применяется как один из методов медицинской детоксикации и симптоматической помощи после длительного употребления алкоголя. Когда больному плохо, врач оценивает продолжительность запоя, примерное количество выпитого спиртного, симптомы интоксикации, хронические и сопутствующие заболевания, уровень сознания, давление, пульс и общее физическое состояние. Только после осмотра нарколог решает, возможна ли капельница на дому или пациенту безопаснее пройти лечение в стационаре клиники. Индивидуальный подход позволяет определить состав раствора, необходимые препараты, продолжительность процедуры и дальнейшие этапы восстановления.
    Узнать больше – vrach-na-dom-kapelnica-ot-zapoya

  31. Эта доказательная статья представляет собой глубокое погружение в успехи и вызовы лечения зависимостей. Мы обращаемся к научным исследованиям и опыту специалистов, чтобы предоставить читателям надежные данные об эффективности различных методик. Изучите, что работает лучше всего, и получите информацию от экспертов.
    ТОП-5 причин узнать больше – delta clinic ru рязань

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

  33. I didn’t want to settle for a basic rental that felt like an afterthought. I checked several rental agencies in the area. Then I came across a company that stood out. rent a car Westchester NY with RealCar — All in excellent condition and ready to drive. The booking process was straightforward and easy. Perfect for driving around Westchester and the surrounding areas. No hidden fees or surprises. This is the company to choose. RealCar HPN rent a car RealCar HPN rent a car Save it, share it, don’t lose it for Westchester County. If you want a premium car in Westchester — just use the link. RealCar — drive premium, explore in style!

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

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

  36. Мы не используем универсальные «сильные капельницы». Эффективность даёт точное совпадение с задачей. Ниже — логика выбора профилей и маркеры, на которые мы ориентируемся при контроле эффективности и безопасности.
    Исследовать вопрос подробнее – вывод из запоя в санкт-петербурге

  37. Режим 24/7 — это не только открытая дверь, но и правильно расставленные акценты по часам суток. Ночью — больше поведенческих опор и короткие видеовставки, днём — контроль витальных, уточнение плана гидратации и питания, вечером — «световые правила» и дыхательные циклы. В каждом окне мы знаем, что именно проверяем и что считаем успехом: так исчезают импровизации и ненужные «усиления», а пациент получает предсказуемую траекторию.
    Разобраться лучше – http://narkologicheskaya-klinika-v-stavropole15.ru

发表回复

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