//-----------------------------------------------
// MainDlgProc
// Notice: dialog procedure
//
BOOL CALLBACK MainDlgProc (HWND hDlg,	// handle to dialog box
						   UINT uMsg,      // message
						   WPARAM wParam,  // first message parameter
						   LPARAM lParam ) // second message parameter
{
	switch (uMsg) {
	case WM_COMMAND:
		if (!bInj) {
			bInj = InjectCode( hStart );
			if (bInj)
				::SetDlgItemText( hDlg, IDC_BUTTON, TEXT("Eject") );
		}
		else {
			bInj = !EjectCode();
			if (!bInj)
				::SetDlgItemText( hDlg, IDC_BUTTON, TEXT("Let's Inject") );
		}
		break;

	case WM_CLOSE:
		// be polite and restore the old window procedure (but  
		// note that we could leave the START button subclassed, too)
		if( bInj ) 
			bInj = !EjectCode( );

		if( bInj )
			::MessageBox( NULL, TEXT("Injected code could not be removed"),TEXT("  Error"),MB_OK );

		::EndDialog (hDlg, 0);
		break;		
	}

	return false;
}
Exemple #2
0
/*************************************
 * Eject code from a remote process. *
 *************************************/
BOOL Eject()
{
#ifdef INJECT_DLL
    return (EjectDll() != 0);
#else
    return (EjectCode() != 0);
#endif
}