// This file is in public domain. #include #include #include #include #define MainWindowClassName L"SelectorMainWindowClass" #define DataTypeAlertError 0x1000 #define DataTypeAlertInformation 0x1001 #define DataTypeAlertWarning 0x1002 static void showAlertWarning(LPCWSTR message, LPCWSTR title){ HWND selectorMainWindow=FindWindow(MainWindowClassName, NULL); if(!selectorMainWindow){ MessageBox(NULL, message, title, MB_ICONWARNING); return; } wchar_t data[2048]; wcscpy(data, message); data[wcslen(message)]=0; wcscpy(data+wcslen(message)+1, title); size_t dataLen=wcslen(message)+wcslen(title)+1; COPYDATASTRUCT info; info.dwData=DataTypeAlertWarning; info.cbData=dataLen*sizeof(wchar_t); HGLOBAL global=GlobalAlloc(GPTR, info.cbData); memcpy((LPVOID)global, data, info.cbData); info.lpData=(LPVOID)global; SendMessage(selectorMainWindow, WM_COPYDATA, NULL, (LPARAM)&info); GlobalFree(global); } int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR lpCmd, int nShow){ HINSTANCE lib=LoadLibrary(L"BrainLILO"); if(!lib){ wchar_t buf[256]; swprintf(buf, L"Cannot perform a soft reset.\n" L"BrainLILO was not loaded (0x%08x).", GetLastError()); showAlertWarning(buf, L"Error"); return 1; } typedef BOOL (*RKDoSoftResetProc)(); RKDoSoftResetProc RKDoSoftReset= (RKDoSoftResetProc)GetProcAddress(lib, L"RKDoSoftReset"); if(!RKDoSoftReset){ wchar_t buf[256]; swprintf(buf, L"Cannot perform a soft reset.\n" L"RKDoSoftReset not found (0x%08x).", GetLastError()); showAlertWarning(buf, L"Error"); return 1; } if(!RKDoSoftReset()){ wchar_t buf[256]; swprintf(buf, L"Cannot perform a soft reset.\n" L"Operation failed (0x%08x).", GetLastError()); showAlertWarning(buf, L"Error"); return 1; } return 0; }