private static void SetupInvocationTracker(InvocationTracker <SyntaxKind> tracker, TrackerInput input)
        {
            const int parameterCount = 2;

            tracker.Track(input,
                          tracker.MatchMethod(new MemberDescriptor(KnownType.System_Collections_Generic_IDictionary_TKey_TValue, "Add")),
                          tracker.MethodHasParameters(parameterCount),
                          c => IsFirstArgumentAccessControlAllowOrigin((InvocationExpressionSyntax)c.Node, c.SemanticModel) &&
                          IsSecondArgumentStarString((InvocationExpressionSyntax)c.Node, c.SemanticModel),
                          tracker.IsIHeadersDictionary());

            tracker.Track(input,
                          tracker.MatchMethod(new MemberDescriptor(KnownType.Microsoft_AspNetCore_Http_HeaderDictionaryExtensions, "Append"),
                                              new MemberDescriptor(KnownType.System_Web_HttpResponse, "AppendHeader"),
                                              new MemberDescriptor(KnownType.System_Web_HttpResponseBase, "AddHeader"),
                                              new MemberDescriptor(KnownType.System_Collections_Specialized_NameValueCollection, "Add"),
                                              new MemberDescriptor(KnownType.System_Net_Http_Headers_HttpHeaders, "Add")),
                          tracker.MethodHasParameters(parameterCount),
                          c => IsFirstArgumentAccessControlAllowOrigin((InvocationExpressionSyntax)c.Node, c.SemanticModel) &&
                          IsSecondArgumentStarString((InvocationExpressionSyntax)c.Node, c.SemanticModel));

            tracker.Track(input,
                          tracker.MatchMethod(new MemberDescriptor(KnownType.Microsoft_AspNetCore_Cors_Infrastructure_CorsPolicyBuilder, "WithOrigins")),
                          c => ContainsStar(((InvocationExpressionSyntax)c.Node).ArgumentList.Arguments.Select(a => a.Expression), c.SemanticModel));

            tracker.Track(input, tracker.MatchMethod(new MemberDescriptor(KnownType.Microsoft_AspNetCore_Cors_Infrastructure_CorsPolicyBuilder, "AllowAnyOrigin")));
        }
