Problema Función "OpenProcess"

Iniciado por juancaa, 2 Febrero 2013, 19:06 PM

0 Miembros y 1 Visitante están viendo este tema.

juancaa

Al llamar a la función OpenProcess(PROCESS_ALL_ACCESS, 0, pid) esta me devuelve NULL es decir no es capaz de abrir el proceso. Utilizando la función getLastError() esta me devuelve 5, es decir, problemas Administrativos por lo que tengo entendido (Lectura, Escritura). La cosa esta en como puedo solucionar esto para que si me sea posible obenter el proceso??

Nota: Estoy utilizando Microsoft Visual Studio C++ y Windows 8.

Para que se hagan una mejor idea aqui les dejo mi codigo:

Código (cpp) [Seleccionar]

#include "stdafx.h"
#include <iostream>
#include <Windows.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

HWND hwnd = FindWindow(0, _T("NOMBRE_VENTANA"));

HANDLE hProcess;

DWORD pid;

if (!hwnd) {
cout << "ERROR 1\n\n";
} else {
GetWindowThreadProcessId(hwnd, &pid);

cout << "PID = " << pid << "\n\n";

hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); //PROBLEMA AQUI!!!

if (!hProcess) {
                        cout << "ERROR = " << GetLastError() << "\n\n"; //OBTENEMOS ERROR = 5 (PRIVILEGIOS)
} else {
cout << "PROCESS OPENED\n\n";
                       
                        //GESTIONAR...
}

CloseHandle(hProcess);

}

cin.get();
return 0;
}


A ver si alguien puede echarme una mano pues no se como salir adelante...
Saludos y gracias de antemano!!
Que tengas un buen dia!

naderST

#1

juancaa

Gracias por tu respuesta naderST, estoy intentando abrir un juego, en mi caso el WC3 para leer y modificar la memoria, pero el caso es que el problema se repite con cualquier ventana que quiera leer : Codigo de Error = 5... He leido el enlace que me has facilitado y la verdad es que lo que dicen alli ya lo habia intentado sin exito. He probado cambiando el valor de PROCESS_ALL_ACCESS por PROCESS_VM_READ pero sigue dando el mismo problema... Segun dicen debo habilitar algo de SeDebugPrivilege para lograr obtener privilegios.

Mirando sobre como activar o desactivar los privilegios en C he llegado a este enlace pero no acabo de lograrlo :
http://msdn.microsoft.com/en-us/library/aa446619.aspx

He utilizado la funcion que especifico en el enlace setPrivileges sin exito...
Que tengas un buen dia!

naderST

Intenta abrir el proceso con PROCESS_QUERY_INFORMATION y utiliza AdjustTokenPrivileges para habilitar SeDebugPrivilege

juancaa

Pufff... A ver he utilizado la funcion SetPrivileges  para ajustar los privilegios tal como dice la API, pero la funcion LookupPrivilegeValue me devuelve un codigo de error 1313 (ERROR_NO_SUCH_PRIVILEGE) que no tengo ni idea de como resolver... De verdad esto es tan complicado ?
Que tengas un buen dia!

juancaa

Despues de horas y horas de insaciable busqueda he conseguido hallar la respuesta en un antiguo post del foro :
http://foro.elhacker.net/programacion_cc/openprocess_no_me_funciona_en_visual_c_2008-t262234.0.html

Debido a que Visual Studio corre en modo usuario es necesario ejecutarlo con privilegios de administrador... Esto a solucionado mi problema finalmente. Gracias por tu ayuda naderST!
Que tengas un buen dia!