PiSwIrpInterfacePropertySet
NTSTATUS __stdcall PiSwIrpInterfacePropertySet(_IRP *Irp){
UINT64 v1;
INT64 v2;
_IO_STACK_LOCATION *CurrentStackLocation;
INT64 FsContext2;
int v6;
_ETHREAD *CurrentThread;
_PI_SWD_OBJECT *v8;
_PI_SWD_INTERFACE *InterfaceEntry;
PVOID P;
__int64 v12;
INT64 v13;
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
FsContext2 = (INT64)CurrentStackLocation->FileObject->FsContext2;
v13 = FsContext2;
v12 = 0i64;
P = 0i64;
if( !Irp->AssociatedIrp.MasterIrp )
goto LABEL_21;
v6 = MesDecodeBufferHandleCreate(Irp->AssociatedIrp.MasterIrp, CurrentStackLocation->Parameters.Options, &v12);
if( v6 < 0 )
goto LABEL_14;
NdrMesTypeDecode3(v12, "TP 3\a", &off_140983A98, (char *)&stru_140C00F40 + 2848, 4, &P);
if( P && *(_QWORD *)P && *((_QWORD *)P + 2) && (v1 = *((unsigned int *)P + 2), (_DWORD)v1) )
{
v6 = PiSwValidatePropertyArray(*((_DEVPROPERTY **)P + 2), v1);
if( v6 >= 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite((UINT64)&PiSwLockObj, 1, v2);
if( PiSwDeviceOperationsAllowed(FsContext2) )
{
InterfaceEntry = PiSwDeviceFindInterfaceEntry(v8, *(WCHAR **)P);
v6 = InterfaceEntry ? PiSwUpdateArrayProperties(
*((_DEVPROPERTY **)InterfaceEntry + 3),
(unsigned int)InterfaceEntry[8],
*((_DEVPROPERTY **)P + 2),
*((unsigned int *)P + 2)) : -1073741275;
}
else
{
v6 = -1073741637;
}
ExReleaseResourceLite(&PiSwLockObj);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
if( v6 >= 0 )
v6 = PiSwPropertySet(*(WCHAR **)P, (VOID *)3, *((_QWORD *)P + 2), (_DEVPROPERTY *)*((unsigned int *)P + 2));
}
}
else
{
LABEL_21:
v6 = -1073741811;
}
LABEL_14:
if( P )
ExFreePoolWithTag(P, 0x6370726Bu);
if( v12 )
MesHandleFree(v12, v1, v2);
Irp->IoStatus.Status = v6;
IofCompleteRequest(Irp, 0);
return v6;
}Referenced by:
PiSwDispatch