PiDevCfgCopyDeviceKeys

INT64 __fastcall PiDevCfgCopyDeviceKeys(VOID *SourceKeyHandle, VOID *TargetKeyHandle, INT64 a3, INT64 a4){
  int v7; 
  int v8; 
  UINT64 v10; 
  UINT64 Flags; 
  HANDLE Handle; 
  HANDLE TargetKeyHandlea; 
  PSECURITY_DESCRIPTOR SecurityDescriptor; 
  LIST_ENTRY CopyKeyStack; 
  SecurityDescriptor = 0i64;
  Handle = 0i64;
  TargetKeyHandlea = 0i64;
  CopyKeyStack.Blink = &CopyKeyStack;
  LODWORD(Flags) = 1;
  CopyKeyStack.Flink = &CopyKeyStack;
  if( PiDevCfgGetKeySecurityDescriptor(SourceKeyHandle, &SecurityDescriptor) >= 0 )
  {
    ZwSetSecurityObject(TargetKeyHandle, 4ui64, SecurityDescriptor);
    ExFreePoolWithTag(SecurityDescriptor, 0);
  }
  v7 = PiDevCfgPushCopyKeyEntry(&CopyKeyStack, SourceKeyHandle, TargetKeyHandle, 1ui64);
  while( v7 >= 0 )
  {
    if( !PiDevCfgPopCopyKeyEntry(&CopyKeyStack, &Handle, &TargetKeyHandlea, &Flags) )
      break;
    v8 = Flags;
    LODWORD(v10) = Flags;
    v7 = PiDevCfgCopyDeviceKey(Handle, (INT64)TargetKeyHandlea, 0i64, 0i64, v10, &CopyKeyStack, a4);
    if( (v8 & 0x40000000) != 0 )
    {
      ZwClose(Handle);
      ZwClose(TargetKeyHandlea);
    }
  }
  while( PiDevCfgPopCopyKeyEntry(&CopyKeyStack, &Handle, &TargetKeyHandlea, &Flags) )
  {
    if( (Flags & 0x40000000) != 0 )
    {
      ZwClose(Handle);
      ZwClose(TargetKeyHandlea);
    }
  }
  return(unsigned int)v7;
}

Referenced by:

PiDevCfgConfigureDeviceInterface
PiDevCfgConfigureDeviceKeyCallback
PiDevCfgResetDeviceKeyCallback
PipCommitPendingOsExtensionResource
PipCommitPendingService