PiDqActionDataGetRequestedProperties
__int64 __fastcall PiDqActionDataGetRequestedProperties(
__int64 a1,
unsigned int a2,
__int64 a3,
char a4,
const wchar_t *a5,
__int64 a6,
unsigned int a7,
_QWORD *a8,
_DWORD *a9){
int v9;
unsigned int v10;
VOID *PoolWithTag;
unsigned int v12;
__int64 v13;
__int64 v14;
VOID *v15;
__int64 Property;
INT64 v17;
int v18;
__int128 v20;
INT64 v21;
HANDLE Handle;
PVOID P;
v9 = 0;
Handle = 0i64;
v10 = a2;
P = 0i64;
*a9 = 0;
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 48i64 * a7, 0x58706E50ui64);
*a8 = PoolWithTag;
if( !PoolWithTag )
{
v9 = -1073741670;
goto LABEL_12;
}
PiPnpRtlBeginOperation((__int64 **)&P);
v12 = 0;
if( !a7 )
goto LABEL_12;
v13 = (unsigned int)*a9;
v14 = a6 + 20;
while( 1 )
{
v15 = 0i64;
Property = *a8 + 48 * v13;
if( !*(_DWORD *)v14 )
goto LABEL_5;
if( *(_DWORD *)v14 != 1 )
break;
v10 = 0;
if( !Handle )
{
v9 = PiDqOpenObjectRegKey(1, a3, a2, 1, 0, a1, (__int64)&Handle);
if( v9 == -1073741772 )
{
v9 = 0;
Handle = (HANDLE)-1i64;
}
}
if( Handle == (HANDLE)-1i64 )
{
*(_OWORD *)Property = *(_OWORD *)(v14 - 20);
v20 = *(_OWORD *)(v14 - 4);
*(_DWORD *)(Property + 32) = 0;
*(_QWORD *)(Property + 40) = 0i64;
*(_DWORD *)(Property + 36) = 0;
*(_OWORD *)(Property + 16) = v20;
goto LABEL_9;
}
v15 = Handle;
LABEL_5:
if( v9 < 0 )
goto LABEL_12;
v17 = a6 + 32i64 * v12;
if( a4 )
{
LODWORD(v21) = *(_DWORD *)v14;
v18 = PiDqPnPGetObjectPropertyInBestLocale(a3, v10, v15, v17, v21, (WCHAR *)a5, (DEVPROPERTY *)Property);
}
else
{
v18 = PiDqPnPGetObjectProperty(
a3,
v10,
(char *)v15,
v17,
*(_DWORD *)v14,
*(NTSTRSAFE_PCWSTR *)(v14 + 4),
Property);
}
v9 = v18;
if( v18 < 0 )
goto LABEL_12;
LABEL_9:
++*a9;
++v12;
v13 = (unsigned int)*a9;
v14 += 32i64;
if( v12 >= a7 )
goto LABEL_12;
v10 = a2;
}
v9 = -1073741811;
LABEL_12:
if( (char *)Handle - 1 <= (char *)0xFFFFFFFFFFFFFFFDi64 )
ZwClose(Handle);
if( P )
PiPnpRtlEndOperation(P);
return(unsigned int)v9;
}Referenced by:
PiDqActionDataCreate