Ich ziehe meine Haare aus diesem heraus. Ich versuche, in einem anderen Prozess eine Nachricht an ein Fenster zu senden. Ich erhalte nach dem Aufruf von SendMessage oder PostMessage oder PostThreadMessage immer den Zugriff verweigert (0x5) von GetLastError(). Ich habe versucht, UAC auszuschalten. Ich habe auch UIPI berücksichtigt, indem ich sichergestellt habe, dass die Integritätslevel übergreifend übereinstimmen. (Ich habe mit Process Explorer von SysInternals, jetzt MS) überprüft. Ich habe Windows Defender auch ohne Glück abgeschaltet. Ich kann eine Nachricht aus dem Prozess in das Fenster senden, aber von draußen bekomme ich bupkus! Dies scheint wie eine Art von Sicherheitsproblem, aber ich habe keine Ahnung, was es ist, da beide Prozesse die gleiche Integrity Level haben (mittel - dezimal 8192)SendMessage von DLL zu einem Fenster in einem anderen Prozess in Vista
-Code von DLL die Meldung
UINT MsgCode = ::RegisterWindowMessage(_T("MESSAGE_CODING_STRING"));
::ChangeWindowMessageFilter(MsgCode,MSGFLT_ADD);
::PostMessage(hwnd1,MsgCode,(WPARAM)1,(LPARAM)1);
DWORD errorcode = ::GetLastError();
ausgewählten Code Senden von Empfangen des Fensters
BEGIN_MESSAGE_MAP(CMessageMailBox, CDialog)
ON_REGISTERED_MESSAGE(MsgCode, TextFromApp)
END_MESSAGE_MAP()
// Class Constructor
CMessageMailBox::CMessageMailBox(CWnd* pParent /*=NULL*/)
: CDialog(CMessageMailBox::IDD, pParent){
MsgCode = ::RegisterWindowMessage(_T("MESSAGE_CODING_STRING"));
::ChangeWindowMessageFilter(MsgCode,MSGFLT_ADD);
}
//Message Handler
afx_msg LRESULT CMessageMailBox::TextFromApp(WPARAM wParam,LPARAM lParam){
::MessageBox(NULL,L"message recieved",L"yea!",MB_OK);
return 0L;
}
Werden beide Apps als Desktop-Apps ausgeführt? Oder ist einer von ihnen ein Service oder läuft er in einer anderen Sitzung? – jdigital
Ist der obige Pseudocode? Weil es falsch aussieht; Wie können Sie MsgCode in der Nachrichtenzuordnung verwenden, BEVOR es im Konstruktor initialisiert wird? Ich bin kein Experte für MFC, aber vielleicht ist das das Problem? – beef2k
Process Explorer gibt an, dass beide in Sitzung 1 ausgeführt werden. Der oberste Codeabschnitt wird in einer DLL ausgeführt, die in einen anderen Prozess mit einem WH_CALLWNDPROC-Hook injiziert wurde. Ich denke, ich kann MsgCode in der Nachrichtenzuordnung mit ON_REGISTERED_MESSAGE und nicht einfach alt ON_MESSAGE verwenden. Diese Nachrichtenzuordnung funktioniert mit einem sendmessage-Aufruf von innerhalb des Prozesses, aber nicht von der injizierten DLL. – JohnG