RegRtlQueryKeyPathName
__int64 __fastcall RegRtlQueryKeyPathName(char *a1, const VOID **a2, size_t *a3, INT64 a4){
VOID *v6;
unsigned __int64 v7;
const VOID **v8;
UINT64 v9;
VOID *v10;
NTSTATUS v11;
NTSTATUS v12;
size_t v13;
size_t v14;
unsigned int v16;
const VOID **PoolWithTag;
NTSTATUS v18;
size_t v19;
size_t v20;
UINT64 *ReturnLength;
INT64 v22;
VOID *Handle;
__int128 v24;
UINT64 ulMinuend;
UINT64 pulResult;
Handle = 0i64;
LODWORD(pulResult) = 0;
LODWORD(ulMinuend) = 0;
v6 = a1;
v24 = 0i64;
if( (unsigned __int64)(a1 + 0x80000000) > 7
|| (v12 = RegRtlOpenPredefinedKey(a1, &Handle, (INT64)a3, a4, (INT64)ReturnLength, v22, (INT64)Handle, v24), v12 >= 0) )
{
v7 = 2i64 * *a3;
if( v7 > 0xFFFFFFFF )
{
v12 = -1073741675;
goto LABEL_12;
}
v8 = (const VOID **)&v24;
v9 = 16i64;
v10 = v6;
if( (unsigned int)v7 >= 0x10 )
v8 = a2;
if( (unsigned int)v7 >= 0x10 )
v9 = (unsigned int)v7;
if( Handle )
v10 = Handle;
v11 = ZwQueryObject(v10, ObjectNameInformation, v8, v9, &ulMinuend);
v12 = v11;
if( !v11 )
{
v13 = *(unsigned __int16 *)v8;
v14 = v13 + 2;
*a3 = (v13 + 2) >> 1;
if( (unsigned int)v7 >= v13 + 2 )
{
memmove(a2, v8[1], v13);
*((_WORD *)a2 + ((unsigned __int64)v14 >> 1) - 1) = 0;
goto LABEL_12;
}
goto LABEL_19;
}
if( v11 == -1073741820 )
{
v12 = RtlULongSub((unsigned int)ulMinuend, 0x10ui64, &pulResult);
if( v12 >= 0 )
{
if( (unsigned int)v7 < (unsigned int)pulResult )
{
*a3 = (unsigned int)pulResult >> 1;
LABEL_19:
v12 = -1073741789;
goto LABEL_12;
}
PoolWithTag = (const VOID **)ExAllocatePoolWithTag(1ui64, v16, 1279739218i64);
if( PoolWithTag )
{
if( Handle )
v6 = Handle;
v18 = ZwQueryObject(v6, ObjectNameInformation, PoolWithTag, (unsigned int)ulMinuend, &ulMinuend);
v12 = v18;
if( v18 >= 0 )
{
if( v18 )
{
v12 = -1073741595;
}
else
{
v19 = *(unsigned __int16 *)PoolWithTag;
v20 = v19 + 2;
*a3 = (v19 + 2) >> 1;
if( (unsigned int)v7 < v19 + 2 )
{
v12 = -1073741789;
}
else
{
memmove(a2, PoolWithTag[1], v19);
*((_WORD *)a2 + ((unsigned __int64)v20 >> 1) - 1) = 0;
}
}
}
ExFreePoolWithTag(PoolWithTag, 0);
}
else
{
v12 = -1073741801;
}
}
}
else if( v11 >= 0 )
{
v12 = -1073741595;
}
}
LABEL_12:
if( Handle )
ZwClose((_HANDLE)Handle);
return(unsigned int)v12;
}Referenced by:
PnpCtxRegQueryKeyPathName