PnpCtxCreateNode
__int64 __fastcall PnpCtxCreateNode(
_DWORD *a1,
WCHAR *a2,
int a3,
__int64 a4,
VOID *SystemKey,
PVOID P,
VOID *UsersKey,
VOID *TransactionHandle,
_QWORD *a9){
_QWORD *v9;
PVOID v10;
VOID **PoolWithTag;
VOID **v15;
UINT64 v16;
VOID *v17;
VOID *v18;
NTSTATUS v19;
unsigned int v20;
int v21;
int v23;
UINT64 Version;
v9 = a9;
v10 = 0i64;
P = 0i64;
*a9 = 0i64;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x98ui64, 1380994640i64);
v15 = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741801;
memset(PoolWithTag, 0i64, 0x98u);
if( RtlCreateUnicodeString((INT64)(v15 + 4), (INT8 *)a2) )
{
v18 = UsersKey;
*((_DWORD *)v15 + 12) = a3;
LODWORD(Version) = *a1;
v19 = SysCtxOpenMachine(v16, SystemKey, v17, v18, TransactionHandle, Version, (HSYSCTX **)&P);
v10 = P;
v20 = v19;
if( v19 >= 0 )
{
if( *(_DWORD *)P < 0xA000000u )
{
v20 = -1073741637;
}
else
{
v15[8] = 0i64;
v15[9] = 0i64;
v15[10] = 0i64;
v15[11] = 0i64;
v15[12] = 0i64;
v15[13] = 0i64;
v15[14] = 0i64;
v15[16] = 0i64;
v15[17] = 0i64;
v15[18] = 0i64;
v21 = a3 - 1;
if( v21 )
{
v23 = v21 - 1;
if( v23 )
{
if( v23 != 1 )
{
v20 = -1073741811;
goto LABEL_7;
}
v15[8] = (VOID *)-1i64;
v15[12] = (VOID *)-1i64;
v15[13] = (VOID *)-1i64;
v15[14] = (VOID *)-1i64;
v15[16] = (VOID *)-1i64;
v15[17] = (VOID *)-1i64;
v15[18] = (VOID *)-1i64;
}
}
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