PnpCtxRegisterMachineNode

NTSTATUS __fastcall PnpCtxRegisterMachineNode(INT64 a1, WCHAR *a2, INT64 a3, INT64 a4, INT64 a5){
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  NTSTATUS v9; 
  _UNICODE_STRING **v10; 
  _UNICODE_STRING *v11; 
  _QWORD *p_Length; 
  __int64 v13; 
  _QWORD *v14; 
  _UNICODE_STRING *v15; 
  void *v17; 
  _UNICODE_STRING *P; 

  P = 0i64;
  v6 = *(&stru_140CF2E80 + 607);
  v7 = (int)a3;
  if( (int)a3 <= 0 )
    return -1073741811;
  if( (int)a3 > 2 )
  {
    if( (_DWORD)a3 == 3 )
      goto LABEL_4;
    return -1073741811;
  }
  if( *(_QWORD *)(*(&stru_140CF2E80 + 607) + 16i64 * (int)a3 + 24) != *(&stru_140CF2E80 + 607) + 16i64 * (int)a3 + 24 )
    return -1073741298;
LABEL_4:
  if( PnpCtxFindNode(*(&stru_140CF2E80 + 607), a2, 0i64, &P) >= 0 )
    return -1073741771;
  v9 = PnpCtxCreateNode(
         (_DWORD *)v6,
         a2,
         v7,
         v8,
         (VOID *)a5,
         v17,
         (VOID *)0xFFFFFFFFFFFFFFFFi64,
         (VOID *)(*(_QWORD *)(*(_QWORD *)(v6 + 224) + 8i64) & -(__int64)(*(_QWORD *)(*(_QWORD *)(v6 + 224) + 8i64) != 0i64)),
         &P);
  if( v9 < 0 )
  {
    v15 = P;
  }
  else
  {
    v10 = *(_UNICODE_STRING ***)(v6 + 16);
    if( *v10 != (_UNICODE_STRING *)(v6 + 8) )
      goto LABEL_12;
    v11 = P;
    *(_QWORD *)&P->Length = v6 + 8;
    v11->Buffer = (wchar_t *)v10;
    *v10 = v11;
    *(_QWORD *)(v6 + 16) = v11;
    p_Length = &v11[1].Length;
    v13 = 16 * v7 + v6 + 24;
    v14 = *(_QWORD **)(v13 + 8);
    if( *v14 != v13 )
LABEL_12:
      __fastfail(3u);
    *p_Length = v13;
    p_Length[1] = v14;
    *v14 = p_Length;
    *(_QWORD *)(v13 + 8) = p_Length;
    memset((VOID *)(v6 + 96), 0i64, 0x80u);
    v15 = 0i64;
    *(_BYTE *)(v6 + 4) = *(_QWORD *)(v6 + 56) != v6 + 56;
  }
  if( v15 )
    PnpCtxDestroyNode(v15);
  return v9;
}

Referenced by:

PiPnpRtlInit
PiPnpRtlRegisterDriverMachineNodeCallback