ExpGenuinePolicyPostProcess
INT64 __stdcall ExpGenuinePolicyPostProcess(
UINT64 *Type,
VOID *Data,
UINT64 DataSize,
UINT64 *ResultDataSize,
UINT8 *QueryHandled){
unsigned int v6;
int v8;
void *v9;
bool v10;
UNICODE_STRING *v11;
int v12;
VOID *PoolWithTag;
UNICODE_STRING *v14;
int v15;
INT64 a5;
UINT64 *a5a;
SIZE_T NumberOfBytes;
int v20;
UINT64 ResultDataSizea;
_DWORD *a4;
__int128 v23;
_BYTE *v24;
v6 = (unsigned int)ResultDataSize;
a4 = QueryHandled;
v20 = 0;
*v24 = 0;
v8 = 0;
v9 = 0i64;
LODWORD(ResultDataSizea) = 4;
v23 = 0i64;
NumberOfBytes = 0i64;
if( *Type )
{
LODWORD(a5) = 2;
v8 = sub_14094D46C(Data, (_DWORD *)DataSize, (unsigned int)ResultDataSize, QueryHandled, a5);
*v24 = 1;
return(unsigned int)v8;
}
if( DataSize )
{
if( (_DWORD)ResultDataSize == 1 )
{
v10 = *(_BYTE *)DataSize == 1;
}
else
{
if( (_DWORD)ResultDataSize != 2 )
{
if( *(_DWORD *)DataSize == 1 )
return(unsigned int)v8;
goto LABEL_11;
}
v10 = *(_WORD *)DataSize == 1;
}
if( v10 )
return(unsigned int)v8;
}
LABEL_11:
v8 = ZwQueryLicenseValue((UNICODE_STRING *)&stru_1409841C8, 0i64, (char *)&NumberOfBytes + 4, 4ui64, &ResultDataSizea);
if( v8 < 0 || HIDWORD(NumberOfBytes) != 1 )
{
v8 = qword_140D2C438 ? qword_140D2C438(&v20) : -1073741637;
if( v8 >= 0 )
{
if( qword_140D2C3F8 )
{
LODWORD(a5a) = 0;
v8 = ExpOsProductCacheProviderHelper(v11, (UINT64 *)&qword_140983950, 0i64, 0i64, a5a, (UINT8 *)&NumberOfBytes);
if( v8 == -1073741789 )
{
v12 = NumberOfBytes;
PoolWithTag = ExAllocatePoolWithTag(PagedPool, (unsigned int)NumberOfBytes, 0x20534C53ui64);
v9 = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741801;
LODWORD(a5a) = v12;
v8 = ExpOsProductCacheProviderHelper(
v14,
(UINT64 *)&qword_140983950,
0i64,
(UINT64)PoolWithTag,
a5a,
(UINT8 *)&NumberOfBytes);
}
if( v8 < 0 )
goto LABEL_32;
v15 = qword_140D2C3F8(3i64, v9, 0i64);
v8 = v15;
if( v15 >= 0 && (v23 & 0x40) != 0 || v15 == -1073741198 )
{
v8 = 0;
goto LABEL_30;
}
}
else
{
v8 = -1073741637;
}
if( v8 < 0 )
{
LABEL_32:
if( v9 )
ExFreePoolWithTag(v9, 0);
return(unsigned int)v8;
}
LABEL_30:
if( !v20 )
{
LODWORD(a5a) = 2;
v8 = sub_14094D46C(Data, (_DWORD *)DataSize, v6, a4, (INT64)a5a);
*v24 = 1;
}
goto LABEL_32;
}
}
return(unsigned int)v8;
}Referenced by:
No references.