PopWakeSourceIsParent

UINT8 __stdcall PopWakeSourceIsParent(_DEVICE_NODE *WakeSourceDevNode, _UNICODE_STRING *ChildInstancePath){
  _DEVICE_NODE *Child; 
  UINT8 v3; 
  _DEVICE_NODE *v6; 
  _DEVICE_NODE *Sibling; 
  _DEVICE_NODE *Parent; 

  Child = WakeSourceDevNode->Child;
  v3 = 0;
  if( Child )
  {
    do
    {
      v6 = Child;
      Child = Child->Child;
    }
    while( Child );
    while( v6->InstancePath.Length != ChildInstancePath->Length
         || wcsncmp(v6->InstancePath.Buffer, ChildInstancePath->Buffer, (unsigned __int64)v6->InstancePath.Length >> 1) )
    {
      Sibling = v6->Sibling;
      if( v6->Sibling )
      {
        do
        {
          v6 = Sibling;
          Sibling = Sibling->Child;
        }
        while( Sibling );
      }
      else
      {
        Parent = v6->Parent;
        v6 = 0i64;
        if( Parent != (_DEVICE_NODE *)*(&PnpReplaceEvent + 831) )
          v6 = Parent;
        if( v6 == WakeSourceDevNode )
          v6 = 0i64;
      }
      if( !v6 )
        return v3;
    }
    return 1;
  }
  return v3;
}

Referenced by:

PopProcessWakeSourceWork