PnpCtxCreateNode
__int64 __fastcall PnpCtxCreateNode(
int *a1,
const WCHAR *a2,
int a3,
__int64 a4,
__int64 a5,
PVOID P,
__int64 a7,
HANDLE SourceHandle,
_QWORD *a9){
_QWORD *v9;
PVOID v10;
VOID *PoolWithTag;
VOID *v15;
__int64 v16;
__int64 v17;
__int64 v18;
int v19;
unsigned int v20;
int v21;
int v23;
v9 = a9;
v10 = 0i64;
P = 0i64;
*a9 = 0i64;
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x98ui64, 0x52504E50ui64);
v15 = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741801;
memset((INT64)PoolWithTag, 0i64);
if( RtlCreateUnicodeString((UNICODE_STRING *)v15 + 2, (PWCHAR)a2) )
{
v18 = a7;
*((_DWORD *)v15 + 12) = a3;
v19 = SysCtxOpenMachine(v16, a5, v17, v18, SourceHandle, *a1, (__int64)&P);
v10 = P;
v20 = v19;
if( v19 >= 0 )
{
if( *(_DWORD *)P < 0xA000000u )
{
v20 = -1073741637;
}
else
{
*((_QWORD *)v15 + 8) = 0i64;
*((_QWORD *)v15 + 9) = 0i64;
*((_QWORD *)v15 + 10) = 0i64;
*((_QWORD *)v15 + 11) = 0i64;
*((_QWORD *)v15 + 12) = 0i64;
*((_QWORD *)v15 + 13) = 0i64;
*((_QWORD *)v15 + 14) = 0i64;
*((_QWORD *)v15 + 16) = 0i64;
*((_QWORD *)v15 + 17) = 0i64;
*((_QWORD *)v15 + 18) = 0i64;
v21 = a3 - 1;
if( v21 )
{
v23 = v21 - 1;
if( v23 )
{
if( v23 != 1 )
{
v20 = -1073741811;
goto LABEL_7;
}
*((_QWORD *)v15 + 8) = -1i64;
*((_QWORD *)v15 + 12) = -1i64;
*((_QWORD *)v15 + 13) = -1i64;
*((_QWORD *)v15 + 14) = -1i64;
*((_QWORD *)v15 + 16) = -1i64;
*((_QWORD *)v15 + 17) = -1i64;
*((_QWORD *)v15 + 18) = -1i64;
}
}
*((_QWORD *)v15 + 7) = v10;
v10 = 0i64;
*v9 = v15;
v15 = 0i64;
}
}
}
else
{
v20 = -1073741801;
}
LABEL_7:
if( v15 )
ExFreePoolWithTag(v15, 0);
if( v10 )
SysCtxCloseMachine(v10);
return v20;
}Referenced by:
PnpCtxOpenMachine
PnpCtxRegisterMachineNode