#include <windows.h>
#include <stdio.h>
#include <tlhelp32.h>

void InjectHook(PROCESSENTRY32 pe32){
  printf("テストデバッグ プロセスID:%d  プロセス名:[%s]\n",pe32.th32ProcessID,pe32.szExeFile);
}
#define _TEXT(a) (a)

BOOL CheckProcessModule(DWORD dwPID)
{
  HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
  MODULEENTRY32 me32;
  hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL,dwPID);
  if (hModuleSnap == INVALID_HANDLE_VALUE)
  {
    printf("CreateToolhelp32Snapshot(of modules)");
    return ( FALSE );
  }
  CloseHandle(hModuleSnap);
// (ここから先は読みとれず)
  return (TRUE);
}

BOOL GetProcessList()
{
  HANDLE hProcessSnapshot;
  HANDLE hProcess;
  PROCESSENTRY32 pe32;
  hProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
  if (hProcessSnapshot == INVALID_HANDLE_VALUE)
  {
    MessageBox(NULL,_TEXT("CreateToolhelp32Snapshot"),_TEXT("ERROR"),MB_OK);
    return( FALSE );
  }
  pe32.dwSize = sizeof( PROCESSENTRY32 );
  if ( Process32First(hProcessSnapshot,&pe32) == NULL)
  {
    MessageBox(NULL,_TEXT("Process32First"),_TEXT("ERROR"),MB_OK);
    CloseHandle(hProcessSnapshot);
    return ( FALSE );
  }

  do
  {
    hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);
    if (hProcess != NULL){
      if(CheckProcessModule(pe32.th32ProcessID)){
        InjectHook(pe32);
      }
    }
    CloseHandle(hProcess);
  } while( Process32Next(hProcessSnapshot,&pe32));
  CloseHandle(hProcessSnapshot);
  return ( TRUE );
}

void main()
{
  MessageBox(NULL,_TEXT("Start simurator and hit return key!!"),_TEXT("Simulator Injector"),MB_OK);
  GetProcessList();
}




