PiSwIrpInterfacePropertySet
INT64 __stdcall PiSwIrpInterfacePropertySet(PIRP Irp){
__int64 v2;
INT64 v3;
NTSTATUS v4;
UINT64 v5;
_ETHREAD *CurrentThread;
__int64 v7;
__int64 *InterfaceEntry;
PVOID P;
__int64 v11;
INT64 v12;
v2 = *((_QWORD *)Irp + 23);
v3 = *(_QWORD *)(*(_QWORD *)(v2 + 48) + 32i64);
v12 = v3;
v11 = 0i64;
P = 0i64;
if( !*((_QWORD *)Irp + 3) )
goto LABEL_21;
v4 = MesDecodeBufferHandleCreate(*((_QWORD *)Irp + 3), *(unsigned int *)(v2 + 16), &v11);
if( v4 < 0 )
goto LABEL_14;
NdrMesTypeDecode3(v11, "TP 3\a", &off_140983A98, &off_140C01A60, 4, &P);
if( P && *(_QWORD *)P && *((_QWORD *)P + 2) && (v5 = *((unsigned int *)P + 2), (_DWORD)v5) )
{
v4 = PiSwValidatePropertyArray(*((DEVPROPERTY **)P + 2), v5);
if( v4 >= 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceExclusiveLite((ERESOURCE *)PiSwLockObj, 1u);
if( PiSwDeviceOperationsAllowed(v3) )
{
InterfaceEntry = PiSwDeviceFindInterfaceEntry(v7, *(const wchar_t **)P);
v4 = InterfaceEntry ? PiSwUpdateArrayProperties(
(DEVPROPERTY *)InterfaceEntry[3],
*((unsigned int *)InterfaceEntry + 8),
*((DEVPROPERTY **)P + 2),
*((unsigned int *)P + 2)) : -1073741275;
}
else
{
v4 = -1073741637;
}
ExReleaseResourceLite((PERESOURCE)PiSwLockObj);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
if( v4 >= 0 )
v4 = PiSwPropertySet(*(WCHAR **)P, (PVOID)3, *((_QWORD *)P + 2), (DEVPROPERTY *)*((unsigned int *)P + 2));
}
}
else
{
LABEL_21:
v4 = -1073741811;
}
LABEL_14:
if( P )
ExFreePoolWithTag(P, 0x6370726Bu);
if( v11 )
MesHandleFree();
*((_DWORD *)Irp + 12) = v4;
IofCompleteRequest(Irp, 0);
return(unsigned int)v4;
}Referenced by:
PiSwDispatch