using System; using System.IO; using System.Runtime.InteropServices; namespace Apewer.Internals.Interop { [System.Security.SecuritySafeCritical] class Kernel32 { /// <summary></summary> /// <param name="hObject"></param> /// <returns></returns> [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] public static extern int CloseHandle(int hObject); /// <summary>关闭内核对象句柄。</summary> [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool CloseHandle(IntPtr handle); /// <summary>打开要映射的文件。</summary> /// <param name="lpFileName"></param> /// <param name="dwDesiredAccess"></param> /// <param name="dwShareMode"></param> /// <param name="securityAttrs"></param> /// <param name="dwCreationDisposition"></param> /// <param name="dwFlagsAndAttributes"></param> /// <param name="hTemplateFile"></param> /// <returns></returns> [DllImport("kernel32.dll")] public static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, FileShare dwShareMode, IntPtr securityAttrs, FileMode dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile); /// <summary>内存映射文件句柄。</summary> /// <param name="hFile"></param> /// <param name="lpFileMappingAttributes"></param> /// <param name="flProtect"></param> /// <param name="dwMaximumSizeHigh"></param> /// <param name="dwMaximumSizeLow"></param> /// <param name="lpName"></param> /// <returns></returns> [DllImport("kernel32.dll")] public static extern IntPtr CreateFileMapping(IntPtr hFile, IntPtr lpFileMappingAttributes, uint flProtect, uint dwMaximumSizeHigh, uint dwMaximumSizeLow, string lpName); /// <summary></summary> /// <param name="lpMutexAttributes"></param> /// <param name="bInitialOwner"></param> /// <param name="lpName"></param> /// <returns></returns> [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] public static extern IntPtr CreateMutex(IntPtr lpMutexAttributes, int bInitialOwner, string lpName); /// <summary></summary> /// <param name="lpApplicationName"></param> /// <param name="lpCommandLine"></param> /// <param name="lpProcessAttributes"></param> /// <param name="lpThreadAttributes"></param> /// <param name="bInheritHandles"></param> /// <param name="dwCreationFlags"></param> /// <param name="lpEnvironment"></param> /// <param name="lpCurrentDirectory"></param> /// <param name="lpStartupInfo"></param> /// <param name="lpProcessInformation"></param> /// <returns></returns> [DllImport("kernel32.dll")] public static extern bool CreateProcess(string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref StartupInfo lpStartupInfo, ref ProcessInformation lpProcessInformation); /// <summary></summary> /// <param name="hProcess"></param> /// <param name="lpExitCode"></param> /// <returns></returns> [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] public static extern int GetExitCodeProcess(int hProcess, out int lpExitCode); /// <summary>得到文件大小。</summary> /// <param name="hFile"></param> /// <param name="highSize"></param> /// <returns></returns> [DllImport("kernel32.dll", SetLastError = true)] public static extern uint GetFileSize(IntPtr hFile, out uint highSize); /// <summary></summary> /// <param name="lpModuleName"></param> /// <returns></returns> [DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern IntPtr GetModuleHandle(string lpModuleName); [DllImport("kernel32.dll", ExactSpelling = true)] public static extern IntPtr GetCurrentProcess(); /// <summary></summary> /// <param name="lpszLongPath"></param> /// <param name="lpszShortPath"></param> /// <param name="cchBuffer"></param> /// <returns></returns> [DllImport("kernel32")] public static extern int GetShortPathName(string lpszLongPath, string lpszShortPath, int cchBuffer); /// <summary>得到系统信息。</summary> /// <param name="lpSystemInfo"></param> [DllImport("kernel32.dll", SetLastError = true)] public static extern void GetSystemInfo(ref SystemInfo lpSystemInfo); /// <summary>内存映射文件。</summary> /// <param name="hFileMappingObject"></param> /// <param name="dwDesiredAccess"></param> /// <param name="dwFileOffsetHigh"></param> /// <param name="dwFileOffsetLow"></param> /// <param name="dwNumberOfBytesToMap"></param> /// <returns></returns> [DllImport("kernel32.dll")] public static extern IntPtr MapViewOfFile(IntPtr hFileMappingObject, uint dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, uint dwNumberOfBytesToMap); /// <summary></summary> /// <param name="lpExistingFileName"></param> /// <param name="lpNewFileName"></param> /// <returns></returns> [DllImport("kernel32", BestFitMapping = false, CharSet = CharSet.Auto, SetLastError = true, ThrowOnUnmappableChar = true)] public static extern int MoveFile([MarshalAs(UnmanagedType.LPTStr)] [In] string lpExistingFileName, [MarshalAs(UnmanagedType.LPTStr)] [In] string lpNewFileName); /// <summary></summary> /// <param name="dwDesiredAccess"></param> /// <param name="bInheritHandle"></param> /// <param name="lpName"></param> /// <returns></returns> [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] public static extern IntPtr OpenMutex(uint dwDesiredAccess, int bInheritHandle, string lpName); /// <summary></summary> /// <param name="dwDesiredAccess"></param> /// <param name="bInheritHandle"></param> /// <param name="dwProcessId"></param> /// <returns></returns> [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] public static extern int OpenProcess(int dwDesiredAccess, int bInheritHandle, int dwProcessId); /// <summary>Copies the contents of a source memory block to a destination memory block, and supports overlapping source and destination memory blocks.</summary> /// <param name="Destination">A pointer to the destination memory block to copy the bytes to.</param> /// <param name="Source">A pointer to the source memory block to copy the bytes from.</param> /// <param name="Length">The number of bytes to copy from the source to the destination.</param> [DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")] public static extern void RtlMoveMemory(ref double Destination, int Source, int Length); /// <summary></summary> /// <param name="millisecond"></param> /// <returns></returns> [DllImport("kernel32")] public static extern int Sleep(int millisecond); /// <summary>撤消文件映像。</summary> /// <param name="lpBaseAddress"></param> /// <returns></returns> [DllImport("kernel32.dll")] public static extern bool UnmapViewOfFile(IntPtr lpBaseAddress); } }