Exemple #2
0
        protected override void Initialize(SonarAnalysisContext context)
        {
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(
                                        new MemberDescriptor(KnownType.Microsoft_EntityFrameworkCore_RelationalQueryableExtensions, "FromSql")),
                                    Conditions.And(
                                        MethodHasRawSqlQueryParameter(),
                                        Conditions.Or(
                                            Conditions.Or(ArgumentAtIndexIsConcat(0), ArgumentAtIndexIsFormat(0), ArgumentAtIndexIsInterpolated(0)),
                                            Conditions.Or(ArgumentAtIndexIsConcat(1), ArgumentAtIndexIsFormat(1), ArgumentAtIndexIsInterpolated(1))
                                            )
                                        ),
                                    Conditions.ExceptWhen(
                                        InvocationTracker.ArgumentAtIndexIsConstant(0)));

            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(
                                        new MemberDescriptor(KnownType.Microsoft_EntityFrameworkCore_RelationalDatabaseFacadeExtensions, "ExecuteSqlCommandAsync"),
                                        new MemberDescriptor(KnownType.Microsoft_EntityFrameworkCore_RelationalDatabaseFacadeExtensions, "ExecuteSqlCommand")),
                                    Conditions.And(
                                        MethodHasRawSqlQueryParameter(),
                                        Conditions.Or(
                                            Conditions.Or(ArgumentAtIndexIsConcat(0), ArgumentAtIndexIsFormat(0), ArgumentAtIndexIsInterpolated(0)),
                                            Conditions.Or(ArgumentAtIndexIsConcat(1), ArgumentAtIndexIsFormat(1), ArgumentAtIndexIsInterpolated(1))
                                            )
                                        ),
                                    Conditions.ExceptWhen(
                                        InvocationTracker.ArgumentAtIndexIsConstant(0)));

            PropertyAccessTracker.Track(context,
                                        PropertyAccessTracker.MatchProperty(
                                            new MemberDescriptor(KnownType.System_Data_Odbc_OdbcCommand, "CommandText"),
                                            new MemberDescriptor(KnownType.System_Data_OracleClient_OracleCommand, "CommandText"),
                                            new MemberDescriptor(KnownType.System_Data_SqlClient_SqlCommand, "CommandText"),
                                            new MemberDescriptor(KnownType.System_Data_SqlServerCe_SqlCeCommand, "CommandText")),
                                        PropertyAccessTracker.MatchSetter(),
                                        Conditions.Or(SetterIsConcat(), SetterIsFormat(), SetterIsInterpolation()),
                                        Conditions.ExceptWhen(
                                            PropertyAccessTracker.AssignedValueIsConstant()));

            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.MatchConstructor(
                                            KnownType.Microsoft_EntityFrameworkCore_RawSqlString,
                                            KnownType.System_Data_SqlClient_SqlCommand,
                                            KnownType.System_Data_SqlClient_SqlDataAdapter,
                                            KnownType.System_Data_Odbc_OdbcCommand,
                                            KnownType.System_Data_Odbc_OdbcDataAdapter,
                                            KnownType.System_Data_SqlServerCe_SqlCeCommand,
                                            KnownType.System_Data_SqlServerCe_SqlCeDataAdapter,
                                            KnownType.System_Data_OracleClient_OracleCommand,
                                            KnownType.System_Data_OracleClient_OracleDataAdapter),
                                        ObjectCreationTracker.ArgumentAtIndexIs(0, KnownType.System_String),
                                        Conditions.Or(FirstArgumentIsConcat(), FirstArgumentIsFormat(), FirstArgumentIsInterpolation()),
                                        Conditions.ExceptWhen(
                                            ObjectCreationTracker.ArgumentAtIndexIsConst(0)));
        }
        protected override void Initialize(SonarAnalysisContext context)
        {
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(
                                        new MemberDescriptor(KnownType.System_Text_RegularExpressions_Regex, "IsMatch"),
                                        new MemberDescriptor(KnownType.System_Text_RegularExpressions_Regex, "Match"),
                                        new MemberDescriptor(KnownType.System_Text_RegularExpressions_Regex, "Matches"),
                                        new MemberDescriptor(KnownType.System_Text_RegularExpressions_Regex, "Replace"),
                                        new MemberDescriptor(KnownType.System_Text_RegularExpressions_Regex, "Split")),
                                    InvocationTracker.MethodIsStatic());

            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.MatchConstructor(
                                            KnownType.System_Text_RegularExpressions_Regex));
        }
        protected override void Initialize(SonarAnalysisContext context)
        {
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(new MemberDescriptor(KnownType.System_Diagnostics_Process, "Start")),
                                    c => IsInvalid(FirstArgument(c)));

            PropertyAccessTracker.Track(context,
                                        PropertyAccessTracker.MatchProperty(new MemberDescriptor(KnownType.System_Diagnostics_ProcessStartInfo, "FileName")),
                                        PropertyAccessTracker.MatchSetter(),
                                        c => IsInvalid((string)PropertyAccessTracker.AssignedValue(c)));

            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.MatchConstructor(KnownType.System_Diagnostics_ProcessStartInfo),
                                        c => ObjectCreationTracker.ConstArgumentForParameter(c, "fileName") is string value && IsInvalid(value));
        }
        protected override void Initialize(SonarAnalysisContext context)
        {
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(
                                        new MemberDescriptor(KnownType.System_Console, nameof(Console.OpenStandardInput))));

            InvocationTracker.Track(context,
                                    WhenResultIsNotIgnored, // This is syntax-only check and we can execute it first
                                    InvocationTracker.MatchMethod(
                                        new MemberDescriptor(KnownType.System_Console, nameof(Console.Read)),
                                        new MemberDescriptor(KnownType.System_Console, nameof(Console.ReadKey)),
                                        new MemberDescriptor(KnownType.System_Console, nameof(Console.ReadLine))));

            PropertyAccessTracker.Track(context,
                                        PropertyAccessTracker.MatchProperty(
                                            new MemberDescriptor(KnownType.System_Console, nameof(Console.In))));
        }
        protected override void Initialize(SonarAnalysisContext context)
        {
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(new MemberDescriptor(KnownType.System_Diagnostics_Process, "Start")),
                                    Conditions.ExceptWhen(
                                        InvocationTracker.ArgumentAtIndexIs(0, KnownType.System_Diagnostics_ProcessStartInfo)),
                                    InvocationTracker.MethodHasParameters());

            PropertyAccessTracker.Track(context,
                                        PropertyAccessTracker.MatchProperty(
                                            new MemberDescriptor(KnownType.System_Diagnostics_ProcessStartInfo, "FileName")),
                                        PropertyAccessTracker.MatchSetter());

            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.MatchConstructor(KnownType.System_Diagnostics_ProcessStartInfo),
                                        ObjectCreationTracker.ArgumentAtIndexIs(0, KnownType.System_String));
        }
        protected override void Initialize(SonarAnalysisContext context)
        {
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(
                                        // "RSA" is the base class for all RSA algorithm implementations
                                        new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "Encrypt"),
                                        new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "EncryptValue"),
                                        new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "Decrypt"),
                                        new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "DecryptValue"),

                                        // RSA methods added in NET Core 2.1
                                        new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "TryEncrypt"),
                                        new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "TryDecrypt"),
                                        new MemberDescriptor(KnownType.System_Security_Cryptography_SymmetricAlgorithm, "CreateEncryptor"),
                                        new MemberDescriptor(KnownType.System_Security_Cryptography_SymmetricAlgorithm, "CreateDecryptor")));

            BaseTypeTracker.Track(context,
                                  BaseTypeTracker.MatchSubclassesOf(
                                      KnownType.System_Security_Cryptography_AsymmetricAlgorithm,
                                      KnownType.System_Security_Cryptography_SymmetricAlgorithm));
        }
        protected override void Initialize(SonarAnalysisContext context)
        {
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(
                                        new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "Encrypt"),
                                        new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "TryEncrypt")),
                                    Conditions.Or(
                                        InvocationTracker.ArgumentIsBoolConstant("fOAEP", false),
                                        HasPkcs1PaddingArgument()));

            // There exist no GCM mode with AesManaged, so any mode we set will be insecure. We do not raise
            // when inside an ObjectInitializerExpression, as the issue is already raised on the constructor
            PropertyAccessTracker.Track(context,
                                        PropertyAccessTracker.MatchProperty(
                                            new MemberDescriptor(KnownType.System_Security_Cryptography_AesManaged, "Mode")),
                                        PropertyAccessTracker.MatchSetter(),
                                        Conditions.ExceptWhen(IsInsideObjectInitializer()));

            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.MatchConstructor(KnownType.System_Security_Cryptography_AesManaged));
        }
        protected override void Initialize(SonarAnalysisContext context)
        {
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(invocationsForFirstTwoArguments),
                                    Conditions.And(
                                        MethodHasRawSqlQueryParameter(),
                                        Conditions.Or(ArgumentAtIndexIsTracked(0), ArgumentAtIndexIsTracked(1))
                                        ),
                                    Conditions.ExceptWhen(InvocationTracker.ArgumentAtIndexIsConstant(0)));

            TrackInvocations(context, invocationsForFirstArgument, FirstArgumentIndex);
            TrackInvocations(context, invocationsForSecondArgument, SecondArgumentIndex);

            PropertyAccessTracker.Track(context,
                                        PropertyAccessTracker.MatchProperty(properties),
                                        PropertyAccessTracker.MatchSetter(),
                                        c => IsTracked(GetSetValue(c), c),
                                        Conditions.ExceptWhen(PropertyAccessTracker.AssignedValueIsConstant()));

            TrackObjectCreation(context, constructorsForFirstArgument, FirstArgumentIndex);
            TrackObjectCreation(context, constructorsForSecondArgument, SecondArgumentIndex);
        }
