RPC Remote Procedur Call
-
Hallo,
ich habe ein C++ Progamm welches via RPC mit einem anderen (test)Programm kommuniziert. Beide Programme laufen nur lokal auf dem Client, weshalb die Kommunikation eigentlich ein bisschen umständlich ist, aber ursprünglich sollte das Ganze eben auch übers Netz laufen.
Naja unter Windows2000 funktioniert alles einwandfrei, doch unter Windows XP gibt scheint der Verbindungsaufbau irgendwie zu scheitern. In der RPC Funktion
NdrSendReceive scheint es einen Fehler zu geben, da der Debugger nach dieser Programmzeile in den RpcFinally-Block springt.
Aber was genau schief läuft kann ich nicht erkennen da ich die Funktion nur im Disassemlber schauen kann.Hat irgendjemand eine Ahnung woran das liegen könnte. Die Kommunikation ist auf Port 2200 festgelegt, der Port ist auch offen und das Programm "lauscht" auch auf dem Port, während das Testprogramm versucht diesen Port zu synchronisieren. Firewall tchnisch habe ich bis zur totalen deaktivierung schon alles ausprobiert.
Ich habe jetzt schon Tagelang im Netz geschaut, bin aber nicht wirklich voran gekommen. Deshalb wäre ich über jede möglich Hilfe überaus dankbar.
Vielen Dank im Voraus,
Phil
UDAM_HANDLE udam_Open( void) { RPC_BINDING_HANDLE _Handle = 0; UDAM_HANDLE _RetVal; RPC_MESSAGE _RpcMessage; MIDL_STUB_MESSAGE _StubMsg; RpcTryFinally { NdrClientInitializeNew( ( PRPC_MESSAGE )&_RpcMessage, ( PMIDL_STUB_MESSAGE )&_StubMsg, ( PMIDL_STUB_DESC )&udam_StubDesc, 0); _Handle = udam_IfHandle; _StubMsg.BufferLength = 0U; NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle ); NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer ); if ( (_RpcMessage.DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION ) NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[0] ); _RetVal = *(( UDAM_HANDLE __RPC_FAR * )_StubMsg.Buffer)++; } RpcFinally { NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg ); } RpcEndFinally return _RetVal; }P.S.: Beim disassemblieren ist der Assembler Code bei XP und 2000 erstmal gleich... doch dann bei einem jmp unterscheidet sich die Adresse in einem Zeichen - warum???
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ha,
nach dem mir hier leider niemand helfen konnte, habe ich nach Wochenlanger Suche den Fehler gefunden.
Das Problem lag darin, dass die Funktion RpcServerRegisterIf von Microsoft zu RpcServerRegisterIfEx geändert wurde!!
Zudem wurden die Argumente abgeändert.
Die Antwort habe ich auf www.codeproject.com gefunden und sie wurde vom User gizmocuz gepostet:After searching on this site and the internet I found the solution for this problem.
Under windows xp SP2 you have to change the RpcServerRegisterIf to RpcServerRegisterIfEx like:
// Registers the Example1 interface. status = RpcServerRegisterIfEx( Example1_v1_0_s_ifspec, // Interface to register. NULL, NULL, // Use the MIDL generated entry-point vector. RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH, 0, NULL);
Phil