LdrpLoadResourceFromAlternativeModule
NTSTATUS __stdcall LdrpLoadResourceFromAlternativeModule(
PVOID DllHandle,
UINT64 *ResourceIdPath,
UINT64 ResourceIdPathLength,
UINT64 Flags,
PVOID *ResourceDirectoryOrData){
char v5;
UINT16 v7;
NTSTATUS result;
PVOID v9;
UINT64 Flagsa;
PVOID ReturnAlternateModule;
__int64 AlternateViewSize[2];
ReturnAlternateModule = 0i64;
v5 = Flags;
if( (unsigned int)(ResourceIdPathLength - 3) > 1 )
return -1073741583;
if( (Flags & 0x1000000) != 0 )
v7 = -3346;
else
v7 = *((_WORD *)ResourceIdPath + 8);
AlternateViewSize[0] = 0i64;
LODWORD(Flagsa) = Flags;
result = LdrLoadAlternateResourceModuleEx(DllHandle, v7, &ReturnAlternateModule, (UINT64 *)AlternateViewSize, Flagsa);
if( result >= 0 )
{
v9 = ReturnAlternateModule;
ResourceIdPath[2] = v7;
result = LdrpSearchResourceSection_U(v9, ResourceIdPath, 3ui64, 0x2000030ui64, ResourceDirectoryOrData);
if( (v5 & 0x40) != 0 && result >= 0 )
{
result = LdrpFindMessageInAlternateModule(
ReturnAlternateModule,
*ResourceDirectoryOrData,
0i64,
*((unsigned int *)ResourceIdPath + 6),
0);
if( result < 0 )
*ResourceDirectoryOrData = 0i64;
}
}
else if( result == -1073741766 || result == -1073741772 )
{
return -1073020927;
}
return result;
}Referenced by:
LdrpSearchResourceSection_U