能力值:
( LV12,RANK:210 )
2 楼
在IRP处理中调用函数就蓝屏
能力值:
( LV12,RANK:420 )
3 楼
传DUMP和驱动代码
能力值:
( LV12,RANK:210 )
4 楼
传好了 就是插APC杀进程
能力值:
( LV12,RANK:210 )
5 楼
遍历线程 修改权限 插APC 结束
能力值:
( LV12,RANK:210 )
6 楼
非常感谢啊
能力值:
( LV12,RANK:420 )
7 楼
你给的驱动文件和PDB不对 ,DUMP里是20号编译的,你给的是17号的,害我看了半天。。。
能力值:
( LV12,RANK:210 )
8 楼
哦 那我重新上传附件
能力值:
( LV12,RANK:210 )
9 楼
注释掉这几句就不会蓝
ExitApc=ExAllocatePoolWithTag(NonPagedPool,sizeof(KAPC),MEM_TAG);
if(ExitApc==NULL)
{
KdPrint(("[KillProcessWithApc] malloc memory failed \n"));
return;
}
KeInitializeApc(ExitApc,
ethread, //线程
OriginalApcEnvironment,
KernelKillThreadRoutine, //APC例程
NULL,
NULL,
KernelMode,
0);//为线程初始化APC
status=myKeInsertQueueApc(ExitApc,NULL,NULL,0); //插入Apc到线程队列
if(!NT_SUCCESS(status))
return;
我猜还是这没写对,在看看
能力值:
( LV12,RANK:210 )
10 楼
if(status == STATUS_SUCCESS) 第一次遇到显示这种错误
能力值:
( LV12,RANK:420 )
11 楼
估计你myKeInsertQueueApc找错了~
能力值:
( LV12,RANK:210 )
12 楼
Use !analyze -v to get detailed debugging information.
BugCheck 1000008E, {c0000005, 804e6413, f796db0c, 0}
Probably caused by : hardware ( nt!CcSetFileSizes+16b )
Followup: MachineOwner
---------
能力值:
( LV12,RANK:210 )
13 楼
我验证过了啊
对结束的进程如下信息核对:
EPROCESS
KeInsertQueueApc地址
线程数目
线程地址 都仔细的打印验证 跟我机器一模一样
能力值:
( LV12,RANK:210 )
14 楼
00004220 14.44483948 [DispatchIoctl] eprocess :0x8a01d6c0
00004221 14.44487762 [GetPspTerminateProcess] size:0x8bcc
00004222 14.44497490 [GetPspTerminateProcess] NtoskerlBase:0x804d8000
00004223 14.44499493 [RecordThreadAddress] KeInsertQueueApc: 0x804e6ccf
00004224 14.44501400 [RecordThreadAddress] num: 0xb
00004225 14.44503403 [RecordThreadAddress] address: 0x88e56020
00004226 14.44505310 [RecordThreadAddress] address: 0x88e43408
00004227 14.44508076 [RecordThreadAddress] address: 0x88fac908
00004228 14.44509983 [RecordThreadAddress] address: 0x8903cda8
00004229 14.44511890 [RecordThreadAddress] address: 0x88e566e8
00004230 14.44513893 [RecordThreadAddress] address: 0x88efcda8
00004231 14.44515800 [RecordThreadAddress] address: 0x88e7cda8
00004232 14.44517708 [RecordThreadAddress] address: 0x88e7cb30
00004233 14.44519711 [RecordThreadAddress] address: 0x88eb3780
00004234 14.44521618 [RecordThreadAddress] address: 0x88dcf020
00004235 14.44523525 [RecordThreadAddress] address: 0x889cb318
能力值:
( LV12,RANK:210 )
15 楼
我电脑上锐捷的进程信息 打印出来的没错误
能力值:
( LV12,RANK:420 )
16 楼
你又传一个注释掉的版本,把你蓝屏时的那个版本的驱动传上来啊~或者传一个kernel dump
能力值:
( LV12,RANK:210 )
17 楼
lkd> u 0x804e6ccf
nt!KeInsertQueueApc:
804e6ccf 8bff mov edi,edi
804e6cd1 55 push ebp
804e6cd2 8bec mov ebp,esp
804e6cd4 83ec0c sub esp,0Ch
804e6cd7 53 push ebx
804e6cd8 56 push esi
804e6cd9 57 push edi
804e6cda 8b7d08 mov edi,dword ptr [ebp+8]
能力值:
( LV12,RANK:210 )
18 楼
dt _eprocess 0x8a01d6c0
0x190 ThreadListHead : _LIST_ENTRY [ 0x88e5624c - 0x88ae224c ]
+0x198 SecurityPort : (null)
+0x19c PaeTop : (null)
+0x1a0 ActiveThreads : 0xb
能力值:
( LV12,RANK:210 )
19 楼
我发现我线程地址跟xuetr显示的 有一个不一样
能力值:
( LV12,RANK:420 )
20 楼
终于传对文件了。。。原因就是你没找对地址:
kd> dd f796dbbc-4 (ebp-4)
f796dbb8 804e6411 f796dc34 f9ca01e4 815ecda0
f796dbc8 0000e411 8155d230 815e6da0 00000000
f796dbd8 000000d8 f796dbec 00000000 f796dc44
f796dbe8 8055b6c0 80545461 0000000c 00000000
f796dbf8 8153af90 00000000 8163f1e0 0000001c
f796dc08 0000e411 815ecda0 f796dc34 80604229
f796dc18 00222020 00000008 c0000010 81744bf8
f796dc28 8159d3f8 81744bf8 00000000 f796dc58
kd> u 804e6411
nt!CcSetFileSizes+0x169:
804e6411 00eb add bl,ch
804e6413 0b39 or edi,dword ptr [ecx] <---地址找错了,于是崩在这里
804e6415 7e4c jle nt!CcSetFileSizes+0x1bb (804e6463)
804e6417 742b je nt!CcSetFileSizes+0x19c (804e6444)
804e6419 8b5d0c mov ebx,dword ptr [ebp+0Ch]
804e641c 8b7d0c mov edi,dword ptr [ebp+0Ch]
804e641f 8a4d0f mov cl,byte ptr [ebp+0Fh]
804e6422 ff151c874d80 call dword ptr [nt!_imp_KfLowerIrql (804d871c)]
kd> u KeInsertQueueApc
nt!KeInsertQueueApc:
804fb704 8bff mov edi,edi
804fb706 55 push ebp
804fb707 8bec mov ebp,esp
804fb709 83ec0c sub esp,0Ch
804fb70c 53 push ebx
804fb70d 56 push esi
804fb70e 57 push edi
804fb70f 8b7d08 mov edi,dword ptr [ebp+8]
能力值:
( LV12,RANK:420 )
21 楼
call过去后挂了,因为地址不对,挂就挂在你找到的错误的地址的第二行
TRAP_FRAME: f796db0c -- (.trap 0xfffffffff796db0c)
ErrCode = 00000000
eax=814f32d8 ebx=8159d388 ecx=00000000 edx=00000000 esi=815e6da0 edi=8155d230
eip=804e6413 esp=f796db80 ebp=f796dbbc iopl=0 nv up ei ng nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010286
nt!CcSetFileSizes+0x16b:
804e6413 0b39 or edi,dword ptr [ecx] ds:0023:00000000=????????
Resetting default scope
CUSTOMER_CRASH_COUNT: 4
DEFAULT_BUCKET_ID: COMMON_SYSTEM_FAULT
BUGCHECK_STR: 0x8E
PROCESS_NAME: Project1.exe
MISALIGNED_IP:
nt!CcSetFileSizes+16b
804e6413 0b39 or edi,dword ptr [ecx]
LAST_CONTROL_TRANSFER: from f9ca01e4 to 804e6413
STACK_TEXT:
f796dbbc f9ca01e4 815ecda0 0000e411 8155d230 nt!CcSetFileSizes+0x16b
WARNING: Stack unwind information not available. Following frames may be wrong.
f796dc34 804eedf9 8165f778 8159d388 806d12d0 Listprocess+0x31e4
能力值:
( LV12,RANK:210 )
22 楼
线程地址?
函数地址没错啊
能力值:
( LV12,RANK:210 )
23 楼
通过EPROCESS 的list链遍历线程
Head=epro+0x190; //List_entry第一个节点地址
for(i=0;i<num;i++)
{
//记录线程地址
Head=(ULONG)((PLIST_ENTRY)Head)->Flink;
address=Head-0x22c;
KdPrint(("[RecordThreadAddress] address: 0x%x\n",address)); //打印线程地址
能力值:
( LV12,RANK:420 )
24 楼
你取的函数地址(KeInserQueueApc)是错误的,至少在这台崩溃的机器上是错误的,不同机器上的函数地址是不同的
能力值:
( LV12,RANK:210 )
25 楼
最后一个节点地址怎么会错呢?