Bug in RAD Studios 2007 ?
-
Hallo ich habe folgenden Code der bei mir Probleme macht.
Wenn ich das Programm mit RAD Studios 2007 innerhalb der IDE Compiliere und ausführe dann funktioniert alles ohne Probleme.
Wenn ich jedoch in den Ordner gehe wo die EXE Datei(das compilierte Programm) gespeichert ist und ich diese aufrufe dann bekomme ich bei GetLastError(); den Fehlercode 5 heraus (5=Access denied)
Also hab ich alles zu sicherheit nochmal mit dem Borland C++ Builder 6 compiliert um zu sehen ob es da geht. (Da ich mir 100% sicher bin das der code richtig ist). In der IDE vom Borland C++ Builder 6 funktionierte sowie wenn ich die EXE Datei (das compilierte Programm) manuell ausgeführt habe.
#include <iostream> #include <windows> using namespace std; int main(int argc, char* argv[]) { HANDLE handle; DWORD ID=0; HWND hwnd = FindWindow(0,"test" ); if(hwnd==0) { cout<<"Fenster nicht gefunden"<<endl; system("PAUSE"); return 0; } GetWindowThreadProcessId(hwnd, &ID); handle = OpenProcess(PROCESS_ALL_ACCESS, false, ID); if ( handle == 0 ) { cout<<"OpenProcess error: " << GetLastError()<<endl; } cout<<"handle: " << handle<<endl; cin.get(); return 0; }Im Debugger erzeugt RAD Studios 2007 folgendes:
004011CF |. FF75 F8 PUSH DWORD PTR SS:[EBP-8] ; /ProcessId 004011D2 |. 6A 00 PUSH 0 ; |Inheritable = FALSE 004011D4 |. 68 FFFF1F00 PUSH 1FFFFF ; |Access = TERMINATE|CREATE_THREAD|VM_OPERATION|VM_READ|VM_WRITE|DUP_HANDLE|CREATE_PROCESS|SET_QUOTA|SET_INFORMATION|QUERY_INFORMATION|SYNCHRONIZE|STANDARD_RIGHTS_REQUIRED|F804 004011D9 |. E8 02520000 CALL <JMP.&KERNEL32.OpenProcess> ; \OpenProcessDer Borland C++ Builder 6 erzeugt:
004011C7 |. FF75 F8 PUSH DWORD PTR SS:[EBP-8] ; /ProcessId 004011CA |. 6A 00 PUSH 0 ; |Inheritable = FALSE 004011CC |. 68 FF0F1F00 PUSH 1F0FFF ; |Access = PROCESS_ALL_ACCESS 004011D1 |. E8 AE0F0000 CALL <JMP.&KERNEL32.OpenProcess> ; \OpenProcessDas hier ist die interessante Stelle:
RAD Studios 2007:
004011D4 |. 68 FFFF1F00 PUSH 1FFFFF ; |Access = TERMINATE|CREATE_THREAD|VM_OPERATION|VM_READ|VM_WRITE|DUP_HANDLE|CREATE_PROCESS|SET_QUOTA|SET_INFORMATION|QUERY_INFORMATION|SYNCHRONIZE|STANDARD_RIGHTS_REQUIRED|F804Borland C++ Builder 6:
004011CC |. 68 FF0F1F00 PUSH 1F0FFF ; |Access = PROCESS_ALL_ACCESSHat wer von euch auch vielleicht RAD Studios 2007 und kann das mal überprüfen ob das bei ihm auch so ist?
[Wenn ich das Binary von RAD Studios umpatche auf
PUSH 1F0FFFund abspeichere dann funktioniert es.]
-
Btw. wenn ich das Programm mit RAD Studios compiliere und einen Breakpoint auf OpenProcess mache und da dann den Debugger von RAD Studios anhänge dann steht dort auch
PUSH 001fffff.