Есть 32 битный процесс в 64 битной системе. Пытаюсь получить список DLL через:
- PEB и Module32Next
C:\Windows\SYSTEM32\ntdll.dll
C:\Windows\SYSTEM32\kernel32.dll
C:\Windows\SYSTEM32\kernelbase.dll
C:\Windows\SYSTEM32\user32.dll
C:\Windows\SYSTEM32\gdi32.dll
C:\Windows\SYSTEM32\msvcr100.dll
C:\Windows\SYSTEM32\imm32.dll
- Process Explorer
C:\Windows\SysWOW64\bcryptprimitives.dll
C:\Windows\SysWOW64\combase.dll
C:\Windows\SysWOW64\cryptbase.dll
C:\Windows\SysWOW64\dwmapi.dll
C:\Windows\SysWOW64\gdi32.dll
C:\Windows\SysWOW64\imm32.dll
Почему в 1 случае "C:\Windows\SYSTEM32\", а не C:\Windows\SysWOW64\
Запрашивается ведь из 32 битного(WOW64) процесса для себя же.
HANDLE h;
PEB p;
PROCESS_BASIC_INFORMATION s;
DWORD w=0;
HMODULE hMsi;
PLDR_MODULE curr;
PLDR_MODULE b;
DWORD adr;
BYTE *bfv;
long sz;
DWORD r;
HANDLE hf;
MODULEENTRY32 pf;
hMsi=LoadLibrary("ntdll.dll");
NtQueryInformationProcess=(NtQueryInformationProcessQ)GetProcAddress(hMsi,"NtQueryInformationProcess");
h=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,GetCurrentProcessId());
ZeroMemory(&pf,sizeof(pf));
pf.dwSize=sizeof(pf);
Module32First(h,&pf);
for(;;)
{
ZeroMemory(&pf,sizeof(pf));
pf.dwSize=sizeof(pf);
w=Module32Next(h,&pf);
printf("%s \n",pf.szExePath);
if( w==0 ) break;
}
MessageBox(0,0,0,1);
ZeroMemory(&s,sizeof(s));
h=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,0,GetCurrentProcessId());
if( h>0 )
{
if( NtQueryInformationProcess(h,ProcessBasicInformation,&s,sizeof(s),&w)==0 )
{
// if( GetProcAddress(LoadLibrary("kernel32.dll"),"IsWow64Process")==0 )
// {
ZeroMemory(&p,sizeof(p));
ReadProcessMemory(h,s.PebBaseAddress,&p,sizeof(p),&w);
if( w>0 )
{
curr=(PLDR_MODULE)p.Ldr->InMemoryOrderModuleList.Flink;
curr=(PLDR_MODULE)((DWORD)curr-sizeof(LIST_ENTRY));
b=(PLDR_MODULE)&p.Ldr->InMemoryOrderModuleList;
b=(PLDR_MODULE)((DWORD)b-sizeof(LIST_ENTRY));
while(curr!=b)
{
printf("%p \n",curr);
wprintf(L"%s \n",curr->FullDllName.Buffer);
printf(" \n");
curr=(PLDR_MODULE)curr->InMemoryOrderModuleList.Flink;
curr=(PLDR_MODULE)((DWORD)curr-sizeof(LIST_ENTRY));
}
}
}
}
}