阅读:2964回复:6
为什么我获取当前进程名总是返回csrss.exe呢?
为什么我获取当前进程名总是返回csrss.exe呢?代码如下:(出于filemon):
ULONG FilemonGetProcessNameOffset() { PEPROCESS curproc; int i; curproc = PsGetCurrentProcess(); // // Scan for 12KB, hoping the KPEB never grows that big! // for( i = 0; i < 3*PAGE_SIZE; i++ ) { if( !strncmp( SYSNAME, (PCHAR) curproc + i, strlen(SYSNAME) )) { return i; } } // // Name not found - oh, well // return 0; } PCHAR FilemonGetProcess( PCHAR Name ) { #if GETPROCESS PEPROCESS curproc; char *nameptr; ULONG i; KIRQL oldirql; // // We only do this if we determined the process name offset // if( ProcessNameOffset ) { // // Get a pointer to the current process block // curproc = PsGetCurrentProcess(); //curproc = IoGetCurrentProcess(); // // Dig into it to extract the name // nameptr = (PCHAR) curproc + ProcessNameOffset; //DbgPrint((\"Ctrl2cap: nameptr:%s!\\n\",nameptr)); strncpy( Name, nameptr, NT_PROCNAMELEN ); // // Terminate in case process name overflowed // Name[NT_PROCNAMELEN] = 0; //DbgPrint((\"Ctrl2cap: Name:%s &&&!\\n\",Name)); return Name; } else { strcpy( Name, \"???\" ); return Name; } #else // // We\'re not getting names, so just return something // strcpy( Name, \"??\" ); return Name; #endif } 我用DbgView看了一下,不管我在哪个程序中敲键盘,这儿返回的Name全是csrss.exe,真是奇怪!!! 请大家指教!!! |
|
沙发#
发布于:2008-02-26 16:30
在我机器上是这个“System”,比较奇怪
|
|
板凳#
发布于:2009-09-08 13:00
因为csrss.exe有一个一直监听键盘的输入
|
|
地板#
发布于:2009-09-12 21:51
键盘驱动的使用者是线程 win32k!RawInputThread 。线程 win32k!RawInputThread 的进程是 csrss.exe
这是网上搜索的结果,但具体该线程如何将获取的键盘数据转发给各不同进程好像都没怎么提到,还有对键盘设备堆栈顶端设备对象的IPR_MJ_READ这个请求能否和一指定的进程关联起来,有哪位高手能指点下吗? |
|
地下室#
发布于:2009-10-20 16:12
我觉得这是创建进程啊,
|
|
5楼#
发布于:2010-03-15 12:52
RawInputThread 在win2k的代码里有。通过它内部维护的数据结构,大概找当前鼠标所在焦点发送消息的,当然这只是最简单情况。
|
|
6楼#
发布于:2010-03-15 21:59
你在哪里调用啊,我在IRP_MJ_CREATE里调是没有问题的
|
|