Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

C++ OpenThread funktioniert nicht

Diskussion: C++ OpenThread funktioniert nicht im Forum Code Kitchen, in der Kategorie Software Home; Anzeige hallo! ich möchte um einen thread von einem laufenden prozess zu öffnen die OpenThread Funktion benutzen. da meine entwicklungsumgebung ...

Antwort
Alt 28.10.06, 20:44   #1 (permalink)
 
Registriert seit: 18.07.05
NULL!=NULL Leistung: Facit NTK
Likes: 0
Standard C++ OpenThread funktioniert nicht

Anzeige

hallo!

ich möchte um einen thread von einem laufenden prozess zu öffnen die OpenThread Funktion benutzen.
da meine entwicklungsumgebung (ms visual c++ 6.0) diesen befehl nicht kennt, er aber laut online msdn auch bei win xp im kernel vorhanden ist, habe ich ihn folgendermaßen implementiert:

Code:
typedef HANDLE (*fnOpenThread)(DWORD,BOOL,DWORD); 
HANDLE OpenThread(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwThreadId)
{
   HINSTANCE Dll_Handle = LoadLibrary("Kernel32.dll");
   if  (Dll_Handle == NULL) return FALSE;
   fnOpenThread Ot = (fnOpenThread)GetProcAddress(Dll_Handle,"OpenThread");
   if (Ot  == NULL) return FALSE;
   HANDLE hThread = Ot(dwDesiredAccess, bInheritHandle , dwThreadId);
   FreeLibrary(Dll_Handle);
   return hThread;
}
ferner benutze ich noch folgendes um an die thread id ran zu kommen:
Code:
unsigned long GetTargetThreadIdFromProcname(char *procName)
{
   PROCESSENTRY32 pe;
   HANDLE thSnapshot, hProcess;
   BOOL retval, ProcFound = false;
   unsigned long pTID, threadID;

   thSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

   if(thSnapshot == INVALID_HANDLE_VALUE)
   {
      MessageBox(NULL, "Error: unable to create toolhelp snapshot", "Loader", NULL);
      return false;
   }

   pe.dwSize = sizeof(PROCESSENTRY32);

    retval = Process32First(thSnapshot, &pe);

   while(retval)
   {
      if(strcmp(pe.szExeFile, procName) == 0)
      {
         ProcFound = true;
         break;
      }

      retval    = Process32Next(thSnapshot,&pe);
      pe.dwSize = sizeof(PROCESSENTRY32);
   }

   CloseHandle(thSnapshot);
   
   _asm {
      mov eax, fs:[0x18]
      add eax, 36
      mov [pTID], eax
   }

   hProcess = OpenProcess(PROCESS_VM_READ, false, pe.th32ProcessID);
   ReadProcessMemory(hProcess, (const void *)pTID, &threadID, 4, NULL);
   CloseHandle(hProcess);

   return threadID;
}
meine winmain sieht nun folgendermaßen aus:
Code:
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
	
	DWORD procid=GetTargetProcessIdFromProcname("firefox.exe");
	DWORD threadid= GetTargetThreadIdFromProcname("firefox.exe");

	char prinw[500];
	sprintf(prinw,"firefox.exe proc id=%i threadid=%i",procid,threadid);
	MessageBox(NULL,prinw,"gugg",MB_OK);

	HANDLE hproc = OpenProcess((PROCESS_VM_WRITE | PROCESS_VM_OPERATION), false, procid);
	HANDLE hthread = OpenThread((THREAD_GET_CONTEXT | THREAD_SET_CONTEXT | THREAD_SUSPEND_RESUME), false, threadid); 
		
	if( hthread == NULL) 
	{
		char erro[500];
		sprintf(erro,"hthread error: %i",GetLastError());
		MessageBox(NULL,erro,"null",MB_OK);return 0;}
	return 0;
}
beim ausführen kommt zuerst die erste message box die mir anzeigt welche process id un welche thread id firefox hat.

danach kommt aber immer folgender fehler:
Unbehandelte Ausnahme in loadbl.exe: 0xC0000005 Access Violation

ich weiß nicht wie ich diesen befehler beheben kann.
NULL!=NULL ist offline   Mit Zitat antworten
Alt 28.10.06, 23:59   #2 (permalink)
 
Registriert seit: 11.09.05
heinzelJacKy Leistung: Facit NTK
heinzelJacKy eine Nachricht über ICQ schicken heinzelJacKy eine Nachricht über AIM schicken
Likes: 0
Standard

dass dein vc++ die funktion nicht kennt, is ja schon mal sehr seltsam, aber dein workaround is ja wohl ganz ok
also wenn ich Access Denied höre, denke ich sofort an das NT rechtesystem und wuerde jetzt mal spontan darauf tippen, dass dein prozess einfach nicht genuegend rechte hat.
sprich: entweder du fuehrst das ganze als non-admin aus oder du hast ein "Privilege" (in solchen fällen meistens SeDebugPrivilege) fuer den prozess nicht.
Probier mal, folgende funktion in dein programm einzubauen und diese in deiner winmain aufzurufen, bevor du OpenProcess benuetzt.
Code:
bool EnableDebugPriv( void )
{
	HANDLE hToken;
	LUID sedebugnameValue;
	TOKEN_PRIVILEGES tkp;

	if ( ! OpenProcessToken( GetCurrentProcess(),
		TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
	{
		//wcout << L"OPT() failed, gle = " << GetLastError() <<
		//	L" SeDebugPrivilege is not available." << endl;
		return false;
	}

	if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
	{
		//wcout << L"LPV() failed, gle = " << GetLastError() <<
		//	L" SeDebugPrivilege is not available." << endl;
		CloseHandle( hToken );
		return false;
	}

	tkp.PrivilegeCount = 1;
	tkp.Privileges[0].Luid = sedebugnameValue;
	tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

	if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
		//wcout << L"ATP() failed, gle = " << GetLastError() <<
		//	L" SeDebugPrivilege is not available." << endl;

	CloseHandle( hToken );
	return true;
}
heinzelJacKy ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » C++ OpenThread funktioniert nicht
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
computer funktioniert nicht... crash-override Die Problemzone 17 08.01.08 20:50
FN - Taste funktioniert nicht :( NeWcOmEr Die Problemzone 4 10.08.06 17:59
Ton funktioniert nicht! TheRealMoon Die Problemzone 2 19.12.05 20:07
VPN funktioniert, LAN nicht DocMorbid Windows 5 28.11.03 01:56
FM114P funktioniert nicht?! DevilCoder Network · LAN, WAN, Firewalls 0 28.06.03 15:59


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61