#include <windows.h>
#include <psapi.h>
#include <stdio.h>

long ProcessNameToPid(char ProcessName[]);


void ListModuleInProcess(long pid)
{
	HMODULE hMods[64];
	HANDLE hProcess;
	DWORD nBytes;
	size_t i;

	hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                           FALSE, pid);

	if(hProcess && EnumProcessModules(hProcess, hMods, sizeof(hMods), &nBytes))
	{
		size_t len = nBytes / sizeof(DWORD);
		for(i=1;i<len;i++)
		{
			char ModName[1024];

			GetModuleBaseName(hProcess, hMods[i], ModName, sizeof(ModName)/sizeof(char));

			printf("[+] %s\n", ModName);
		}
	}

	CloseHandle(hProcess);
}

int main(void)
{
	long pid = ProcessNameToPid("smss.exe");

	printf("Modules in Smss.exe:\n");

	ListModuleInProcess(pid);

	return 0;
}