プロセスIDからプロセスハンドルを得る

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あま
記事: 43
登録日時: 13年前

プロセスIDからプロセスハンドルを得る

#1

投稿記事 by あま » 13年前

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;
}
これだとおかしいですか?

mila

Re: プロセスIDからプロセスハンドルを得る

#2

投稿記事 by mila » 13年前

プログラム内でSE_DEBUG_NAME特権を有効にしてみてください。

あま
記事: 43
登録日時: 13年前

Re: プロセスIDからプロセスハンドルを得る

#3

投稿記事 by あま » 13年前

>SE_DEBUG_NAME特権を有効
ありがとうございます。
無事に取得できますた。

閉鎖

“C言語何でも質問掲示板” へ戻る