私のコードは、文書化されていないwinnt
関数NtQuerySystemInformation()
を使用して、実行中のすべてのプロセスを取得しています。公式に文書化されていませんが、サードパーティのドキュメントがたくさんあります ( http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/System%20Information/NtQuerySystemInformation.htmlおよびhttp://www.exploit-monday .com/2013/06/undocumented-ntquerysysteminformation.htmlから始めます)。関数は動的にロードされます (とLoadLibrary()
を使用GetProcAddress()
) 。NtQuerySystemInformation()
PSYSTEM_PROCESS_INFORMATION pspi = NULL;
ULONG info_length = 0;
NTSTATUS result = NtQuerySystemInformation(SystemProcessInformation, NULL , 0, &info_length);
pspi = (PSYSTEM_PROCESS_INFORMATION ) HeapAlloc ( .. , info_length , ..);
result = NtQuerySystemInformation(SystemProcessInformation, pspi , info_length, &info_length);
if ( result != NT_SUCESS ) return ;
while (..)
{
...
cout << pspi.ImageName.buffer ;
...
}
この[疑似]コードは、呼び出しプロセスを除いて、マシン上で実行されているすべてのプロセスを出力します。何がこの動作を引き起こすのかわかりません。