DbgkpOpenHandles

VOID __fastcall DbgkpOpenHandles(INT64 a1, VOID *a2, VOID *a3){
  void *v5; 
  __int64 v6; 
  _QWORD *v7; 
  __int64 v8; 
  _QWORD *v9; 
  char v10; 
  char v11; 
  switch( *(_DWORD *)a1 )
  {
    case 2:
      v9 = (_QWORD *)(a1 + 24);
      if( ObOpenObjectByPointer(a3, 0, 0i64, 0x12007Bu, (POBJECT_TYPE)PsThreadType, 0, (PHANDLE)(a1 + 24)) < 0 )
        *v9 = 0i64;
      break;
    case 3:
      v7 = (_QWORD *)(a1 + 32);
      if( ObOpenObjectByPointer(a3, 0, 0i64, 0x12007Bu, (POBJECT_TYPE)PsThreadType, 0, (PHANDLE)(a1 + 32)) < 0 )
        *v7 = 0i64;
      if( ObOpenObjectByPointer(a2, 0, 0i64, 0x12067Bu, (POBJECT_TYPE)PsProcessType, 0, (PHANDLE)(a1 + 24)) < 0 )
        *(_QWORD *)(a1 + 24) = 0i64;
      v5 = *(void **)(a1 + 48);
      if( v5 )
      {
        v11 = 0;
        v8 = *((_QWORD *)KeGetCurrentThread() + 23);
        if( (int)ObDuplicateObject(v8, v5, v8, a1 + 48, 0, 0, 2, v11) < 0 )
          *(_QWORD *)(a1 + 48) = 0i64;
        goto LABEL_14;
      }
      break;
    case 9:
      v5 = *(void **)(a1 + 24);
      if( v5 )
      {
        v10 = 0;
        v6 = *((_QWORD *)KeGetCurrentThread() + 23);
        if( (int)ObDuplicateObject(v6, v5, v6, a1 + 24, 0, 0, 2, v10) < 0 )
          *(_QWORD *)(a1 + 24) = 0i64;
LABEL_14:
        ObCloseHandle(v5, 0);
      }
      break;
  }
}

Referenced by:

NtWaitForDebugEvent