Доброго времени суток, эпизодически происходит BSOD с 50 ошибкой - PAGE_FAULT_IN_NONPAGED_AREA (50), {e4027000, 0, 8052e787, 1} ошибка происходит здесь a740e990 80500ebd a740ea0c a740ed64 804d8228 nt!RtlInitUnicodeString+0x1b 1: kd> .trap 0xffffffffa740e8f0 ErrCode = 00000000 eax=00000000 ebx=8055a3a0 ecx=ffffff2f edx=a740ec3c esi=e3858668 edi=e4027000 eip=8052e787 esp=a740e964 ebp=a740ec88 iopl=0 nv up ei pl zr na pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246 nt!RtlInitUnicodeString+0x1b: 8052e787 f266af repne scas word ptr es:[edi] При этом по адресу в edi = e4027000 храниться следующие 1: kd> dd e4027000 e4027000 ???????? ???????? ???????? ???????? то есть проблема как я понимаю в том что идет обращение к области памяти но она уже выгружена на диск. Первая проблема: непонятно в каком драйвере вообще конфликт. Вторая если эта проблема не в моем драйвере, а судя по всему это так, то как с этим бороться! дамп далее Код (Text): ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* Use !analyze -v to get detailed debugging information. BugCheck 50, {e4027000, 0, 8052e787, 1} Could not read faulting driver name Probably caused by : ntkrpamp.exe ( nt!KiTrap0E+d0 ) Followup: MachineOwner --------- 1: kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* PAGE_FAULT_IN_NONPAGED_AREA (50) Invalid system memory was referenced. This cannot be protected by try-except, it must be protected by a Probe. Typically the address is just plain bad or it is pointing at freed memory. Arguments: Arg1: e4027000, memory referenced. Arg2: 00000000, value 0 = read operation, 1 = write operation. Arg3: 8052e787, If non-zero, the instruction address which referenced the bad memory address. Arg4: 00000001, (reserved) Debugging Details: ------------------ Could not read faulting driver name READ_ADDRESS: e4027000 FAULTING_IP: nt!RtlInitUnicodeString+1b 8052e787 f266af repne scas word ptr es:[edi] MM_INTERNAL_CODE: 1 CUSTOMER_CRASH_COUNT: 2 DEFAULT_BUCKET_ID: DRIVER_FAULT BUGCHECK_STR: 0x50 TRAP_FRAME: a740e8f0 -- (.trap 0xffffffffa740e8f0) ErrCode = 00000000 eax=00000000 ebx=8055a3a0 ecx=ffffff2f edx=a740ec3c esi=e3858668 edi=e4027000 eip=8052e787 esp=a740e964 ebp=a740ec88 iopl=0 nv up ei pl zr na pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246 nt!RtlInitUnicodeString+0x1b: 8052e787 f266af repne scas word ptr es:[edi] Resetting default scope LAST_CONTROL_TRANSFER: from 8052036a to 804f9f33 STACK_TEXT: a740e870 8052036a 00000050 e4027000 00000000 nt!KeBugCheckEx+0x1b a740e8d8 80544578 00000000 e4027000 00000000 nt!MmAccessFault+0x9a8 a740e8d8 8052e787 00000000 e4027000 00000000 nt!KiTrap0E+0xd0 a740e990 80500ebd a740ea0c a740ed64 804d8228 nt!RtlInitUnicodeString+0x1b a740e9c0 80502343 fd050f80 ffffffff b340582e nt!ZwSetInformationFile+0x11 a740ec88 8056add4 895cbfc0 00000001 a740ecd8 nt!KiInsertTimerTable+0x1b a740ecbc 80621f19 00000001 a740ecd8 a740ed64 nt!CmpCallCallBacks+0x50 a740ed44 8054161c 000009d4 01326244 00000000 nt!NtSetValueKey+0x20d a740ed44 7c90e4f4 000009d4 01326244 00000000 nt!KiFastCallEntry+0xfc WARNING: Frame IP not in any known module. Following frames may be wrong. 0132621c 00000000 00000000 00000000 00000000 0x7c90e4f4 STACK_COMMAND: kb FOLLOWUP_IP: nt!KiTrap0E+d0 80544578 85c0 test eax,eax SYMBOL_STACK_INDEX: 2 SYMBOL_NAME: nt!KiTrap0E+d0 FOLLOWUP_NAME: MachineOwner MODULE_NAME: nt IMAGE_NAME: ntkrpamp.exe DEBUG_FLR_IMAGE_TIMESTAMP: 4802516a FAILURE_BUCKET_ID: 0x50_nt!KiTrap0E+d0 BUCKET_ID: 0x50_nt!KiTrap0E+d0 Followup: MachineOwner --------- 1: kd> .trap 0xffffffffa740e8f0 ErrCode = 00000000 eax=00000000 ebx=8055a3a0 ecx=ffffff2f edx=a740ec3c esi=e3858668 edi=e4027000 eip=8052e787 esp=a740e964 ebp=a740ec88 iopl=0 nv up ei pl zr na pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246 nt!RtlInitUnicodeString+0x1b: 8052e787 f266af repne scas word ptr es:[edi] 1: kd> dd e4027000 e4027000 ???????? ???????? ???????? ???????? e4027010 ???????? ???????? ???????? ???????? e4027020 ???????? ???????? ???????? ???????? e4027030 ???????? ???????? ???????? ???????? e4027040 ???????? ???????? ???????? ???????? e4027050 ???????? ???????? ???????? ???????? e4027060 ???????? ???????? ???????? ???????? e4027070 ???????? ???????? ???????? ????????
PAGE_FAULT_IN_NONPAGED_AREA это обращение к памяти, которая была не выделена, уже освобождена, или в пространство сессии из не-GUI потока. вообщем по совершенно невалидному адресу. выгрузка на диск тут не при чем. ты передаешь неверный указатель в RtlInitUnicodeString. Покажи код вызова этой ф-ии
В том то и дело что я не могу понять, в чьем драйвере ошибка. Из дампа это мне не ясно. Причем сбой получается раз в сутки или реже?
список драйверов: Код (Text): 1: kd> lm start end module name 804d7000 806e4000 nt # (pdb symbols) c:\symbols\ntkrpamp.pdb\7D6290E03E32455BB0E035E38816124F1\ntkrpamp.pdb 806e4000 80704d00 hal (deferred) a7529000 a7553180 kmixer (deferred) a7784000 a77c4a80 HTTP (deferred) a7865000 a7879480 wdmaud (deferred) a7a26000 a7a2a000 prepdrv (deferred) a7a32000 a7a55180 Fastfat (deferred) a7f9e000 a7fa2000 vstor2_ws60 (deferred) a7fa6000 a7ff7880 srv (deferred) a8070000 a8140000 vmx86 (deferred) a8208000 a8234180 mrxdav (deferred) a8261000 a8264000 BS (deferred) a83b5000 a83b8900 ndisuio (deferred) a84dd000 a84f4900 dump_atapi (deferred) a851d000 a8532000 ISODrive (deferred) a8532000 a853e000 vmci (deferred) a8552000 a855c000 hcmon (deferred) a8572000 a8580d80 sysaudio (deferred) a85d2000 a8606000 klif (deferred) a8606000 a8675780 mrxsmb (deferred) a8676000 a86a0e80 rdbss (deferred) a86a1000 a86d4000 truecrypt (deferred) a86d4000 a86f5b80 afd (deferred) a871e000 a8745c00 netbt (deferred) a8746000 a879e380 tcpip (deferred) a87bb000 a87bd900 Dxapi (deferred) a87c7000 a87d9600 ipsec (deferred) a8836000 a8838f00 ws2ifsl (deferred) a884a000 a886da80 portcls (deferred) a886e000 a8cc4000 RtkHDAud (deferred) b8de4000 b8de6280 rasacd (deferred) b8f7c000 b8fd9f00 update (deferred) b8fda000 b9009e80 rdpdr (deferred) b900a000 b901ae00 psched (deferred) b901b000 b9031580 ndiswan (deferred) b9032000 b9045900 parport (deferred) b9046000 b905d000 Rtenicxp (deferred) b905d000 b907f700 ks (deferred) b9080000 b90a8000 HDAudBus (deferred) b90a8000 b90cb200 USBPORT (deferred) b90cc000 b964a460 igxpmp32 (deferred) b964b000 b965ef00 VIDEOPRT (deferred) b969f000 b96ae900 Cdfs (deferred) b9aaa000 b9aadd80 serenum (deferred) b9d22000 b9d3f000 kl1 (deferred) b9d3f000 b9d58b80 Mup (deferred) b9d59000 b9d85980 NDIS (deferred) b9d86000 b9e12600 Ntfs (deferred) b9e13000 b9e29880 KSecDD (deferred) b9e2a000 b9e3bf00 sr (deferred) b9e3c000 b9e5c000 fltMgr (deferred) b9e5c000 b9e73900 atapi (deferred) b9e74000 b9e99800 dmio (deferred) b9e9a000 b9eb8a00 ftdisk (deferred) b9eb9000 b9ec9b80 pci (deferred) b9eca000 b9ef7f80 ACPI (deferred) b9ef8000 b9f34000 DSFOleaut32 (deferred) b9f34000 b9fa7000 dsfksvcs (deferred) ba0a8000 ba0b1280 isapnp (deferred) ba0b8000 ba0c7100 ohci1394 (deferred) ba0c8000 ba0d5080 1394BUS (deferred) ba0d8000 ba0e2580 MountMgr (deferred) ba0e8000 ba0f4b00 VolSnap (deferred) ba0f8000 ba100e00 disk (deferred) ba108000 ba114180 CLASSPNP (deferred) ba118000 ba120b80 PxHelp20 (deferred) ba158000 ba166880 usbhub (deferred) ba168000 ba176b00 drmk (deferred) ba188000 ba190700 wanarp (deferred) ba198000 ba1a6d80 arp1394 (deferred) ba1a8000 ba1b0780 netbios (deferred) ba1c8000 ba1d2e00 Fips (deferred) ba218000 ba221f00 intelppm (deferred) ba228000 ba232480 imapi (deferred) ba238000 ba247600 cdrom (deferred) ba248000 ba256400 redbook (deferred) ba258000 ba267180 nic1394 (deferred) ba268000 ba277e00 serial (deferred) ba278000 ba284f80 i8042prt (deferred) ba288000 ba294880 rasl2tp (deferred) ba298000 ba2a2200 raspppoe (deferred) ba2a8000 ba2b3d00 raspptp (deferred) ba2b8000 ba2c0900 msgpc (deferred) ba2c8000 ba2d1f00 termdd (deferred) ba318000 ba321e80 NDProxy (deferred) ba328000 ba32e180 PCIIDEX (deferred) ba330000 ba334d00 PartMgr (deferred) ba338000 ba33e000 dsfroot (deferred) ba340000 ba344a80 TDI (deferred) ba390000 ba395080 usbuhci (deferred) ba398000 ba39f600 usbehci (deferred) ba3a0000 ba3a6b00 fdc (deferred) ba3a8000 ba3adb00 mouclass (deferred) ba3b0000 ba3b6100 kbdclass (deferred) ba3b8000 ba3bd000 VMkbd (deferred) ba3c0000 ba3c8000 klim5 (deferred) ba3c8000 ba3cc580 ptilink (deferred) ba3d0000 ba3d4080 raspti (deferred) ba3e0000 ba3e5000 flpydisk (deferred) ba3f0000 ba3f5200 vga (deferred) ba3f8000 ba3fca80 Msfs (deferred) ba400000 ba407880 Npfs (deferred) ba418000 ba41e000 vmnetbridge (deferred) ba430000 ba435000 PTI (deferred) ba440000 ba444500 watchdog (deferred) ba448000 ba44d000 RegFilter (deferred) ba478000 ba47d000 vmnetuserif (deferred) ba4b0000 ba4b5680 rkhdrv10 (deferred) ba4b8000 ba4bb000 BOOTVID (deferred) ba554000 ba556780 ndistapi (deferred) ba568000 ba56bc80 mssmbios (pdb symbols) c:\symbols\mssmbios.pdb\9940673F3B9A4BD682DF9D96A12A355C1\mssmbios.pdb ba56c000 ba56f000 vmnetadapter (deferred) ba570000 ba573000 VMNET (deferred) ba5a8000 ba5a9b80 kdcom (deferred) ba5aa000 ba5ab100 WMILIB (deferred) ba5ac000 ba5ae000 dmload (deferred) ba5fc000 ba5fd100 swenum (deferred) ba5fe000 ba5ff280 USBD (deferred) ba604000 ba605f00 Fs_Rec (deferred) ba606000 ba607080 Beep (deferred) ba608000 ba609080 mnmdd (deferred) ba60a000 ba60b080 RDPCDD (deferred) ba610000 ba611100 dump_WMILIB (deferred) ba62a000 ba62bb00 ParVdm (deferred) ba62e000 ba630000 VMparport (deferred) ba670000 ba670d00 pciide (deferred) ba6f3000 ba6f4000 smsmdm (deferred) ba701000 ba701c00 audstub (deferred) ba719000 ba719d00 dxgthk (deferred) ba73b000 ba73bb80 Null (deferred) bf000000 bf011600 dxg (deferred) bf012000 bf024000 igxprd32 (deferred) bf024000 bf04e000 igxpgd32 (deferred) bf04e000 bf1f16a0 igxpdv32 (deferred) bf1f2000 bf48d000 igxpdx32 (deferred) bf800000 bf9c2a00 win32k (deferred) bffa0000 bffe5c00 ATMFD (deferred) Unloaded modules: ba3d8000 ba3df000 USBSTOR.SYS ba490000 ba497000 USBSTOR.SYS ba438000 ba43f000 USBSTOR.SYS a7817000 a7842000 kmixer.sys ba6bc000 ba6bd000 drmkaud.sys a85c2000 a85cf000 DMusic.sys a7842000 a7865000 aec.sys a8445000 a8453000 swmidi.sys ba65a000 ba65c000 splitter.sys ba3e8000 ba3ed000 Cdaudio.SYS b9aba000 b9abd000 Sfloppy.SYS
По-моему, тебе следует выспаться, ибо: 1. Файл дампа в первом посте прикреплён. 2. Функцию RtlInitUnicodeString() вызывает не его драйвер.
x64 Да, вероятно.. Но в любом случае там минидамп, хотелось бы созерцать kernel memory dump, ибо: Код (Text): 1: kd> !thread GetPointerFromAddress: unable to read from 80562134 THREAD 89bd8b40 Cid 0580.09ec Teb: 7ffa3000 Win32Thread: e10f2b70 RUNNING on processor 1 Unable to read Impersonation Information at e55ea948 GetUlongFromAddress: unable to read from 805621cc Owning Process 89474558 Image: <Unknown> ffdf0000: Unable to get shared data Wait Start TickCount 843880 Context Switch Count 4925 LargeStack ReadMemory error: Cannot get nt!KeMaximumIncrement value. UserTime 00:00:00.0000 KernelTime 00:00:00.0000 Win32 Start Address 0x769b3c11 Start Address 0x7c8106e9 Stack Init a740f000 Current a740eac4 Base a740f000 Limit a740c000 Call 0 Priority 1 BasePriority 1 PriorityDecrement 0 DecrementCount 16 ChildEBP RetAddr Args to Child a740e870 8052036a 00000050 e4027000 00000000 nt!KeBugCheckEx+0x1b (FPO: [Non-Fpo]) a740e8d8 80544578 00000000 e4027000 00000000 nt!MmAccessFault+0x9a8 (FPO: [Non-Fpo]) a740e8d8 8052e787 00000000 e4027000 00000000 nt!KiTrap0E+0xd0 (FPO: [0,0] TrapFrame @ a740e8f0) a740e990 80500ebd a740ea0c a740ed64 804d8228 nt!RtlInitUnicodeString+0x1b (FPO: [2,2,0]) a740e9c0 80502343 fd050f80 ffffffff b340582e nt!ZwSetInformationFile+0x11 (FPO: [5,0,0]) a740ec88 8056add4 895cbfc0 00000001 a740ecd8 nt!KiInsertTimerTable+0x1b (FPO: [Non-Fpo]) a740ecbc 80621f19 00000001 a740ecd8 a740ed64 nt!CmpCallCallBacks+0x50 (FPO: [Non-Fpo]) a740ed44 8054161c 000009d4 01326244 00000000 nt!NtSetValueKey+0x20d (FPO: [Non-Fpo]) a740ed44 7c90e4f4 000009d4 01326244 00000000 nt!KiFastCallEntry+0xfc (FPO: [0,0] TrapFrame @ a740ed64) WARNING: Frame IP not in any known module. Following frames may be wrong. 0132621c 00000000 00000000 00000000 00000000 0x7c90e4f4
deshiko Сгенери kernel memory dump и дай вывод !thread + новый !analyze -v с символами ntdll, интересно на юзермодный стек вызовов посмотреть. + что-то мне кажется, что стек неверный в первом посте, не хватает скорее всего символов для драйверов.
С символами порядок, во всяком случаи символы к моим дровам в c:\Symbols есть точно, с полным дампом выложу при первом появлении очередного BSOD.
Нет же, символы нужны к системным драйверам типа Ntfs.sys и другим. Много записей в стеке вызовов пропущено скорее всего, которые относятся к системным драйверам
deshiko Какой интересный стек вызовов. Была вызвана NtSetValueKey, а затем была сделана попытка позвать регистровые колбеки – всё верно, внутри NtSetValueKey есть вызов CmpCallCallBacks. Однако KiInsertTimerTable? Вызывающая ZwSetInformationFile? Делает мало чувства. (Смещения маленькие, так что это не ошибочные символы). Итак, в чём причина? Вероятно, некий драйвер устанавливает какой-то странный регистровый колбек. См. "CmRegisterCallbackEx". Беглый просмотр кода CmRegisterCallbackEx показывает, что регистровые колбеки хранятся в связном списке, голова которого имеет имя "nt!CallbackListHead". LIST_ENTRY, похоже, находится в начале каждой структуры, описывающей колбек. Необходимо пролистать все колбек-структуры (на живой системе или в ядерном\полном дампе) в поисках смещений на драйвер, установивший колбек (команды "!list", "dps"). По умолчанию колбеков в системе, по всей видимости, быть не должно.
Sol_Ksacap Ну стек, очевидно, неверен. Пропущено несколько записей. Скорее всего каллбек ушел в драйвер какой-то, а драйвер уже вызвал ZwSetInformationFile. но этой строчки нет и без этих строк сказать что-либо трудно. Нужны просто символы для системных драйверов.
deshiko А, "CmRegisterCallbackEx" появилась в висте – в xp пользуется "CmRegisterCallback", и структуры колбеков там в виде массива указателей организованы ("CmpCallBackVector"). Структуры есть в wrk, оказывается. (Сначала лень было смотреть минидамп, поэтому предыдущей пост писался по дизасму висты и семёрки). Great Ну мы и говорим, что стек, мол, делает мало чувства deshiko В общем, взглянули на сырой стек. RegFilter.sys – твой драйвер? Как бы то ни было, этот драйвер делает предположение насчёт нуль-терминированности строки, которая не нуль-терминирована. Например, буфер внутри UNICODE_STRING, которая передаётся в качестве параметра в DriverEntry, не обязан быть нуль-терминированным. Всё это объясняет и такую периодичность падений – часто RtlInitUnicodeString натыкается на какой-нибудь левый нуль, а иногда поиск таки доходит до нестраничной области.
Ошибку по вашему указанию нашел. Периодически инициализировал строку, и иногда она не кончалась нулем, поэтому BSOD. Спасибо всем за помощь!
Строки, передающиеся как PWSTR (точнее WCHAR*), всегда должны сопровождаться 2-мя (USHORT) или 4-мя (ULONG) байтами длины. В ядре строки не обязаны завершаться нулём. Ну а тем более, если уже есть на руках поле Length в структуре, почему бы им не воспользоваться. Нужно просто запомнить это правило.