Exemple #10
0
        protected override void Initialize(SonarAnalysisContext context)
        {
            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.MatchConstructor(
                                            KnownType.System_Security_Permissions_PrincipalPermission));

            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.WhenDerivesOrImplementsAny(
                                            KnownType.System_Security_Principal_IIdentity,
                                            KnownType.System_Security_Principal_IPrincipal));

            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(
                                        new MemberDescriptor(KnownType.System_Security_Principal_WindowsIdentity, "GetCurrent"),
                                        new MemberDescriptor(KnownType.System_IdentityModel_Tokens_SecurityTokenHandler, "ValidateToken"),
                                        new MemberDescriptor(KnownType.System_AppDomain, "SetPrincipalPolicy"),
                                        new MemberDescriptor(KnownType.System_AppDomain, "SetThreadPrincipal")));

            PropertyAccessTracker.Track(context,
                                        PropertyAccessTracker.MatchProperty(
                                            new MemberDescriptor(KnownType.System_Web_HttpContext, "User"),
                                            new MemberDescriptor(KnownType.System_Threading_Thread, "CurrentPrincipal")));

            MethodDeclarationTracker.Track(context,
                                           MethodDeclarationTracker.AnyParameterIsOfType(
                                               KnownType.System_Security_Principal_IIdentity,
                                               KnownType.System_Security_Principal_IPrincipal),
                                           MethodDeclarationTracker.IsOrdinaryMethod());

            MethodDeclarationTracker.Track(context,
                                           MethodDeclarationTracker.DecoratedWithAnyAttribute(
                                               KnownType.System_Security_Permissions_PrincipalPermissionAttribute));

            BaseTypeTracker.Track(context,
                                  BaseTypeTracker.MatchSubclassesOf(
                                      KnownType.System_Security_Principal_IIdentity,
                                      KnownType.System_Security_Principal_IPrincipal));
        }
