LdrpGetRcConfig
PVOID __fastcall LdrpGetRcConfig(VOID *Module, INT64 a2, CHAR a3, CHAR a4){
__int64 v4;
void *v7;
PVOID v8;
NTSTATUS v10;
UINT64 Flags;
INT64 ErrorCode;
PVOID Address;
PVOID ResourceDirectoryOrData;
UINT64 Size;
UINT64 ResourceIdPath[3];
v4 = -1i64;
ResourceDirectoryOrData = 0i64;
Address = 0i64;
if( !a4 )
goto LABEL_5;
v7 = LdrpGetFromMUIMemCache(Module, 0, 0i64, 8ui64);
Address = v7;
v8 = v7;
if( v7 != (void *)-1i64 )
{
if( v7 )
return v8;
LABEL_5:
ResourceIdPath[1] = 1i64;
ResourceIdPath[0] = (UINT64)L"MUI";
ResourceIdPath[2] = 0i64;
v10 = LdrpSearchResourceSection_U(Module, ResourceIdPath, 3ui64, 0x2000030ui64, &ResourceDirectoryOrData);
if( v10 >= 0 )
{
v10 = LdrpAccessResourceDataNoMultipleLanguage(
Module,
(_IMAGE_RESOURCE_DATA_ENTRY *)ResourceDirectoryOrData,
&Address,
&Size);
if( v10 >= 0 )
{
v8 = Address;
if( *(_DWORD *)Address == -20054323 )
goto LABEL_8;
v10 = -1073741701;
}
}
v8 = 0i64;
LABEL_8:
if( a3 )
{
LODWORD(ErrorCode) = v10;
if( v8 )
v4 = (__int64)v8;
LODWORD(Flags) = 2;
LdrpSetAlternateResourceModuleHandle(Module, 0i64, 0i64, (VOID *)v4, 0, Flags, ErrorCode, 0i64, (UINT64)Address);
}
return v8;
}
return 0i64;
}Referenced by:
LdrIsResItemExist
LdrpVerifyAlternateResourceModuleEx