AslpFileQueryExportName

__int64 __fastcall AslpFileQueryExportName(NTSTRSAFE_PSTR pszDest, __int64 a2){
  int ImageNtHeader; 
  unsigned int v5; 
  const CHAR *v6; 
  UINT64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  CHAR *v10; 
  unsigned int v11; 
  int v13; 
  UINT64 Size; 
  __int64 v15; 
  LODWORD(Size) = 0;
  v15 = 0i64;
  *pszDest = 0;
  ImageNtHeader = AslpFileGetImageNtHeader(&v15, a2);
  v5 = ImageNtHeader;
  if( ImageNtHeader < 0 )
  {
    v6 = "AslpFileGetImageNtHeader failed [%x]";
    v7 = 3254i64;
LABEL_3:
    v13 = ImageNtHeader;
    AslLogCallPrintf(1ui64, "AslpFileQueryExportName", v7, v6, v13);
    return v5;
  }
  LODWORD(v8) = RtlImageDirectoryEntryToData(*(PVOID *)(a2 + 32), *(_BYTE *)(a2 + 59), 0, &Size);
  if( v8 && (unsigned int)Size >= 0x28 )
  {
    v9 = *(_QWORD *)(a2 + 32);
    if( v8 < v9 || v8 + 40 > *(_QWORD *)(a2 + 24) + v9 )
    {
      v5 = -1073741701;
      AslLogCallPrintf(
        2ui64,
        "AslpFileQueryExportName",
        0xCD5ui64,
        "Export directory pointer invalid(points to location outside file), invalid image format");
      return v5;
    }
    v10 = (CHAR *)AslpImageRvaToVa(v15, a2 + 8, *(_DWORD *)(v8 + 12));
    if( !v10 || (unsigned __int64)v10 >= *(_QWORD *)(a2 + 32) + *(_QWORD *)(a2 + 24) || !*v10 )
    {
      v5 = -1073741701;
      AslLogCallPrintf(2ui64, "AslpFileQueryExportName", 0xCDEui64, "Export directory invalid or invalid image format");
      return v5;
    }
    v11 = *(_DWORD *)(a2 + 32) + *(_DWORD *)(a2 + 24) - (_DWORD)v10;
    if( v11 > 0x100 )
      v11 = 256;
    ImageNtHeader = RtlStringCchCopyA(pszDest, v11, v10);
    v5 = ImageNtHeader;
    if( ImageNtHeader >= 0 )
      return 0;
    v6 = "RtlStringCchCopyA failed [%x]";
    v7 = 3306i64;
    goto LABEL_3;
  }
  v5 = -1073741275;
  if( v8 )
    AslLogCallPrintf(
      2ui64,
      "AslpFileQueryExportName",
      0xCC7ui64,
      "RtlImageDirectoryEntryToData returned ExportDirectory that was too small");
  return v5;
}

Referenced by:

AslpFileGetExportName