// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; using System.Runtime.InteropServices; namespace Microsoft.ClearScript.Util { [StructLayout(LayoutKind.Sequential)] internal struct SystemInfo { public ushort ProcessorArchitecture; public ushort Reserved; public uint PageSize; public IntPtr MinimumApplicationAddress; public IntPtr MaximumApplicationAddress; public IntPtr ActiveProcessorMask; public uint NumberOfProcessors; public uint ProcessorType; public uint AllocationGranularity; public ushort ProcessorLevel; public ushort ProcessorRevision; } internal static class NativeMethods { [DllImport("kernel32", ExactSpelling = true, SetLastError = true)] public static extern IntPtr LoadLibraryW( [In] [MarshalAs(UnmanagedType.LPWStr)] string path ); [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool FreeLibrary( [In] IntPtr hLibrary ); [DllImport("ole32.dll", ExactSpelling = true)] public static extern uint CLSIDFromProgID( [In] [MarshalAs(UnmanagedType.LPWStr)] string progID, [Out] out Guid clsid ); [DllImport("ole32.dll", ExactSpelling = true)] public static extern uint CoCreateInstance( [In] ref Guid clsid, [In] IntPtr pOuter, [In] uint clsContext, [In] ref Guid iid, [Out] out IntPtr pInterface ); [DllImport("oleaut32.dll", ExactSpelling = true)] public static extern void VariantInit( [In] IntPtr pVariant ); [DllImport("oleaut32.dll", ExactSpelling = true)] public static extern uint VariantClear( [In] IntPtr pVariant ); [DllImport("kernel32.dll", SetLastError = true)] public static extern IntPtr HeapCreate( [In] uint options, [In] UIntPtr initialSize, [In] UIntPtr maximumSize ); [DllImport("kernel32.dll", SetLastError = false)] public static extern IntPtr HeapAlloc( [In] IntPtr hHeap, [In] uint flags, [In] UIntPtr size ); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool HeapFree( [In] IntPtr hHeap, [In] uint flags, [In] IntPtr pBlock ); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool HeapDestroy( [In] IntPtr hHeap ); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool VirtualProtect( [In] IntPtr pBlock, [In] UIntPtr size, [In] uint newProtect, [Out] out uint oldProtect ); [DllImport("kernel32.dll", SetLastError = false)] public static extern void GetSystemInfo( [Out] out SystemInfo info ); [DllImport("kernel32.dll")] public static extern void GetNativeSystemInfo( [Out] out SystemInfo info ); } }