PiDqPnPGetObjectProperty
__int64 __fastcall PiDqPnPGetObjectProperty(
__int64 a1,
unsigned int a2,
char *a3,
__int64 a4,
int a5,
NTSTRSAFE_PCWSTR pszSrc,
__int64 a7){
__int128 v7;
__int64 v8;
WCHAR *v9;
void *PoolWithTag;
int v14;
UINT64 v15;
int PWSTR;
int ObjectProperty;
void *v19;
int v20[18];
SIZE_T NumberOfBytes;
v7 = *(_OWORD *)a4;
v8 = a7;
v9 = (WCHAR *)pszSrc;
v20[0] = 0;
LODWORD(NumberOfBytes) = 512;
*(_OWORD *)a7 = v7;
PoolWithTag = 0i64;
*(_DWORD *)(v8 + 16) = *(_DWORD *)(a4 + 16);
v14 = a5;
LODWORD(v15) = 0;
*(_QWORD *)(v8 + 32) = 0i64;
*(_QWORD *)(v8 + 40) = 0i64;
*(_DWORD *)(v8 + 20) = v14;
PWSTR = PnpAllocatePWSTR(v9, 0x7FFFFFFFui64, 0x58706E50ui64, (WCHAR **)(v8 + 24));
if( PWSTR >= 0 )
{
while( 1 )
{
if( (unsigned int)NumberOfBytes > (unsigned int)v15 )
{
v15 = (unsigned int)NumberOfBytes;
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0x58706E50u);
PoolWithTag = ExAllocatePoolWithTag(PagedPool, v15, 0x58706E50ui64);
if( !PoolWithTag )
break;
}
LODWORD(NumberOfBytes) = 0;
if( a2 )
ObjectProperty = PnpGetObjectProperty(
PiPnpRtlCtx,
a1,
a2,
(__int64)a3,
v9,
a4,
v20,
(unsigned __int64)PoolWithTag,
v15,
(ULONG *)&NumberOfBytes,
0);
else
ObjectProperty = PnpGetGenericStoreProperty(
PiPnpRtlCtx,
a3,
v9,
a4,
v20,
(__int64)PoolWithTag,
v15,
&NumberOfBytes);
PWSTR = ObjectProperty;
if( ObjectProperty != -1073741789 )
goto LABEL_9;
}
PWSTR = -1073741670;
LABEL_9:
if( PWSTR >= 0 )
{
*(_DWORD *)(v8 + 32) = v20[0];
*(_DWORD *)(v8 + 36) = NumberOfBytes;
*(_QWORD *)(v8 + 40) = PoolWithTag;
return(unsigned int)PWSTR;
}
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0x58706E50u);
}
if( PWSTR == -1073741275 )
{
return 0;
}
else
{
v19 = *(void **)(v8 + 24);
if( v19 )
ExFreePoolWithTag(v19, 0x58706E50u);
}
return(unsigned int)PWSTR;
}Referenced by:
PiDqActionDataGetAllPropertiesInAllLanguages
PiDqActionDataGetChangedProperties
PiDqActionDataGetRequestedProperties
PiDqPnPGetObjectPropertyInBestLocale
PiDqPropertyCallback