阅读:1480回复:7
驱动向应用传数据的问题
我用DeviceIoControl里面定义的输出buffer的方法从驱动向应用传数据,直接
往输出buffer里面写入数据就没问题,要是从驱动一个变量里面strcpy就蓝屏重起,帮忙看看吧 ResultStatus = ObReferenceObjectByHandle(ProcessHandle,PROCESS_ALL_ACCESS,*PsProcessType,UserMode,(PVOID)&process,(PVOID)&info); DBGPRINT(("%s"),process->ImageFileName ) 这个能打出来,这是个UCHAR[16]的变量 //strcpy(buff,"test") 这样就没问题 , buffer是外面传进来的buffer strcpy(buff,process->ImageFileName); 这个就蓝屏 |
|
沙发#
发布于:2007-07-31 16:16
已经蓝屏重起几十次了,帮帮忙吧
|
|
板凳#
发布于:2007-07-31 21:03
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2007-08-01 09:14
这个代码其实就是hook了Ntcreateprocess以后,想通过handle得到进程名并且把名称传到应用程序,hook那块很多例子可以参考,但是取名称并且传出去没发现有啊
|
|
地下室#
发布于:2007-08-01 09:19
NTSTATUS NewNtTerminateProcess(
IN HANDLE ProcessHandle OPTIONAL, IN NTSTATUS ExitStatus) { ULONG outhandle; NTSTATUS ResultStatus; PEPROCESS process; POBJECT_HANDLE_INFORMATION info; char* buff; char output[16]; ResultStatus = ObReferenceObjectByHandle(ProcessHandle,PROCESS_ALL_ACCESS,*PsProcessType,UserMode,(PVOID)&process,(PVOID)&info); buff = process->ImageFileName; DBGPRINT(("%s",buff)) //这句能打印出来 strcpy(output,buff); //这句就蓝屏 KeSetEvent(hTerminateProcess,0,FALSE); ResultStatus = OldNtTerminateProcess(ProcessHandle,ExitStatus); return ResultStatus; } |
|
5楼#
发布于:2007-08-01 10:23
用户被禁言,该主题自动屏蔽! |
|
6楼#
发布于:2007-08-01 11:57
版主真是热心人啊,我根本不是作驱动的,只不过是一个小任务得调查一下而已,所以很多问题都搞不懂啊,我现在被这个玩意折磨得焦头烂额,上面的问题不是越界的问题,好像感觉是那个process的指针被保护起来了一样,没办法给别的值赋值,我本来想取不到就算了,我返回进程的handle到应用层去取进程名总行了吧,没想到ntterminateprocess这个函数里面的processhandle还可能是空值,说是空值就结束caller的进程,谁知道caller是谁啊,完全晕了。
|
|
7楼#
发布于:2007-08-02 18:29
你的是内核模式驱动马?问题应该出在strcpy函数中
|
|