//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1999 - 1999 // // File: advert.c // //-------------------------------------------------------------------------- #include #include #include #include "Remote.h" // =================================================== // CLIENT END OF THE MAILSLOT // =================================================== #define INITIAL_AD_RATE 15*1000 //10 Sec. REMOVE #define MAXIMUM_AD_RATE 45*60*1000 //1 hour #define INITIAL_SLEEP_PERIOD 2*60*1000 //Initial Sleep Period REMOVE - change to 5 min. #define KDCONNECTED TEXT("Kernel Debugger connection established.") extern TCHAR SaveFileName[64]; extern SESSION_TYPE ClientList[10]; extern HANDLE ListenThreadH; HANDLE hRead; HANDLE IsConnectedToClient( TCHAR *ClientName ); BOOL WaitForString( HANDLE hRead, TCHAR *str ); VOID InitAd( BOOL IsAdvertise ); VOID ShutAd( BOOL IsAdvertise ); DWORD Advertise( TCHAR *PipeName ); VOID InitAd( BOOL IsAdvertise ) { if (IsAdvertise) { HANDLE hThread; DWORD WhoCares; hThread=CreateThread ( (LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)Advertise, (LPVOID)PipeName, 0, &WhoCares ); CloseHandle(hThread); } } VOID ShutAd( BOOL IsAdvertise ) { if (IsAdvertise) SAFECLOSEHANDLE(hRead); } DWORD Advertise( TCHAR *PipeName ) { DWORD WaitTime=INITIAL_AD_RATE; DWORD NameLen=32; HANDLE hThread; TCHAR SendBuff[256]; DWORD tmp; HANDLE hMailSlot; TCHAR Hostname[32]; Sleep(INITIAL_SLEEP_PERIOD); hRead=CreateFile( SaveFileName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hRead==INVALID_HANDLE_VALUE) { return(1); } hMailSlot=CreateFile( TEXT("\\\\NTDEV\\MAILSLOT\\REMOTE\\ADVERTISE"), GENERIC_WRITE, FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE)NULL ); if (hMailSlot==INVALID_HANDLE_VALUE) { return(2); } GetComputerName(HostName,&NameLen); _stprintf(SendBuff,TEXT("%.31s %.31s %.63s"),HostName,PipeName,ChildCmd); if (!WaitForString(hRead,KDCONNECTED)) { return(1); } while(TRUE) { if (!(WriteFile( hMailSlot, (LPVOID)SendBuff, (DWORD)_tcslen(SendBuff)+1, &tmp, NULL ) ) ) { //ERRORMSSG(TEXT("WriteFile Failed on Mailslot")); Sleep(10*60*1000); } else { Sleep(15*1000); while ((hThread=IsConnectedToClient(TEXT("SKYLINK")))!=NULL) { WaitForSingleObject(hThread,INFINITE); WaitTime=INITIAL_AD_RATE; WaitForString(hRead,KDCONNECTED); //REMOVE COMMENT } WaitTime=min(MAXIMUM_AD_RATE,2*WaitTime); Sleep(WaitTime); } } return(0); //Should never get here } BOOL WaitForString( HANDLE hRead, TCHAR *str ) { int len=_tcslen(str); TCHAR Buff[512]; TCHAR *BuffEnd=Buff; TCHAR *BuffPos=Buff; TCHAR *strPos=str; int matchcount=0; BOOL Found=FALSE; DWORD bytesread; while(!Found) { while (BuffPos==BuffEnd) { BuffPos=Buff; SetLastError(0); if ((!ReadFile(hRead,Buff,512,&bytesread,NULL))||(bytesread==0)) { if ((GetLastError()!=ERROR_HANDLE_EOF)&&(GetLastError()!=0)) { return(FALSE); } Sleep(2*60*1000); } BuffEnd=Buff+bytesread; } while(!Found && (BuffPos!=BuffEnd)) { if (*(BuffPos++)==*(strPos++)) { matchcount++; if (matchcount==len) Found=TRUE; } else { matchcount=0; strPos=str; } } } return(Found); } HANDLE IsConnectedToClient( TCHAR *ClientName ) { extern SESSION_TYPE ClientList[MAX_SESSION]; int i; for (i=0;i