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