PsRegisterAltSystemCallHandler
NTSTATUS __stdcall PsRegisterAltSystemCallHandler(INT64 a1, UINT64 a2){
__int64 v2;
_ETHREAD *CurrentThread;
v2 = (int)a2;
if( !a1 || (unsigned int)a2 >= 2 )
KeBugCheckEx(0x1E0u, (PVOID)2, 0i64, 0i64, 0i64);
if( !(_DWORD)a2 )
KeBugCheckEx(0x1E0u, (PVOID)3, 0i64, 0i64, 0i64);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(&PsAltSystemCallRegistrationLock, 0i64);
if( PsAltSystemCallHandlers[v2] )
{
ExReleasePushLockEx((ULONG_PTR)&PsAltSystemCallRegistrationLock, 0);
KeLeaveCriticalRegion();
KeBugCheckEx(0x1E0u, (PVOID)1, (PVOID)PsAltSystemCallHandlers[v2], 0i64, 0i64);
}
PsAltSystemCallHandlers[v2] = a1;
ExReleasePushLockEx((ULONG_PTR)&PsAltSystemCallRegistrationLock, 0);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return 0;
}Referenced by:
No references.