PnpGetDevicePropertyData
__int64 __fastcall PnpGetDevicePropertyData(
__int64 a1,
INT64 a2,
unsigned int a3,
__int64 a4,
size_t a5,
VOID *a6,
unsigned int *a7,
INT64 a8){
__int64 v11;
_ETHREAD *CurrentThread;
unsigned int ObjectProperty;
__int64 v15;
unsigned int *v16;
_UNICODE_STRING String;
char v18[176];
memset(v18, 0i64, 0xAAu);
*(_QWORD *)&String.Length = 0i64;
if( a1 )
v11 = *(_QWORD *)(*(_QWORD *)(a1 + 312) + 40i64);
else
v11 = 0i64;
if( !v11 || !*(_QWORD *)(v11 + 48) )
return(unsigned int)-1073741808;
if( a3 )
{
String.Buffer = (wchar_t *)v18;
String.MaximumLength = 170;
if( !RtlLCIDToCultureName(a3, (INT64)&String) )
return(unsigned int)-1073741823;
}
else
{
String.Buffer = 0i64;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceSharedLite((UINT64)&PnpReplaceEvent + 7968, 1);
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
*(_QWORD *)(v11 + 48),
1i64,
0i64,
(INT64)String.Buffer,
a2,
a8,
(INT64)a6);
if( *(_DWORD *)(a2 + 16) == 2 )
{
v15 = *(_QWORD *)a2 - *(_QWORD *)&INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data1;
if( *(_QWORD *)a2 == *(_QWORD *)&INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data1 )
v15 = *(_QWORD *)(a2 + 8) - *(_QWORD *)INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data4;
if( !v15 )
{
if( ObjectProperty == -1073741772 || ObjectProperty == -1073741275 )
{
v16 = *(unsigned int **)(*(_QWORD *)(a1 + 312) + 88i64);
if( v16 )
{
if( a7 )
*a7 = *v16;
if( a5 >= *v16 )
{
memmove(a6, v16 + 1, *v16);
ObjectProperty = 0;
}
else
{
ObjectProperty = -1073741789;
}
}
else
{
ObjectProperty = -1073741772;
}
}
else if( !ObjectProperty )
{
PnpCompareInterruptInformation(a1, a6, *a7);
}
}
}
ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 7968));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
if( ObjectProperty == -1073741275 )
return(unsigned int)-1073741772;
return ObjectProperty;
}Referenced by:
IoGetDevicePropertyData