Почему функция VirtualProtectEx
не работает при вызове из приложения-службы?уже выполняется из простого приложения, все работает нормально.
Тогда есть возможность заставить эту функцию работать также из службы?
Вот мой код:
void WriteProcMem(HANDLE hProcess, VOID *pAddr)
{
DWORD oldProtection;
DWORD bytesWritten = 0;
BYTE data[] = { 0x90, 0x90, 0x90, 0x90, 0x90 }; // Only a example of assembly data
if (!VirtualProtectEx(hProcess, (LPVOID)pAddr, sizeof(DWORD), PAGE_EXECUTE_READWRITE, &oldProtection)) {
printf("\n VirtualProtectEx() error - %d\n", GetLastError());
//=============== To debug from service application ===================
FILE * pFile;
pFile = fopen("C:\\myfile.txt", "w");
if (pFile != NULL)
{
char * str = new char[100];
sprintf(str, "%d", GetLastError());
fputs(str, pFile);
fclose(pFile);
}
//======================================================================
return;
}
if (WriteProcessMemory(hProcess, (LPVOID)pAddr, &data, sizeof(data), &bytesWritten)) {
printf("\n Data written success! \n");
if (!VirtualProtectEx(hProcess, (LPVOID)pAddr, sizeof(DWORD), oldProtection, &oldProtection))
printf("\n VirtualProtectEx() [2] error - %d \n", GetLastError());
}
}
Служба выполняет дочерний процесс в режиме отладки, и с учетной записью SYSTEM эти данные должны быть записаны в " child.exe ".
ИЗДАНИЕ:
После ответа @SM реальное значение, возвращаемое GetLastError()
, равно:
ERROR_INVALID_HANDLE : 6 (0x6) - дескриптор недействителен.
Но, как я уже сказал, когда не выполняется как служба, все работает нормально.Почему это происходит?