Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 是否可以使用未记录的系统处理信息?_Windows_Delphi_Winapi - Fatal编程技术网

Windows 是否可以使用未记录的系统处理信息?

Windows 是否可以使用未记录的系统处理信息?,windows,delphi,winapi,Windows,Delphi,Winapi,为了教育目的,我连接了NtQuerySystem信息,我进入了一个系统处理信息的工作结构。然后我想到了一些问题: 1-可以使用此结构吗 2-什么是官方结构 3-人们是如何发现这种未记录的结构的 这是我所说的代码的一部分,包含以下结构: //here is what i'm talking about type PProcessInfo = ^TProcessInfo; TProcessInfo=record dwOffset : dword; dwThreadCount : dword; dwU

为了教育目的,我连接了NtQuerySystem信息,我进入了一个系统处理信息的工作结构。然后我想到了一些问题:

1-可以使用此结构吗

2-什么是官方结构

3-人们是如何发现这种未记录的结构的

这是我所说的代码的一部分,包含以下结构:

//here is what i'm talking about
type
PProcessInfo = ^TProcessInfo;
TProcessInfo=record
dwOffset : dword;
dwThreadCount : dword;
dwUnkown1 : array[0..5] of dword;
ftCreationTime : TFileTime;
dwUnkown2 : dword;
dwUnkown3 : dword;
dwUnkown4 : dword;
dwUnkown5 : dword;
dwUnkown6 : dword;
pszProcessName : PWideChar;
dwBasePriority : dword;
dwProcessID : dword;
dwParentProcessID : dword;
dwHandleCount : dword;
dwUnkown7 : dword;
dwUnkown8 : dword;
dwVirtualBytesPeak : dword;
dwVirtualBytes : dword;
dwPageFaults : dword;
dwWorkingSetPeak : dword;
dwWorkingSet : dword;
dwUnkown9 : dword;
dwPagedPool : dword;
dwUnkown10 : dword;
dwNonPagedPool : dword;
dwPageFileBytesPeak : dword;
dwPageFileBytes : dword;
dwPrivateBytes : dword;
dwUnkown11 : dword;
dwUnkown12 : dword;
dwUnkown13 : dword;
dwUnkown14 : dword;
ThreadInfo : PThreadInfo;
end;
//finish here, below is just some little snippet of the code

function NtQuerySystemInformationCallbackProc(dt : dword; buf : pointer; bufsize : dword; retlen : pointer) : dword; stdcall;
type
PBA = ^TBA;
TBA = array[0..1000000] of byte;
var
tmpbuf: PBA;
ProcessInfo ,LastPinfo : PProcessInfo;
cp: DWORD;
curproc:string;
begin
Result := NtQuerySystemInformationNextHook(dt,buf,bufsize,retlen);
if dt<>5 then exit;
if result<>0 then exit;
cp := 0;
tmpbuf := buf;
continues....
//这就是我要说的
类型
PProcessInfo=^TProcessInfo;
TProcessInfo=记录
dwOffset:dword;
dwThreadCount:dword;
dwUnkown1:dword的数组[0..5];
ftCreationTime:TFileTime;
dwUnkown2:dword;
dwUnkown3:dword;
德沃德4:德沃德;
dwUnkown5:dword;
德沃德6:德沃德;
pszProcessName:PWideChar;
dwBasePriority:dword;
dwProcessID:dword;
dwParentProcessID:dword;
德汉德尔计数:德沃德;
德沃德7:德沃德;
德沃德8:德沃德;
dwVirtualBytesPeak:dword;
dwVirtualBytes:dword;
德沃德:德沃德;
dwWorkingSetPeak:dword;
dwWorkingSet:dword;
德沃德9:德沃德;
dwPagedPool:dword;
德沃德10:德沃德;
dwNonPagedPool:dword;
dwPageFileBytesPeak:dword;
dwPageFileBytes:dword;
dwPrivateBytes:dword;
德沃德11:德沃德;
德沃德12:德沃德;
德沃德13:德沃德;
德沃德14:德沃德;
ThreadInfo:PThreadInfo;
结束;
//在这里结束,下面只是一些代码片段
函数NtQuerySystemInformationCallbackProc(dt:dword;buf:pointer;bufsize:dword;retlen:pointer):dword;stdcall;
类型
PBA=^TBA;
TBA=字节数组[0..1000000];
变量
tmpbuf:PBA;
ProcessInfo,LastPinfo:PProcessInfo;
cp:DWORD;
curproc:string;
开始
结果:=NtQuerySystemInformationNextHook(dt、buf、bufsize、retlen);
如果是dt5,则退出;
如果结果为0,则退出;
cp:=0;
tmpbuf:=buf;
继续。。。。
对于这一点,没有更多的文档化结构,但这是我唯一能使其正常工作的结构

使用这种结构可以吗

这取决于你。报告说:

NtQuerySystemInformation可能会在未来版本的Windows中更改或不可用。应用程序应使用本主题中列出的备用函数

我想决定的关键在于,在结构发生变化、函数被删除或其行为被修改的情况下,您是否关心应用程序是否工作

什么是官方结构

可以在网站上找到

人们是如何发现这种未记录的结构的


结构是。保留油田的解释很可能是通过逆向工程发现的。另一种可能是信息泄露,可能是来自微软员工,也可能是来自阅读NDA源代码的人。

1-如果没有记录,则不受支持。2-官方结构,3-逆向工程,反汇编,从符号中检索。另外,如果您想使用,请使用Jedi ApiLib项目的JwaNative单元声明。是的,但在MSDN中,代码中没有关于TProcesInfo结构的引用。这就是我所说的。有了正式的和文档化的结构,就可以像我现在这样工作吗?对不起,我不明白comment
TProcessInfo
SYSTEM\u PROCESS\u INFORMATION
的德尔福表示法,但对保留字段有一些额外的猜测。