Problem: Mit NamedPipe, Help!



  • Aber der Server wartet erst einmal bis ein Client "angebissen" hat.

    Danach erst soll ein Thread erzeugt werden, der auf Clienten wartet ?



  • merker schrieb:

    Aber der Server wartet erst einmal bis ein Client "angebissen" hat.

    Danach erst soll ein Thread erzeugt werden, der auf Clienten wartet ?

    Hö? ConnectNamedPipe ist doch die stelle wo gewartet wird das ein Client die Verbindung auf nimmt oder?



  • Ja, schon. Aber das kann der Server auch im Thread machen. Nur CreateNamedPipe und CreateThread müssten reichen.



  • Pass auf hier mal die stelle im Code wo das alles so passieren soll:

    // Parent process
    case WM_CREATE: {
    
    			EnableDebugPrivilege( );
    
    			// ***** Log list *****
    			hList = CreateWindowEx( WS_EX_CLIENTEDGE, "LISTBOX", 0, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL, 0, 0, 0, 0, hWnd, (HMENU)5000, GetModuleHandle( 0 ), 0 );		
    
    			// ***** Initial pipe connection *****
    			hStarter = CreateThread( 0, 0, Starter, 0, 0, &dwStarterID );
    
    // ***** Inject DLL *****
    		InjectDLL( "KickIT.dll", GetWc3PID( ) );			
                return 0;
    }
    

    Ich hab auch mal die InjectDLL hinter CreateNamedPipe aufgerufen, dann bekomm ich ich aber nur ein false zurueck.



  • ich hab mir jetzt noch nen extra client pipe Konsolenprogramm geschrieben, die die Connect-Funktion aus der DLL ausführt und hier funktioniert es. Kann es sein das man gar keine named pipe connection aus einer DLL herraus aufbauen kann?

    EDIT:
    Die connect-Funktion aus der DLL gibt jedenfalls schon mal true zurück.



  • Oweh, das was in der "case WM_CREATE" alles gemacht wird, sieht eher nach einem Synchronisationsproblem aus.

    Die Pipe muß funktionsfähig sein bevor "InjectDLL" aufgerufen wird. Das ist aber nach CreateThread noch lange nicht der Fall.

    Probier mal "InjectDLL" gesondert, also in einem anderen "case WM_xxxx" aufzurufen.



  • ne das wird auch nichts, ich hab die DLLInject mal in die WM_SIZE gesteckt, dann bekomm ich aber wieder ein false von der Connect-Funktion aus der dll.



  • WM_SIZE ist ungeeignet. U.U. kommt der sogar noch vor WM_CREATE. Probier mal irgendein Button-Klick oder so.



  • in der tat es ist ein Syncronisationsproblem, denn ich habs auch mal andersherum probiert, sprich einen Server application geschrieben und dann mit der DLL connected und das ging. Und ja es geht jetzt auch mit dem Button, aber ich find das doof, gibts nicht doch nen Weg das es alle sautomatisch geht?



  • Vielleicht reicht es schon wenn "Starter" direkt, d.h. nicht via CreateThread in der "case WM_CREATE" aufgerufen wird.

    Dann würde die Pipe auch schon sicher vorhanden sein bevor "InjectDLL" aufgerufen wird.

    Aber dann darf ConnectNamedPipe in "Starter" nicht aufgeruufen werden sondern erst im dem Thread, der in "Starter" erzeugt wird.

    Zumindest ist das Hauptproblem erkannt. Viel Glück noch bei den "geheimen Dingen". 😋


Anmelden zum Antworten