Win32APIのOpenProcess関数を使用してプロセスハンドルを取得しようとしていますが、戻り値がNULLになってしまいます。
コード:
pid = GetPID(TEXT("test.exe"), &tid);
hThread = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if(hThread != NULL)
{
//成功したときの処理//
}
else
{
hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, tid);
if(hTread != NULL)
{
//成功したときの処理//
}
else
{
printf("Error!!");
}
}
最初にプロセスIDの取得では自作関数を使っています。
コード:
DWORD GetPID(LPCTSTR program, LPDWORD tid)
{
HANDLE hSnapshot;
PROCESSENTRY32 pe;
THREADENTRY32 te;
TCHAR szFileTitle[256];
DWORD pid = 0xFFFFFFFF;
*tid = 0xFFFFFFFF;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD, 0);
if(hSnapshot != INVALID_HANDLE_VALUE)
{
pe.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(hSnapshot,&pe))
{
do
{
GetFileTitle(pe.szExeFile, szFileTitle, 256);
if(lstrcmpi(szFileTitle,program) == 0)
{
pid = pe.th32ProcessID;
break;
}
}
while(Process32Next(hSnapshot,&pe));
}
if(!pid)
{
te.dwSize = sizeof(THREADENTRY32);
if(Thread32First(hSnapshot, &te))
{
do
{
if(te.th32OwnerProcessID == pid)
{
*tid = te.th32ThreadID;
break;
}
}
while(Thread32Next(hSnapshot, &te));
}
}
CloseHandle(hSnapshot);
}
return pid;
}
これだとおかしいですか?