Не соглашусь, он очень плохо написан, не в обиду тс.
1. char buf[50] = {0}; и sprintf + printf не нужно, printf и так умеет принимать аргументы как и sprintf, buf выкинуть и сразу печатать через printf
2. в C++ переменные должны быть объявлены как можно ближе к использованию, не нужно их писать в начале функции, объявляй сразу где они появляются
3. выбери единый стиль для названия переменных и другого, у тебя одна переменная капсом, другая в виндовом стиле, третья в кэмилькейсе
4. не проверяешь результаты выделения памяти, записи памяти и создания потока в удаленном процессе, это важно
5. записывая имя дллки в удаленный процесс ты записываешь ТОЛЬКО ее длину, это анстаб, будет крашить у рандомных людей, сложновыявляемая ошибка, нужно выделять и записывать (длина + 1) * sizeof(char), т.к. нужно записать еще нулевой символ потому что LoadLibrary принимает строку заканчивающуюся нулем, да sizeof(char) сейчас бесполезен, но если ты решишь поменять на LoadLibraryW то все что нужно будет заменить на wchar_t.
6. в IsProcessRun ты не закрываешь снимок процессов, это утечка памяти
7. выкинь функцию IsProcessRun, и пусть GetProcId возвращает номер процесса, а не записывает в глобальную переменную (это плохой тон), и 0 если процесса нет
8. инклудов хватит на параход, проверь что они действительно тебе все нужны