PiDrvDbLoadHive
NTSTATUS __stdcall PiDrvDbLoadHive(_UNICODE_STRING *HiveKeyPath, _UNICODE_STRING *HiveFileName, VOID **RootKeyHandle){
VOID **v3;
VOID **v4;
int v5;
INT64 v6;
INT64 v8;
UINT64 v9;
INT64 v10;
INT64 v11;
INT64 v12;
_OBJECT_ATTRIBUTES TargetKey;
_OBJECT_ATTRIBUTES SourceFile;
v4 = v3;
*v3 = 0i64;
LODWORD(v9) = 0;
LODWORD(RootKeyHandle) = (unsigned int)RootKeyHandle | 0x80;
*(_OWORD *)&TargetKey.Length = 0x30ui64;
*(_OWORD *)&SourceFile.Length = 0x30ui64;
TargetKey.ObjectName = HiveKeyPath;
SourceFile.ObjectName = HiveFileName;
*(_QWORD *)&TargetKey.Attributes = 576i64;
*(_OWORD *)&TargetKey.SecurityDescriptor = 0i64;
*(_QWORD *)&SourceFile.Attributes = 576i64;
*(_OWORD *)&SourceFile.SecurityDescriptor = 0i64;
v5 = ZwLoadKeyEx(&TargetKey, &SourceFile, (UINT64)RootKeyHandle, 0i64, 0i64, v9, 0i64, 0i64);
if( v5 >= 0 )
{
v5 = ZwOpenKey(v4, 0x2000000ui64, &TargetKey, v6, v8, v10, v11, v12);
if( v5 < 0 )
ZwUnloadKey2(&TargetKey, 0i64);
}
return v5;
}Referenced by:
PiDrvDbLoadNodeWorkerCallback
PiDrvDbSetupNodeHive