private static void AddOSInformation(NativeCodeAnalyzer analyzer, OsVersion os) { switch (os) { case OsVersion.WindowsXP: analyzer.AddInitialMacro(new Macro("WINVER", "0x0501")); analyzer.AddInitialMacro(new Macro("_WIN32_WINNT", "0x0501")); break; case OsVersion.Windows2000: analyzer.AddInitialMacro(new Macro("WINVER", "0x0500")); analyzer.AddInitialMacro(new Macro("_WIN32_WINNT", "0x0500")); break; case OsVersion.Windows2003: analyzer.AddInitialMacro(new Macro("WINVER", "0x0502")); analyzer.AddInitialMacro(new Macro("_WIN32_WINNT", "0x0502")); break; case OsVersion.WindowsVista: analyzer.AddInitialMacro(new Macro("WINVER", "0x0600")); analyzer.AddInitialMacro(new Macro("_WIN32_WINNT", "0x0600")); break; default: ThrowInvalidEnumValue(os); break; } }
private static void AddCommonMacros(NativeCodeAnalyzer analyzer) { // MCS Version analyzer.AddInitialMacro(new Macro("_MSC_VER", "9999")); analyzer.AddInitialMacro(new Macro("_MSC_FULL_VER", "99999999")); // Make sure that SAL is imported analyzer.AddInitialMacro(new Macro("_PREFAST_", string.Empty)); }
/// <summary> /// Sometimes you want to parse out a snippet of code without doing the full windows /// parse. In this case you'll need to have certain Macros already defined since /// they are defined at the begining of the windows header files. This will add /// in all of those macros /// </summary> /// <param name="osVersion"></param> /// <returns></returns> /// <remarks></remarks> public static NativeCodeAnalyzer CreateForMiniParse(OsVersion osVersion, IEnumerable <Macro> initialMacroList) { NativeCodeAnalyzer analyzer = Create(osVersion); Debug.Assert(analyzer.IncludeInitialMacrosInResult); // Should be the default analyzer.IncludeInitialMacrosInResult = false; foreach (Macro m in initialMacroList) { analyzer.AddInitialMacro(m); } return(analyzer); }
/// <summary> /// This will create an analyzer for parsing out a full header file /// </summary> /// <param name="osVersion"></param> /// <returns></returns> /// <remarks></remarks> public static NativeCodeAnalyzer Create(OsVersion osVersion) { NativeCodeAnalyzer analyzer = new NativeCodeAnalyzer(); Debug.Assert(analyzer.IncludeInitialMacrosInResult); // Should be the default // Ignore 64 bit settings. 64 bit types are emitted as SysInt or IntPtr analyzer.AddInitialMacro(new Macro("__w64", string.Empty)); analyzer.AddInitialMacro(new Macro("_X86_", string.Empty)); analyzer.AddInitialMacro(new Macro("_WIN32", string.Empty)); analyzer.AddInitialMacro(new Macro("WINAPI", "__winapi", true)); analyzer.AddInitialMacro(new Macro("UNICODE", "1")); analyzer.AddInitialMacro(new Macro("__STDC__", "1")); // Add the operating system macros AddOSInformation(analyzer, osVersion); // Common information AddCommonMacros(analyzer); return(analyzer); }