NtSetDefaultHardErrorPort
NTSTATUS __stdcall NtSetDefaultHardErrorPort(VOID *DefaultHardErrorPort){
_ESERVERSILO_GLOBALS *CurrentServerSiloGlobals;
NTSTATUS result;
_EPROCESS *Process;
PVOID Object;
CurrentServerSiloGlobals = PsGetCurrentServerSiloGlobals((_KSPIN_LOCK *)DefaultHardErrorPort);
if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeTcbPrivilege, KeGetCurrentThread()->PreviousMode) )
return -1073741727;
if( CurrentServerSiloGlobals->HardErrorState == 1 )
return -1073741823;
Object = 0i64;
result = ObReferenceObjectByHandle(
DefaultHardErrorPort,
0i64,
LpcPortObjectType,
KeGetCurrentThread()->PreviousMode,
&Object,
0i64);
CurrentServerSiloGlobals->ExpDefaultErrorPort = Object;
if( result >= 0 )
{
if( !PsIsCurrentThreadInServerSilo() )
ExReadyForErrors = 1;
CurrentServerSiloGlobals->HardErrorState = 1;
Process = KeGetCurrentThread()->ApcState.Process;
CurrentServerSiloGlobals->ExpDefaultErrorPortProcess = Process;
ObfReferenceObject(Process);
return 0;
}
return result;
}Referenced by:
No references.