#include #include #include "global.h" #include "..\DynamicLink\serverblock.h" #include "..\ClientChannel\channel.h" #include "DynamicLink.h" #include "utilities.h" BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad) { switch(fdwReason) { case DLL_PROCESS_ATTACH: hin = hinstDLL; EmptyCleanString = (CLEAN_STRING) rmalloc( sizeof(int) + 1); EmptyCleanString->length = 0; break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return(TRUE); } int FirstInstanceOfServer2(int firstinstance) { HANDLE hLocalServerReady; HANDLE hGlobalServerReady; HANDLE hLocalClientReady; HANDLE hFileMapping; char *b; // __asm int 3 if( !firstinstance ) { hLocalServerReady = CreateEvent( NULL, FALSE, FALSE, LOCAL_SERVER_READY_NAME); if( hLocalServerReady == NULL ) { error(); msg( "FirstInstanceOfServer: hLocalServerReady" ); ExitProcess(-1); } hGlobalServerReady = CreateEvent( NULL, FALSE, TRUE, GLOBAL_SERVER_READY_NAME); if( hGlobalServerReady == NULL ) { error(); msg( "FirstInstanceOfServer: hGlobalServerReady" ); ExitProcess(-1); } hLocalClientReady = CreateEvent( NULL, FALSE, FALSE, LOCAL_CLIENT_READY_NAME); if( hLocalClientReady == NULL ) { error(); msg( "FirstInstanceOfServer: hLocalClientReady" ); ExitProcess(-1); } // Open buffer hFileMapping = CreateFileMapping( (HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,MESSAGE_SIZE,GLOBAL_BUFFER_NAME); if( hFileMapping == NULL ) { error(); msg( "FirstInstanceOfServer: hFileMapping" ); ExitProcess(-1); } b = (char *) MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, MESSAGE_SIZE); if( b == NULL ) { error(); msg( "FirstInstanceOfServer: MapViewOfFile" ); ExitProcess(-1); } // Communicate with server WaitForSingleObject( hGlobalServerReady, INFINITE ); *((DWORD *) (b + GLOBAL_BUFFER_START)) = UNKNOWN_CLIENT_ID; // rsprintf( (b + sizeof(DWORD) + GLOBAL_BUFFER_START), "AddClient\n%s\n\n", GetCommandLine() ); rsprintf( (b + sizeof(DWORD) + GLOBAL_BUFFER_START), "MessageFromSecondOrLaterLinker\n%s\n\n", GetCommandLine() ); #ifdef DEBUG msg( (b + sizeof(DWORD) + GLOBAL_BUFFER_START) ); #endif // Send to server SetEvent( hLocalClientReady ); // Wait for server to process request WaitForSingleObject( hLocalServerReady, INFINITE ); // Quit instance, close all open handles UnmapViewOfFile( b ); CloseHandle( hFileMapping ); CloseHandle( hLocalClientReady ); CloseHandle( hGlobalServerReady ); CloseHandle( hLocalServerReady ); ExitProcess(-1); } /* if */ return( CLEAN_TRUE ); } RESOURCEAPI CLEAN_STRING DoReqS(CLEAN_STRING s) { msg( "DoReqS should not be called in Server" ); }