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