SafeNativeMethods.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / CompMod / Microsoft / Win32 / SafeNativeMethods.cs / 1 / SafeNativeMethods.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace Microsoft.Win32 { 
    using System.Runtime.InteropServices; 
    using System;
    using System.Diagnostics.CodeAnalysis; 
    using System.Security.Permissions;
    using System.Collections;
    using System.IO;
    using System.Text; 
    using System.Threading;
    using Microsoft.Win32.SafeHandles; 
    using System.Runtime.ConstrainedExecution; 
    using System.Runtime.Versioning;
    using System.Diagnostics; 

    [HostProtection(MayLeakOnAbort = true)]
    [System.Security.SuppressUnmanagedCodeSecurity]
    internal static class SafeNativeMethods { 

        public const int 
            FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100, 
            FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200,
            FORMAT_MESSAGE_FROM_STRING = 0x00000400, 
            FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000,
            FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000;

        public const int 
            MB_RIGHT = 0x00080000,
            MB_RTLREADING = 0x00100000; 
 
        [DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true, BestFitMapping=true)]
        [SuppressMessage("Microsoft.Security", "CA2101:SpecifyMarshalingForPInvokeStringArguments")] 
        [ResourceExposure(ResourceScope.None)]
        public static unsafe extern int FormatMessage(int dwFlags, SafeHandle lpSource, uint dwMessageId,
            int dwLanguageId, StringBuilder lpBuffer, int nSize, IntPtr[] arguments);
        [DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true, BestFitMapping=true)] 
        [ResourceExposure(ResourceScope.None)]
        public static extern int FormatMessage(int dwFlags, HandleRef lpSource, int dwMessageId, 
            int dwLanguageId, StringBuilder lpBuffer, int nSize, IntPtr arguments); 

        [DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, BestFitMapping=true)] 
        [ResourceExposure(ResourceScope.None)]
        public static extern void OutputDebugString(String message);

        [DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto, BestFitMapping=true)] 
        public static extern int MessageBox(HandleRef hWnd, string text, string caption, int type);
 
        [DllImport(ExternDll.Kernel32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)] 
        [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
        public static extern bool CloseHandle(IntPtr handle); 

        [DllImport(ExternDll.Kernel32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
        public static extern bool CloseHandle(HandleRef handle);
 
        [DllImport(ExternDll.Kernel32)]
        [ResourceExposure(ResourceScope.None)] 
        public static extern bool QueryPerformanceCounter(out long value); 

        [DllImport(ExternDll.Kernel32)] 
        [ResourceExposure(ResourceScope.None)]
        public static extern bool QueryPerformanceFrequency(out long value);

#if !FEATURE_PAL 
        public const int
            FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF, 
            FORMAT_MESSAGE_FROM_HMODULE = 0x00000800; 

        [DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto, BestFitMapping=false)] 
        [ResourceExposure(ResourceScope.Machine)]
        public static extern int RegisterWindowMessage(string msg);

#if DEBUG 
        // Used only from debug code to assert we're on the right thread
        // for calling certain Windows methods. 
        [DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto)] 
        [ResourceExposure(ResourceScope.Process)]
        public static extern int GetCurrentThreadId(); 

        [DllImport(ExternDll.User32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
        [ResourceExposure(ResourceScope.Process)]
        public static extern int GetWindowThreadProcessId(HandleRef hWnd, out int lpdwProcessId); 
#endif
 
        [DllImport(ExternDll.Gdi32, CharSet=System.Runtime.InteropServices.CharSet.Auto)] 
        public static extern bool GetTextMetrics(HandleRef hDC, [In, Out] NativeMethods.TEXTMETRIC tm);
 

        [DllImport(ExternDll.Gdi32, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
        [ResourceExposure(ResourceScope.Process)]
        public static extern IntPtr GetStockObject(int nIndex); 

        // file src\Services\Monitoring\system\Diagnosticts\SafeNativeMethods.cs 
        [DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Unicode, SetLastError=true)] 
        [ResourceExposure(ResourceScope.Process)]
        public static extern IntPtr LoadLibrary(string libFilename); 

        [DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Unicode, SetLastError=true)]
        [ResourceExposure(ResourceScope.Process)]
        public static extern bool FreeLibrary(HandleRef hModule); 

        [DllImport(ExternDll.Kernel32, CharSet=CharSet.Auto, BestFitMapping=false)] 
        [ResourceExposure(ResourceScope.None)] 
        public static extern bool GetComputerName(StringBuilder lpBuffer, int[] nSize);
 
        public static unsafe int InterlockedCompareExchange(IntPtr pDestination, int exchange, int compare)
        {
            return Interlocked.CompareExchange(ref *(int *)pDestination.ToPointer(), exchange, compare);
        } 

        [DllImport(ExternDll.PerfCounter, CharSet=System.Runtime.InteropServices.CharSet.Auto)] 
        public static unsafe extern int FormatFromRawValue( 
          uint dwCounterType,
          uint dwFormat, 
          ref long pTimeBase,
          NativeMethods.PDH_RAW_COUNTER pRawValue1,
          NativeMethods.PDH_RAW_COUNTER pRawValue2,
          NativeMethods.PDH_FMT_COUNTERVALUE pFmtValue 
        );
#endif // !FEATURE_PAL 
 
        [DllImport(ExternDll.Kernel32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
        [ResourceExposure(ResourceScope.Machine)] 
        internal static extern SafeWaitHandle CreateSemaphore(NativeMethods.SECURITY_ATTRIBUTES lpSecurityAttributes, int initialCount, int maximumCount, String name);

        [DllImport(ExternDll.Kernel32, SetLastError=true, CharSet=CharSet.Auto, BestFitMapping=false)]
        [ResourceExposure(ResourceScope.Machine)] 
        internal static extern SafeWaitHandle OpenSemaphore(/* DWORD */ int desiredAccess, bool inheritHandle, String name);
 
        [DllImport(ExternDll.Kernel32, SetLastError=true)] 
        [ResourceExposure(ResourceScope.Machine)]
        [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] 
        internal static extern bool ReleaseSemaphore(SafeWaitHandle handle, int releaseCount, out int previousCount);

        [StructLayout(LayoutKind.Sequential)]
        internal class PROCESS_INFORMATION { 
            // The handles in PROCESS_INFORMATION are initialized in unmanaged functions.
            // We can't use SafeHandle here because Interop doesn't support [out] SafeHandles in structures/classes yet. 
            public IntPtr               hProcess = IntPtr.Zero; 
            public IntPtr               hThread = IntPtr.Zero;
            public int                  dwProcessId = 0; 
            public int                  dwThreadId = 0;

            // Note this class makes no attempt to free the handles
            // Use InitialSetHandle to copy to handles into SafeHandles 

        } 
 
        /* The following code has been removed to prevent FXCOP violations.
           The code is left here incase it needs to be resurrected. 

        // From file src\services\timers\system\timers\safenativemethods.cs
        public delegate void TimerAPCProc(IntPtr argToCompletionRoutine, int timerLowValue, int timerHighValue);
        */ 
    }
    }
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK