You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

159 lines
7.6 KiB

  1. using System;
  2. using System.IO;
  3. using System.Runtime.InteropServices;
  4. namespace Apewer.Internals.Interop
  5. {
  6. [System.Security.SecuritySafeCritical]
  7. class Kernel32
  8. {
  9. /// <summary></summary>
  10. /// <param name="hObject"></param>
  11. /// <returns></returns>
  12. [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
  13. public static extern int CloseHandle(int hObject);
  14. /// <summary>关闭内核对象句柄。</summary>
  15. [DllImport("kernel32.dll", SetLastError = true)]
  16. [return: MarshalAs(UnmanagedType.Bool)]
  17. public static extern bool CloseHandle(IntPtr handle);
  18. /// <summary>打开要映射的文件。</summary>
  19. /// <param name="lpFileName"></param>
  20. /// <param name="dwDesiredAccess"></param>
  21. /// <param name="dwShareMode"></param>
  22. /// <param name="securityAttrs"></param>
  23. /// <param name="dwCreationDisposition"></param>
  24. /// <param name="dwFlagsAndAttributes"></param>
  25. /// <param name="hTemplateFile"></param>
  26. /// <returns></returns>
  27. [DllImport("kernel32.dll")]
  28. public static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, FileShare dwShareMode, IntPtr securityAttrs, FileMode dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);
  29. /// <summary>内存映射文件句柄。</summary>
  30. /// <param name="hFile"></param>
  31. /// <param name="lpFileMappingAttributes"></param>
  32. /// <param name="flProtect"></param>
  33. /// <param name="dwMaximumSizeHigh"></param>
  34. /// <param name="dwMaximumSizeLow"></param>
  35. /// <param name="lpName"></param>
  36. /// <returns></returns>
  37. [DllImport("kernel32.dll")]
  38. public static extern IntPtr CreateFileMapping(IntPtr hFile, IntPtr lpFileMappingAttributes, uint flProtect, uint dwMaximumSizeHigh, uint dwMaximumSizeLow, string lpName);
  39. /// <summary></summary>
  40. /// <param name="lpMutexAttributes"></param>
  41. /// <param name="bInitialOwner"></param>
  42. /// <param name="lpName"></param>
  43. /// <returns></returns>
  44. [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
  45. public static extern IntPtr CreateMutex(IntPtr lpMutexAttributes, int bInitialOwner, string lpName);
  46. /// <summary></summary>
  47. /// <param name="lpApplicationName"></param>
  48. /// <param name="lpCommandLine"></param>
  49. /// <param name="lpProcessAttributes"></param>
  50. /// <param name="lpThreadAttributes"></param>
  51. /// <param name="bInheritHandles"></param>
  52. /// <param name="dwCreationFlags"></param>
  53. /// <param name="lpEnvironment"></param>
  54. /// <param name="lpCurrentDirectory"></param>
  55. /// <param name="lpStartupInfo"></param>
  56. /// <param name="lpProcessInformation"></param>
  57. /// <returns></returns>
  58. [DllImport("kernel32.dll")]
  59. 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);
  60. /// <summary></summary>
  61. /// <param name="hProcess"></param>
  62. /// <param name="lpExitCode"></param>
  63. /// <returns></returns>
  64. [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
  65. public static extern int GetExitCodeProcess(int hProcess, out int lpExitCode);
  66. /// <summary>得到文件大小。</summary>
  67. /// <param name="hFile"></param>
  68. /// <param name="highSize"></param>
  69. /// <returns></returns>
  70. [DllImport("kernel32.dll", SetLastError = true)]
  71. public static extern uint GetFileSize(IntPtr hFile, out uint highSize);
  72. /// <summary></summary>
  73. /// <param name="lpModuleName"></param>
  74. /// <returns></returns>
  75. [DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
  76. public static extern IntPtr GetModuleHandle(string lpModuleName);
  77. [DllImport("kernel32.dll", ExactSpelling = true)]
  78. public static extern IntPtr GetCurrentProcess();
  79. /// <summary></summary>
  80. /// <param name="lpszLongPath"></param>
  81. /// <param name="lpszShortPath"></param>
  82. /// <param name="cchBuffer"></param>
  83. /// <returns></returns>
  84. [DllImport("kernel32")]
  85. public static extern int GetShortPathName(string lpszLongPath, string lpszShortPath, int cchBuffer);
  86. /// <summary>得到系统信息。</summary>
  87. /// <param name="lpSystemInfo"></param>
  88. [DllImport("kernel32.dll", SetLastError = true)]
  89. public static extern void GetSystemInfo(ref SystemInfo lpSystemInfo);
  90. /// <summary>内存映射文件。</summary>
  91. /// <param name="hFileMappingObject"></param>
  92. /// <param name="dwDesiredAccess"></param>
  93. /// <param name="dwFileOffsetHigh"></param>
  94. /// <param name="dwFileOffsetLow"></param>
  95. /// <param name="dwNumberOfBytesToMap"></param>
  96. /// <returns></returns>
  97. [DllImport("kernel32.dll")]
  98. public static extern IntPtr MapViewOfFile(IntPtr hFileMappingObject, uint dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, uint dwNumberOfBytesToMap);
  99. /// <summary></summary>
  100. /// <param name="lpExistingFileName"></param>
  101. /// <param name="lpNewFileName"></param>
  102. /// <returns></returns>
  103. [DllImport("kernel32", BestFitMapping = false, CharSet = CharSet.Auto, SetLastError = true, ThrowOnUnmappableChar = true)]
  104. public static extern int MoveFile([MarshalAs(UnmanagedType.LPTStr)] [In] string lpExistingFileName, [MarshalAs(UnmanagedType.LPTStr)] [In] string lpNewFileName);
  105. /// <summary></summary>
  106. /// <param name="dwDesiredAccess"></param>
  107. /// <param name="bInheritHandle"></param>
  108. /// <param name="lpName"></param>
  109. /// <returns></returns>
  110. [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
  111. public static extern IntPtr OpenMutex(uint dwDesiredAccess, int bInheritHandle, string lpName);
  112. /// <summary></summary>
  113. /// <param name="dwDesiredAccess"></param>
  114. /// <param name="bInheritHandle"></param>
  115. /// <param name="dwProcessId"></param>
  116. /// <returns></returns>
  117. [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
  118. public static extern int OpenProcess(int dwDesiredAccess, int bInheritHandle, int dwProcessId);
  119. /// <summary>Copies the contents of a source memory block to a destination memory block, and supports overlapping source and destination memory blocks.</summary>
  120. /// <param name="Destination">A pointer to the destination memory block to copy the bytes to.</param>
  121. /// <param name="Source">A pointer to the source memory block to copy the bytes from.</param>
  122. /// <param name="Length">The number of bytes to copy from the source to the destination.</param>
  123. [DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")]
  124. public static extern void RtlMoveMemory(ref double Destination, int Source, int Length);
  125. /// <summary></summary>
  126. /// <param name="millisecond"></param>
  127. /// <returns></returns>
  128. [DllImport("kernel32")]
  129. public static extern int Sleep(int millisecond);
  130. /// <summary>撤消文件映像。</summary>
  131. /// <param name="lpBaseAddress"></param>
  132. /// <returns></returns>
  133. [DllImport("kernel32.dll")]
  134. public static extern bool UnmapViewOfFile(IntPtr lpBaseAddress);
  135. }
  136. }