-
-
[旧帖]
[求助]------------------------一个大难题---------复制内核对象句柄,关闭的问题
0.00雪花
-
发表于:
2012-7-2 23:15
1203
-
[旧帖] [求助]------------------------一个大难题---------复制内核对象句柄,关闭的问题
0.00雪花
h3:=OpenProcess(PROCESS_ALL_ACCESS , FALSE, pi1);{pi1是远程进程PID}
DuplicateHandle(h3,buffer1.SystemHandleInformations[I].Handle,GetCurrentProcess(),@h2,0,true,DUPLICATE_SAME_ACCESS and DUPLICATE_CLOSE_SOURCE);
以上是写权限,复制远程对象句柄到本地进程
ObjName.Name.Buffer:=GetMemory(300);
ZwQueryObject(h2,ObjectNameInformation,ObjName.Name.Buffer,300,0);
ObjName2 :=WideCharToString(ObjName.Name.Buffer);
objname3:=MidStr(ObjName2,5,300);
bool1:=AnsiEndsText(
'\device\HarddiskVolume\Windows\Fonts\StaticCache.dat',ObjName2);
取出远程内核对象句柄比较是否关闭
if bool1=True then
begin
ntclose(h2);
end;
{……………………………………………………………………………………………………………}
问题是这样复制过来的句柄关闭只是减少了句柄的引用计数,关闭不了远程的对象。
更可怕的是复制一次句柄引用数就加1,再关闭那个复制过来的句柄就减1,等于什么都没做。
我测试本地进程的可以关闭对象,不管引用计数为多少。
我看到XueTr直接就可以关闭远程的对象,那个是怎么搞的?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课