LdrpAccessResourceData
NTSTATUS __stdcall LdrpAccessResourceData(
VOID *DllHandle,
const _IMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry,
VOID **Address,
UINT64 *Size){
void *v7;
unsigned __int64 v8;
const _IMAGE_RESOURCE_DATA_ENTRY *v9;
VOID *v10;
NTSTATUS result;
char *v12;
UINT64 ImageSize;
__int64 AlternateSize[4];
UINT64 v15;
AlternateSize[0] = 0i64;
ImageSize = 0i64;
v7 = DllHandle;
if( !DllHandle || !ResourceDataEntry )
return -1073741811;
if( *(&PnpReplaceEvent + 6682) == 1 )
{
v8 = (unsigned __int64)DllHandle & 0xFFFFFFFFFFFFFFFCui64;
v9 = (const _IMAGE_RESOURCE_DATA_ENTRY *)RtlImageDirectoryEntryToData(DllHandle, 1u, 2u, &v15);
if( !v9 )
return -1073741687;
if( ResourceDataEntry < v9 )
goto LABEL_10;
result = LdrpGetImageSize(v7, &ImageSize);
if( result == -1073741701 )
return result;
if( ImageSize
&& ((unsigned __int64)ResourceDataEntry < v8 || (unsigned __int64)ResourceDataEntry >= v8 + ImageSize) )
{
LABEL_10:
LODWORD(v12) = LdrpGetAlternateResourceModuleHandleEx(
v7,
v10,
(_IMAGE_RESOURCE_DATA_ENTRY *)ResourceDataEntry,
(UINT64 *)AlternateSize,
ImageSize,
AlternateSize[0],
AlternateSize[1],
AlternateSize[2]);
if( (unsigned __int64)(v12 - 1) <= 0xFFFFFFFFFFFFFFFDui64 )
v7 = v12;
}
}
return LdrpAccessResourceDataNoMultipleLanguage(v7, (_IMAGE_RESOURCE_DATA_ENTRY *)ResourceDataEntry, Address, Size);
}Referenced by:
LdrAccessResource
RtlFindMessage
RtlLoadString