public AnalysisApplicability CanAnalyze(BinaryAnalyzerContext context, out string reasonForNotAnalyzing) { PE portableExecutable = context.PE; AnalysisApplicability result = AnalysisApplicability.NotApplicableToSpecifiedTarget; reasonForNotAnalyzing = MetadataConditions.ImageIsKernelModeBinary; if (portableExecutable.IsKernelMode) { return(result); } reasonForNotAnalyzing = MetadataConditions.ImageIsResourceOnlyBinary; if (portableExecutable.IsResourceOnly) { return(result); } reasonForNotAnalyzing = MetadataConditions.ImageIsILOnlyManagedAssembly; if (portableExecutable.IsILOnly) { return(result); } if (portableExecutable.LinkerVersion < MinimumSupportedLinkerVersion) { reasonForNotAnalyzing = RuleUtilities.BuildObsoleteToolsMessage( portableExecutable.LinkerVersion, MinimumSupportedLinkerVersion); return(result); } return(AnalysisApplicability.ApplicableToSpecifiedTarget); }