阅读:1163回复:4
请帮忙看一下是什么问题!
我是初学者,编了一个filter-hook的驱动,遇到一个问题,请高人帮忙!
我在应用程序里用DeviceIoControl控制驱动,但执行到该语句时,系统就自动重启,请问为什么?下面给出代码片段: ................ USHORT inbuf=0; ................. //就是下面这语句引起重启 DeviceIoControl(hdev,IO_ADDPORT,&inbuf,sizeof(inbuf),0,0,&dwres,0); //hdev已经在别的地方创建成功 //我也用VirtualAllocEx函数分配内存,但也是会出现这个问题 //inbuf变量换成别的类型也是这样,换成数组也是这样! |
|
沙发#
发布于:2003-10-23 17:19
问题应该在驱动里面,贴出来看看。
|
|
板凳#
发布于:2003-10-25 10:20
//下面为驱动里相应的信号处理代码:
case IO_GETADD: try { DbgPrint(\"1\");// pUserVirAdd=MmMapLockedPages(Mdl,UserMode); DbgPrint(\"3\");// add=(USHORT)pUserVirAdd; memcpy(irp->AssociatedIrp.SystemBuffer,&add,sizeof(USHORT)); if(pUserVirAdd==0) { DbgPrint(\"2\");// st=(!STATUS_SUCCESS); break; } irp->IoStatus.Status=STATUS_SUCCESS; irp->IoStatus.Information=sizeof(PVOID); } except(EXCEPTION_EXECUTE_HANDLER) { } break; //下面是应用程序控制的程序片段 BOOL bFound=FALSE; DWORD res=0; DWORD dwres=0; USHORT inbuf=0; for( i = 0; i < tcpExTable->dwNumEntries; i++ ) { // if(tcpExTable->table.dwState == MIB_TCP_STATE_ESTAB ) { ProcessPidToName( hProcessSnap, tcpExTable->table.dwProcessId, processName ); if(_tcscmp(processName,ProName)==0) { int j=htons((WORD)tcpExTable->table.dwLocalPort); res=tcpExTable->table.dwProcessId; port=j; inbuf=(USHORT)j; //memcpy(pPort,&port,sizeof(UINT)); DeviceIoControl(hdev,IO_ADDPORT,&inbuf,sizeof(inbuf),0,0,&dwres,0); } } } [编辑 - 10/25/03 by clwfe] [编辑 - 10/25/03 by clwfe] |
|
地板#
发布于:2003-10-25 14:18
用DO_BUFFER_IO试一下
|
|
地下室#
发布于:2003-10-25 19:07
[编辑 - 12/2/03 by antspower] |
|
|