Exemple #11
0
        protected override void Initialize(SonarAnalysisContext context)
        {
            // ASP.NET Core
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(
                                        new MemberDescriptor(KnownType.Microsoft_AspNetCore_Hosting_WebHostBuilderExtensions, "ConfigureLogging"),
                                        new MemberDescriptor(KnownType.Microsoft_Extensions_DependencyInjection_LoggingServiceCollectionExtensions, "AddLogging"),
                                        new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_ConsoleLoggerExtensions, "AddConsole"),
                                        new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_DebugLoggerFactoryExtensions, "AddDebug"),
                                        new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_EventLoggerFactoryExtensions, "AddEventLog"),
                                        new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_EventLoggerFactoryExtensions, "AddEventSourceLogger"),
                                        new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_EventSourceLoggerFactoryExtensions, "AddEventSourceLogger"),
                                        new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_AzureAppServicesLoggerFactoryExtensions, "AddAzureWebAppDiagnostics")),
                                    InvocationTracker.MethodIsExtension());

            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.WhenImplements(KnownType.Microsoft_Extensions_Logging_ILoggerFactory));

            // log4net
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(
                                        new MemberDescriptor(KnownType.log4net_Config_XmlConfigurator, "Configure"),
                                        new MemberDescriptor(KnownType.log4net_Config_XmlConfigurator, "ConfigureAndWatch"),
                                        new MemberDescriptor(KnownType.log4net_Config_DOMConfigurator, "Configure"),
                                        new MemberDescriptor(KnownType.log4net_Config_DOMConfigurator, "ConfigureAndWatch"),
                                        new MemberDescriptor(KnownType.log4net_Config_BasicConfigurator, "Configure")));

            // NLog
            PropertyAccessTracker.Track(context,
                                        PropertyAccessTracker.MatchSetter(),
                                        PropertyAccessTracker.MatchProperty(
                                            new MemberDescriptor(KnownType.NLog_LogManager, "Configuration")));

            // Serilog
            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.WhenDerivesFrom(KnownType.Serilog_LoggerConfiguration));
        }
 private void TrackInvocations(SonarAnalysisContext context, MemberDescriptor[] incovationsDescriptors, int argumentIndex) =>
 InvocationTracker.Track(context,
                         InvocationTracker.MatchMethod(incovationsDescriptors),
                         ArgumentAtIndexIsTracked(argumentIndex),
                         Conditions.ExceptWhen(InvocationTracker.ArgumentAtIndexIsConstant(argumentIndex)));
        protected override void Initialize(SonarAnalysisContext context)
        {
            InvocationTracker.Track(context,
                                    InvocationTracker.MatchMethod(
                                        new MemberDescriptor(KnownType.System_IO_File, "AppendAllLines"),
                                        new MemberDescriptor(KnownType.System_IO_File, "AppendAllText"),
                                        new MemberDescriptor(KnownType.System_IO_File, "AppendText"),
                                        new MemberDescriptor(KnownType.System_IO_File, "Copy"),
                                        new MemberDescriptor(KnownType.System_IO_File, "Create"),
                                        new MemberDescriptor(KnownType.System_IO_File, "CreateText"),
                                        new MemberDescriptor(KnownType.System_IO_File, "Decrypt"),
                                        new MemberDescriptor(KnownType.System_IO_File, "Delete"),
                                        new MemberDescriptor(KnownType.System_IO_File, "Encrypt"),
                                        new MemberDescriptor(KnownType.System_IO_File, "Exists"),
                                        new MemberDescriptor(KnownType.System_IO_File, "GetAccessControl"),
                                        new MemberDescriptor(KnownType.System_IO_File, "GetAttributes"),
                                        new MemberDescriptor(KnownType.System_IO_File, "GetCreationTime"),
                                        new MemberDescriptor(KnownType.System_IO_File, "GetCreationTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_File, "GetLastAccessTime"),
                                        new MemberDescriptor(KnownType.System_IO_File, "GetLastAccessTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_File, "GetLastWriteTime"),
                                        new MemberDescriptor(KnownType.System_IO_File, "GetLastWriteTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_File, "Move"),
                                        new MemberDescriptor(KnownType.System_IO_File, "Open"),
                                        new MemberDescriptor(KnownType.System_IO_File, "OpenRead"),
                                        new MemberDescriptor(KnownType.System_IO_File, "OpenText"),
                                        new MemberDescriptor(KnownType.System_IO_File, "OpenWrite"),
                                        new MemberDescriptor(KnownType.System_IO_File, "ReadAllBytes"),
                                        new MemberDescriptor(KnownType.System_IO_File, "ReadAllLines"),
                                        new MemberDescriptor(KnownType.System_IO_File, "ReadAllText"),
                                        new MemberDescriptor(KnownType.System_IO_File, "ReadLines"),
                                        new MemberDescriptor(KnownType.System_IO_File, "Replace"),
                                        new MemberDescriptor(KnownType.System_IO_File, "SetAccessControl"),
                                        new MemberDescriptor(KnownType.System_IO_File, "SetAttributes"),
                                        new MemberDescriptor(KnownType.System_IO_File, "SetCreationTime"),
                                        new MemberDescriptor(KnownType.System_IO_File, "SetCreationTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_File, "SetLastAccessTime"),
                                        new MemberDescriptor(KnownType.System_IO_File, "SetLastAccessTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_File, "SetLastWriteTime"),
                                        new MemberDescriptor(KnownType.System_IO_File, "SetLastWriteTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_File, "WriteAllBytes"),
                                        new MemberDescriptor(KnownType.System_IO_File, "WriteAllLines"),
                                        new MemberDescriptor(KnownType.System_IO_File, "WriteAllText"),

                                        new MemberDescriptor(KnownType.System_IO_Directory, "CreateDirectory"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "Delete"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "EnumerateDirectories"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "EnumerateFiles"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "EnumerateFileSystemEntries"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "Exists"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetAccessControl"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetCreationTime"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetCreationTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetCurrentDirectory"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetDirectories"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetDirectoryRoot"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetFiles"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetFileSystemEntries"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetLastAccessTime"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetLastAccessTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetLastWriteTime"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetLastWriteTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetLogicalDrives"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "GetParent"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "Move"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "SetAccessControl"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "SetCreationTime"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "SetCreationTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "SetCurrentDirectory"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "SetLastAccessTime"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "SetLastAccessTimeUtc"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "SetLastWriteTime"),
                                        new MemberDescriptor(KnownType.System_IO_Directory, "SetLastWriteTimeUtc"),

                                        new MemberDescriptor(KnownType.System_IO_Path, "GetTempFileName"),
                                        new MemberDescriptor(KnownType.System_IO_Path, "GetTempPath"),

                                        new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetEnumerator"),
                                        new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetMachineStoreForApplication"),
                                        new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetMachineStoreForAssembly"),
                                        new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetMachineStoreForDomain"),
                                        new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetStore"),
                                        new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetUserStoreForApplication"),
                                        new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetUserStoreForAssembly"),
                                        new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetUserStoreForDomain"),
                                        new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetUserStoreForSite"),
                                        new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "Remove"),

                                        new MemberDescriptor(KnownType.System_IO_MemoryMappedFiles_MemoryMappedFile, "CreateFromFile"),
                                        new MemberDescriptor(KnownType.System_IO_MemoryMappedFiles_MemoryMappedFile, "CreateNew"),
                                        new MemberDescriptor(KnownType.System_IO_MemoryMappedFiles_MemoryMappedFile, "CreateOrOpen"),
                                        new MemberDescriptor(KnownType.System_IO_MemoryMappedFiles_MemoryMappedFile, "OpenExisting"),

                                        new MemberDescriptor(KnownType.System_IO_Compression_ZipFile, "CreateFromDirectory"),
                                        new MemberDescriptor(KnownType.System_IO_Compression_ZipFile, "ExtractToDirectory"),
                                        new MemberDescriptor(KnownType.System_IO_Compression_ZipFile, "Open"),
                                        new MemberDescriptor(KnownType.System_IO_Compression_ZipFile, "OpenRead")));

            InvocationTracker.Track(context,
                                    InvocationTracker.MethodNameIs("CreateFile"),
                                    InvocationTracker.MethodIsExtern());

            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.MatchConstructor(
                                            KnownType.System_IO_StreamWriter,
                                            KnownType.System_IO_StreamReader,
                                            KnownType.System_Security_AccessControl_FileSecurity),
                                        ObjectCreationTracker.ArgumentAtIndexIs(0, KnownType.System_String));

            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.MatchConstructor(
                                            KnownType.System_IO_FileInfo,
                                            KnownType.System_IO_DirectoryInfo,
                                            KnownType.System_IO_IsolatedStorage_IsolatedStorageFileStream,
                                            KnownType.Microsoft_Win32_SafeHandles_SafeFileHandle));

            ObjectCreationTracker.Track(context,
                                        ObjectCreationTracker.MatchConstructor(
                                            KnownType.System_IO_FileStream),
                                        Conditions.ExceptWhen(
                                            ObjectCreationTracker.ArgumentAtIndexIs(0, KnownType.Microsoft_Win32_SafeHandles_SafeFileHandle)));
        }