Вы можете предотвратить завершение вашего процесса, используя недокументированный API из NTDLL.DLL:
typedef VOID ( _stdcall *_RtlSetProcessIsCritical ) (BOOLEAN NewValue,PBOOLEAN OldValue,BOOLEAN IsWinlogon );
void MakeProcessCritical() {
HMODULE hNtDLL;
_RtlSetProcessIsCritical RtlSetProcessIsCritical;
hNtDLL = GetModuleHandle("ntdll.dll")
RtlSetProcessIsCritical = (_RtlSetProcessIsCritical)GetProcAddress(hNtDLL, "RtlSetProcessIsCritical");
if(RtlSetProcessIsCritical != NULL)
RtlSetProcessIsCritical(1, 0, 0);
}
Попытка завершить ваш процесс приведет к сообщению об отказе в доступе.Если каким-то образом ваш процесс будет вынужден завершиться или завершится самостоятельно, система остановится и появится синий экран смерти.Убедитесь, что вы вызываете RtlSetProcessIsCritical (0, 0, 0), прежде чем закрыть свой процесс, если вы используете это.
ПРИМЕЧАНИЕ. Я настоятельно не рекомендую этот метод для любого программного обеспечения, которое будет продаваться.