IopDoDeferredSetInterfaceState
VOID __fastcall IopDoDeferredSetInterfaceState(_DEVICE_NODE *DeviceNode){
INT64 v1;
_ETHREAD *CurrentThread;
_LIST_ENTRY *p_PendedSetInterfaceState;
_UNICODE_STRING *Flink;
_LIST_ENTRY *v6;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite((UINT64)&PnpReplaceEvent + 6688, 1, v1);
PpMarkDeviceStackExtensionFlag(DeviceNode->PhysicalDeviceObject, 0x10ui64, 0);
p_PendedSetInterfaceState = &DeviceNode->PendedSetInterfaceState;
while( 1 )
{
Flink = (_UNICODE_STRING *)p_PendedSetInterfaceState->Flink;
if( p_PendedSetInterfaceState->Flink == p_PendedSetInterfaceState )
break;
if( (_LIST_ENTRY *)Flink->Buffer != p_PendedSetInterfaceState
|| (v6 = *(_LIST_ENTRY **)&Flink->Length, *(_UNICODE_STRING **)(*(_QWORD *)&Flink->Length + 8i64) != Flink) )
{
__fastfail(3u);
}
p_PendedSetInterfaceState->Flink = v6;
v6->Blink = p_PendedSetInterfaceState;
IopProcessSetInterfaceState(Flink + 1, 1u, 0);
ExFreePoolWithTag(Flink[1].Buffer, 0);
ExFreePoolWithTag(Flink, 0);
}
ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 6688));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}Referenced by:
IoReportDetectedDevice
PipProcessStartPhase2