PiDevCfgCopyDeviceKeys

NTSTATUS __stdcall PiDevCfgCopyDeviceKeys(
        VOID *SourceKeyHandle,
        VOID *TargetKeyHandle,
        UINT64 Flags,
        PI_DEVCFG_RESOLVE_CONTEXT *ResolveContext){
  int v6; 
  int v7; 
  int v8; 
  INT64 v10; 
  INT64 v11; 
  INT64 v12; 
  INT64 v13; 
  UINT64 Flagsa; 
  VOID *SourceKeyHandlea; 
  VOID *TargetKeyHandlea; 
  VOID *KeySecurityDescriptor; 
  _LIST_ENTRY CopyKeyStack; 

  KeySecurityDescriptor = 0i64;
  SourceKeyHandlea = 0i64;
  TargetKeyHandlea = 0i64;
  CopyKeyStack.Blink = &CopyKeyStack;
  LODWORD(Flagsa) = 1;
  CopyKeyStack.Flink = &CopyKeyStack;
  if( PiDevCfgGetKeySecurityDescriptor(
         SourceKeyHandle,
         &KeySecurityDescriptor,
         Flags,
         (INT64)ResolveContext,
         v10,
         v11,
         v12,
         v13) >= 0 )
  {
    ZwSetSecurityObject((UINT64)TargetKeyHandle, 4ui64, (INT64)KeySecurityDescriptor);
    ExFreePoolWithTag(KeySecurityDescriptor, 0);
  }
  PiDevCfgPushCopyKeyEntry(&CopyKeyStack, SourceKeyHandle, TargetKeyHandle, 1ui64);
  v7 = v6;
  while( v7 >= 0 )
  {
    if( !PiDevCfgPopCopyKeyEntry(&CopyKeyStack, &SourceKeyHandlea, &TargetKeyHandlea, &Flagsa) )
      break;
    v8 = Flagsa;
    v7 = PiDevCfgCopyDeviceKey((_HANDLE)SourceKeyHandlea, (INT64)TargetKeyHandlea, 0i64, 0i64);
    if( (v8 & 0x40000000) != 0 )
    {
      ZwClose((_HANDLE)SourceKeyHandlea);
      ZwClose((_HANDLE)TargetKeyHandlea);
    }
  }
  while( PiDevCfgPopCopyKeyEntry(&CopyKeyStack, &SourceKeyHandlea, &TargetKeyHandlea, &Flagsa) )
  {
    if( (Flagsa & 0x40000000) != 0 )
    {
      ZwClose((_HANDLE)SourceKeyHandlea);
      ZwClose((_HANDLE)TargetKeyHandlea);
    }
  }
  return v7;
}

Referenced by:

PiDevCfgConfigureDeviceInterface
PiDevCfgConfigureDeviceKeyCallback
PiDevCfgResetDeviceKeyCallback
PipCommitPendingOsExtensionResource
PipCommitPendingService