u32 patchRemoteProcess(u32 pid, u32 addr, u8* buf, u32 len) { u32 hProcess, hFile, ret, i, state, t; ret = svc_openProcess(&hProcess, pid); if (ret != 0) { showMsgPaused("openProcess failed"); hProcess = 0; goto final; }
u32 getCurrentProcessHandle() { u32 handle = 0; u32 ret; if (hCurrentProcess != 0) { return hCurrentProcess; } svc_getProcessId(¤tPid, 0xffff8001); ret = svc_openProcess(&handle, currentPid); if (ret != 0) { showDbg("openProcess failed, ret: %08x", ret, 0); return 0; } hCurrentProcess = handle; return hCurrentProcess; }
u32 updateMenu() { PLGLOADER_INFO *plgLoaderInfo = (void*)0x07000000; plgLoaderInfo->gamePluginPid = getCurrentProcessId(); plgLoaderInfo->gamePluginMenuAddr = (u32)&gamePluginMenu; u32 ret = 0; u32 hProcess; u32 homeMenuPid = plgGetIoBase(5); if (homeMenuPid == 0) { return 1; } ret = svc_openProcess(&hProcess, homeMenuPid); if (ret != 0) { return ret; } copyRemoteMemory(hProcess, &(plgLoaderInfo->gamePluginPid), CURRENT_PROCESS_HANDLE, &(plgLoaderInfo->gamePluginPid), 8); final: