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.