IopDoDeferredSetInterfaceState
void __fastcall IopDoDeferredSetInterfaceState(_DEVICE_NODE *DeviceNode){
_ETHREAD *CurrentThread;
UNICODE_STRING **v3;
UNICODE_STRING *v4;
UNICODE_STRING *v5;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceExclusiveLite(&PnpRegistryDeviceResource, 1u);
PpMarkDeviceStackExtensionFlag(*((DEVICE_OBJECT **)DeviceNode + 4), 0x10ui64, 0);
v3 = (UNICODE_STRING **)((char *)DeviceNode + 608);
while( 1 )
{
v4 = *v3;
if( *v3 == (UNICODE_STRING *)v3 )
break;
if( (UNICODE_STRING **)v4->Buffer != v3
|| (v5 = *(UNICODE_STRING **)&v4->Length, *(UNICODE_STRING **)(*(_QWORD *)&v4->Length + 8i64) != v4) )
{
__fastfail(3u);
}
*v3 = v5;
v5->Buffer = (wchar_t *)v3;
IopProcessSetInterfaceState(v4 + 1, 1u, 0);
ExFreePoolWithTag(v4[1].Buffer, 0);
ExFreePoolWithTag(v4, 0);
}
ExReleaseResourceLite(&PnpRegistryDeviceResource);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}Referenced by:
IoReportDetectedDevice
PipProcessStartPhase2