File: System\Caching\UnsafeNativeMethods.cs
Project: ndp\fx\src\Caching\System.Runtime.Caching.csproj (System.Runtime.Caching)
// <copyright file="UnsafeNativeMethods.cs" company="Microsoft">
//   Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
// </copyright>
using System;
using System.Collections;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
 
namespace System.Runtime.Caching {
    [SuppressUnmanagedCodeSecurity]
    [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage", Justification = "Grandfathered suppression from original caching code checkin")]
    [SecurityCritical]
    internal static class UnsafeNativeMethods {
        private const string KERNEL32 = "KERNEL32.DLL";
        private const string ADVAPI32 = "ADVAPI32.DLL";
 
        /*
         * KERNEL32.DLL
         */
 
        [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage", Justification = "Grandfathered suppression from original caching code checkin")]
        [DllImport(KERNEL32, CharSet=CharSet.Unicode)]
        internal extern static int GetModuleFileName(IntPtr module, StringBuilder filename, int size);
 
        [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage", Justification = "Grandfathered suppression from original caching code checkin")]
        [DllImport(KERNEL32, CharSet=CharSet.Unicode)]
        internal extern static int GlobalMemoryStatusEx(ref MEMORYSTATUSEX memoryStatusEx);
 
        /*
         * ADVAPI32.DLL
         */
 
        [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage", Justification = "Grandfathered suppression from original caching code checkin")]
        [DllImport(ADVAPI32), ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
        internal static extern int RegCloseKey(IntPtr hKey);
    }
 
    [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
    internal struct MEMORYSTATUSEX {
        internal int dwLength;
        internal int dwMemoryLoad;
        internal long ullTotalPhys;
        internal long ullAvailPhys;
        internal long ullTotalPageFile;
        internal long ullAvailPageFile;
        internal long ullTotalVirtual;
        internal long ullAvailVirtual;
        internal long ullAvailExtendedVirtual;
        internal  void Init() {
            dwLength = Marshal.SizeOf(typeof(MEMORYSTATUSEX));
        }
    }
}