能力值:
( LV12,RANK:300 )
|
-
-
2 楼
又是一个对ObQueryNameString的参数的理解错误。
ObQueryNameString相应的缓冲区,是一个OBJECT_NAME_INFORMATION结构,当函数调用成功,这里填入的就是一个UNICODE_STRING结构及其Buffer中的所有内容(最前面是一个UNICODE_STRING,后面是相应的WCHAR字符串,UNICODE_STRING中的Buffer就是指向WCHAR字符的开头),而并不是你自己初始化一个UNICODE_STRING然后传给它。
这种方式很常见,如ZwQueryVirtualMemory(MomerySectionName)及ZwQueryInformationProcess(ProcessImageFileName)填入缓冲区的都是这样的结构。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我把代码改成:
NTSTATUS status;
ULONG pid=2000,relg;
PEPROCESS pro;
OBJECT_NAME_INFORMATION processfullpath;
PsLookupProcessByProcessId((HANDLE)pid,&pro);
DbgPrint("process is %x",pro);
status=ObQueryNameString((PVOID)pro,&processfullpath,512,&relg);
DbgPrint("process full path is %S",processfullpath.Name.Buffer);
输出还是为空呀
|
能力值:
( LV5,RANK:60 )
|
-
-
4 楼
PID2000一定存在???,%ws
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
就是方便,测试的时候会修改的
|
能力值:
( LV6,RANK:90 )
|
-
-
6 楼
2楼已经说的很明白了
OBJECT_NAME_INFORMATION processfullpath; status=ObQueryNameString((PVOID)pro,&processfullpath,512,&relg);
可以试试这个
POBJECT_NAME_INFORMATION processfullpath
processfullpath = ( POBJECT_NAME_INFORMATION)exallocatepool (nonpagedpool, 1024);
status=ObQueryNameString((PVOID)pro,processfullpath,1024,&relg); 你这样做,实际上已经让这个函数访问了它不该访问的内存,楼主你试着跟踪一下,你看看processfullpath参数下面的内存内容在ObQueryNameString执行后是不是被改了。没实际测试过,若说错了请帮忙指正,thanks
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
试了,结果一样,
process full path is (null)
|
能力值:
( LV9,RANK:610 )
|
-
-
8 楼
ProcessObject没有名字吧~~
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
那就先获取到EPROCESS下的Sectionobject再ObQueryNameString吗
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
哪些Object是有名字的
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
是不是只有FILE_OBJECT才能用这个函数呀
|
能力值:
( LV9,RANK:380 )
|
-
-
12 楼
http://hi.baidu.com/%BD%D0%CE%D2v%D0%A3/blog/item/c1982f024053d07b3912bb91.html
用完之后,记得释放~~不然资源会被消耗完~~
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
二楼说的是这个意思:
typedef struct _OBJECT_NAME_INFORMATION {
UNICODE_STRING Name;
WCHAR NameBuffer[0];
} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
|
能力值:
( LV2,RANK:140 )
|
-
-
14 楼
额.教主说的对.进程对象没有名字.
ObQueryNameString是通过object_header中的NameInfoOffset找到OBJECT_HEADER_NAME_INFO结构.然后根据OBJECT_HEADER_NAME_INFO的Directory..循环到ObpRootDirectoryObject.然后把Name拼起来以得到全路径的...然而Process的object_header中的NameInfoOffset为0.所以ObQueryNameString不会得到名字呀
|
能力值:
( LV2,RANK:140 )
|
-
-
15 楼
winobj能枚举出来的都是有名字的
|
能力值:
( LV2,RANK:140 )
|
-
-
16 楼
例如那个\Device\Harddisk0\DR0 QueryName的过程
|
|
|