LdrpAccessResourceData
INT64 __fastcall LdrpAccessResourceData(
VOID *DllHandle,
const _IMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry,
VOID **Address,
UINT64 *Size){
void *v7;
unsigned __int64 v8;
unsigned __int64 v9;
IMAGE_RESOURCE_DATA_ENTRY *v10;
INT64 result;
char *v12;
UINT64 ImageSize;
IMAGE_RESOURCE_DATA_ENTRY ResourceDataEntrya[2];
UINT64 v15;
*(_QWORD *)&ResourceDataEntrya[0].OffsetToData = 0i64;
ImageSize = 0i64;
v7 = DllHandle;
if( !DllHandle || !ResourceDataEntry )
return 3221225485i64;
if( PnPBootDriversInitialized == 1 )
{
v8 = (unsigned __int64)DllHandle & 0xFFFFFFFFFFFFFFFCui64;
LODWORD(v9) = RtlImageDirectoryEntryToData(DllHandle, 1u, 2u, &v15);
if( !v9 )
return 3221225609i64;
if( (unsigned __int64)ResourceDataEntry < v9 )
goto LABEL_10;
LODWORD(result) = LdrpGetImageSize(v7, &ImageSize);
if( (_DWORD)result == -1073741701 )
return result;
if( ImageSize
&& ((unsigned __int64)ResourceDataEntry < v8 || (unsigned __int64)ResourceDataEntry >= v8 + ImageSize) )
{
LABEL_10:
LODWORD(v12) = LdrpGetAlternateResourceModuleHandleEx(
v7,
v10,
(UINT64 *)&ResourceDataEntry->OffsetToData,
ResourceDataEntrya,
ImageSize);
if( (unsigned __int64)(v12 - 1) <= 0xFFFFFFFFFFFFFFFDui64 )
v7 = v12;
}
}
LODWORD(result) = LdrpAccessResourceDataNoMultipleLanguage(
v7,
(_IMAGE_RESOURCE_DATA_ENTRY *)ResourceDataEntry,
Address,
Size);
return result;
}Referenced by:
LdrAccessResource
RtlFindMessage
RtlLoadString