NtRegisterThreadTerminatePort

NTSTATUS __stdcall NtRegisterThreadTerminatePort(VOID *PortHandle){
  _ETHREAD *CurrentThread; 
  NTSTATUS result; 
  _TERMINATION_PORT *PoolWithQuotaTag; 
  _TERMINATION_PORT *v4; 
  PADAPTER_OBJECT DmaAdapter; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  DmaAdapter = 0i64;
  result = ObReferenceObjectByHandle(
             PortHandle,
             1ui64,
             LpcPortObjectType,
             CurrentThread->Tcb.PreviousMode,
             (VOID **)&DmaAdapter,
             0i64);
  if( result >= 0 )
  {
    PoolWithQuotaTag = (_TERMINATION_PORT *)ExAllocatePoolWithQuotaTag((POOL_TYPE)9, 0x10ui64, 0x70547350ui64);
    v4 = PoolWithQuotaTag;
    if( PoolWithQuotaTag )
    {
      PoolWithQuotaTag->Port = DmaAdapter;
      PoolWithQuotaTag->Next = CurrentThread->TerminationPort;
      result = 0;
      CurrentThread->TerminationPort = v4;
    }
    else
    {
      HalPutDmaAdapter(DmaAdapter);
      return -1073741670;
    }
  }
  return result;
}

Referenced by:

No references.