Windows API について学び始めたばかりで、特定のプロセスで値を読み取る簡単なプログラムを作成したいと考えています。
これが私のコードです
#include <stdio.h>
#include <Windows.h>
void printError();
int main()
{
int *buffer;
// process input
unsigned int pid = 0;
printf("process ID : ");
scanf("%d", &pid);
getchar();
HANDLE authorisation = OpenProcess(PROCESS_VM_READ, FALSE, pid);
if(authorisation == NULL)
{
printf("OpenProcess Failed. GetLastError = %d", GetLastError());
getchar();
return EXIT_FAILURE;
}
// adress memory input
int *memoryAddress = 0x0;
printf("memory address to read (in hexadecimal) : ");
scanf("%p", &memoryAddress);
getchar();
printf("Reading from address : %p", memoryAddress);
if(ReadProcessMemory(authorisation, (LPCVOID)memoryAddress, &buffer, 8,
NULL))
{
printf("\nptr2int = %p\n", buffer);
}
else
{
printError();
}
int varInt = 0;
// HERE IS THE PROBLEM
// GetLastError return 6 : Invalid Handle
if(ReadProcessMemory(authorisation, (LPCVOID)buffer, &varInt,
sizeof(int), NULL))
{
printf("varInt = %d\n", varInt);
}
else
{
printError();
}
printf("Press ENTER to quit");
getchar();
return 0;
}
void printError()
{
printf("ReadProcessMemory Failed. GetLastError = %d", GetLastError());
getchar();
return EXIT_FAILURE;
}
ただし、RPM の 2 回目の呼び出し用に新しいハンドルを作成すると、完全に機能します。
MSDNでこれを読みました:
OpenProcess 関数によって返されるハンドルは、プロセスへのハンドルを必要とするすべての関数で使用できます。」
私は何を間違っていますか?