WinApi.cs
上传用户:szltgg
上传日期:2019-05-16
资源大小:604k
文件大小:17k
源码类别:

Telnet服务器

开发平台:

C#

  1. using System;
  2. using System.Runtime.InteropServices;
  3. namespace WalburySoftware
  4. {
  5. public class WinApi
  6. {
  7. #region imported constants
  8. public const UInt16 WSADESCRIPTION_LEN = 256;
  9. public const UInt16 WSASYS_STATUS_LEN  = 128;
  10. #region winsock error codes
  11. // * All Windows Sockets error constants are biased by WSABASEERR from
  12. // * the "normal"
  13. public const uint WSABASEERR  = 10000;
  14. // Windows Sockets definitions of regular Microsoft C error constants
  15. public const uint WSAEINTR  =  (WSABASEERR+4);
  16. public const uint WSAEBADF  =  (WSABASEERR+9);
  17. public const uint WSAEACCES =  (WSABASEERR+13);
  18. public const uint WSAEFAULT =  (WSABASEERR+14);
  19. public const uint WSAEINVAL =  (WSABASEERR+22);
  20. public const uint WSAEMFILE =  (WSABASEERR+24);
  21. //Windows Sockets definitions of regular Berkeley error constants
  22. public const uint WSAEWOULDBLOCK         = (WSABASEERR+35);
  23. public const uint WSAEINPROGRESS         = (WSABASEERR+36);
  24. public const uint WSAEALREADY            = (WSABASEERR+37);
  25. public const uint WSAENOTSOCK            = (WSABASEERR+38);
  26. public const uint WSAEDESTADDRREQ        = (WSABASEERR+39);
  27. public const uint WSAEMSGSIZE            = (WSABASEERR+40);
  28. public const uint WSAEPROTOTYPE          = (WSABASEERR+41);
  29. public const uint WSAENOPROTOOPT         = (WSABASEERR+42);
  30. public const uint WSAEPROTONOSUPPORT     = (WSABASEERR+43);
  31. public const uint WSAESOCKTNOSUPPORT     = (WSABASEERR+44);
  32. public const uint WSAEOPNOTSUPP          = (WSABASEERR+45);
  33. public const uint WSAEPFNOSUPPORT        = (WSABASEERR+46);
  34. public const uint WSAEAFNOSUPPORT        = (WSABASEERR+47);
  35. public const uint WSAEADDRINUSE          = (WSABASEERR+48);
  36. public const uint WSAEADDRNOTAVAIL       = (WSABASEERR+49);
  37. public const uint WSAENETDOWN            = (WSABASEERR+50);
  38. public const uint WSAENETUNREACH         = (WSABASEERR+51);
  39. public const uint WSAENETRESET           = (WSABASEERR+52);
  40. public const uint WSAECONNABORTED        = (WSABASEERR+53);
  41. public const uint WSAECONNRESET          = (WSABASEERR+54);
  42. public const uint WSAENOBUFS             = (WSABASEERR+55);
  43. public const uint WSAEISCONN             = (WSABASEERR+56);
  44. public const uint WSAENOTCONN            = (WSABASEERR+57);
  45. public const uint WSAESHUTDOWN           = (WSABASEERR+58);
  46. public const uint WSAETOOMANYREFS        = (WSABASEERR+59);
  47. public const uint WSAETIMEDOUT           = (WSABASEERR+60);
  48. public const uint WSAECONNREFUSED        = (WSABASEERR+61);
  49. public const uint WSAELOOP               = (WSABASEERR+62);
  50. public const uint WSAENAMETOOLONG        = (WSABASEERR+63);
  51. public const uint WSAEHOSTDOWN           = (WSABASEERR+64);
  52. public const uint WSAEHOSTUNREACH        = (WSABASEERR+65);
  53. public const uint WSAENOTEMPTY           = (WSABASEERR+66);
  54. public const uint WSAEPROCLIM            = (WSABASEERR+67);
  55. public const uint WSAEUSERS              = (WSABASEERR+68);
  56. public const uint WSAEDQUOT              = (WSABASEERR+69);
  57. public const uint WSAESTALE              = (WSABASEERR+70);
  58. public const uint WSAEREMOTE             = (WSABASEERR+71);
  59. //Extended Windows Sockets error constant definitions
  60. public const uint WSASYSNOTREADY         = (WSABASEERR+91);
  61. public const uint WSAVERNOTSUPPORTED     = (WSABASEERR+92);
  62. public const uint WSANOTINITIALISED      = (WSABASEERR+93);
  63. public const uint WSAEDISCON             = (WSABASEERR+101);
  64. public const uint WSAENOMORE             = (WSABASEERR+102);
  65. public const uint WSAECANCELLED          = (WSABASEERR+103);
  66. public const uint WSAEINVALIDPROCTABLE   = (WSABASEERR+104);
  67. public const uint WSAEINVALIDPROVIDER    = (WSABASEERR+105);
  68. public const uint WSAEPROVIDERFAILEDINIT = (WSABASEERR+106);
  69. public const uint WSASYSCALLFAILURE      = (WSABASEERR+107);
  70. public const uint WSASERVICE_NOT_FOUND   = (WSABASEERR+108);
  71. public const uint WSATYPE_NOT_FOUND      = (WSABASEERR+109);
  72. public const uint WSA_E_NO_MORE          = (WSABASEERR+110);
  73. public const uint WSA_E_CANCELLED        = (WSABASEERR+111);
  74. public const uint WSAEREFUSED            = (WSABASEERR+112);
  75. //Error return codes from gethostbyname() and gethostbyaddr()
  76. //(when using the resolver). Note that these errors are
  77. //retrieved via WSAGetLastError() and must therefore follow
  78. //the rules for avoiding clashes with error numbers from
  79. //specific implementations or language run-time systems.
  80. //For this reason the codes are based at WSABASEERR+1001.
  81. //Note also that [WSA]NO_ADDRESS is defined only for
  82. //compatibility purposes.
  83. //Authoritative Answer: Host not found
  84. public const uint WSAHOST_NOT_FOUND      = (WSABASEERR+1001);
  85. //Non-Authoritative: Host not found, or SERVERFAIL
  86. public const uint WSATRY_AGAIN           = (WSABASEERR+1002);
  87. //Non-recoverable errors, FORMERR, REFUSED, NOTIMP
  88. public const uint WSANO_RECOVERY         = (WSABASEERR+1003);
  89. //Valid name, no data record of requested type
  90. public const uint WSANO_DATA             = (WSABASEERR+1004);
  91. //Define QOS related error return codes
  92. public const uint WSA_QOS_RECEIVERS              = (WSABASEERR + 1005);
  93. //at least one Reserve has arrived
  94. public const uint WSA_QOS_SENDERS                = (WSABASEERR + 1006);
  95. //at least one Path has arrived
  96. public const uint WSA_QOS_NO_SENDERS             = (WSABASEERR + 1007);
  97. //there are no senders
  98. public const uint WSA_QOS_NO_RECEIVERS           = (WSABASEERR + 1008);
  99. //there are no receivers
  100. public const uint WSA_QOS_REQUEST_CONFIRMED      = (WSABASEERR + 1009);
  101. //Reserve has been confirmed
  102. public const uint WSA_QOS_ADMISSION_FAILURE      = (WSABASEERR + 1010);
  103. //error due to lack of resources
  104. public const uint WSA_QOS_POLICY_FAILURE         = (WSABASEERR + 1011);
  105. //rejected for administrative reasons - bad credentials
  106. public const uint WSA_QOS_BAD_STYLE              = (WSABASEERR + 1012);
  107. //unknown or conflicting style
  108. public const uint WSA_QOS_BAD_OBJECT             = (WSABASEERR + 1013);
  109. //problem with some part of the filterspec or providerspecific
  110. //buffer in general
  111. public const uint WSA_QOS_TRAFFIC_CTRL_ERROR     = (WSABASEERR + 1014);
  112. //problem with some part of the flowspec
  113. public const uint WSA_QOS_GENERIC_ERROR          = (WSABASEERR + 1015);
  114. //general error
  115. public const uint WSA_QOS_ESERVICETYPE           = (WSABASEERR + 1016);
  116. //invalid service type in flowspec
  117. public const uint WSA_QOS_EFLOWSPEC              = (WSABASEERR + 1017);
  118. //invalid flowspec
  119. public const uint WSA_QOS_EPROVSPECBUF           = (WSABASEERR + 1018);
  120. //invalid provider specific buffer
  121. public const uint WSA_QOS_EFILTERSTYLE           = (WSABASEERR + 1019);
  122. //invalid filter style
  123. public const uint WSA_QOS_EFILTERTYPE            = (WSABASEERR + 1020);
  124. //invalid filter type
  125. public const uint WSA_QOS_EFILTERCOUNT           = (WSABASEERR + 1021);
  126. //incorrect number of filters
  127. public const uint WSA_QOS_EOBJLENGTH             = (WSABASEERR + 1022);
  128. //invalid object length
  129. public const uint WSA_QOS_EFLOWCOUNT             = (WSABASEERR + 1023);
  130. //incorrect number of flows
  131. public const uint WSA_QOS_EUNKOWNPSOBJ           = (WSABASEERR + 1024);
  132. //unknown object in provider specific buffer
  133. public const uint WSA_QOS_EPOLICYOBJ             = (WSABASEERR + 1025);
  134. //invalid policy object in provider specific buffer
  135. public const uint WSA_QOS_EFLOWDESC              = (WSABASEERR + 1026);
  136. //invalid flow descriptor in the list
  137. public const uint WSA_QOS_EPSFLOWSPEC            = (WSABASEERR + 1027);
  138. //inconsistent flow spec in provider specific buffer
  139. public const uint WSA_QOS_EPSFILTERSPEC          = (WSABASEERR + 1028);
  140. //invalid filter spec in provider specific buffer
  141. public const uint WSA_QOS_ESDMODEOBJ             = (WSABASEERR + 1029);
  142. //invalid shape discard mode object in provider specific buffer
  143. public const uint WSA_QOS_ESHAPERATEOBJ          = (WSABASEERR + 1030);
  144. //invalid shaping rate object in provider specific buffer
  145. public const uint WSA_QOS_RESERVED_PETYPE        = (WSABASEERR + 1031);
  146. //reserved policy element in provider specific buffer
  147. #endregion
  148. #endregion
  149. #region imported functions
  150. [DllImport("WS2_32.DLL")]
  151. public static extern int WSAStartup(UInt16 wVersionRequested, WSADATA lpWSAData);
  152. [DllImport("WS2_32.DLL")]
  153. public static extern uint inet_addr(string cp);
  154. //Requires Icmp.dll on Windows 2000 Server and Windows 2000 Professional. 
  155. //Requires Iphlpapi.dll on Windows Server 2003 and Windows XP
  156. [DllImport("iphlpapi.DLL", EntryPoint="IcmpCreateFile",  SetLastError=true,
  157.  CallingConvention=CallingConvention.StdCall)]
  158. public static extern IntPtr IcmpCreateFile();
  159. [DllImport("iphlpapi.DLL", EntryPoint="IcmpSendEcho",  SetLastError=true,
  160.  CallingConvention=CallingConvention.StdCall)]
  161. public static extern uint IcmpSendEcho(
  162. IntPtr IcmpHandle,
  163. uint DestinationAddress,
  164. byte[] RequestData,
  165. short RequestSize,
  166. IntPtr Null,
  167. byte[] ReplyBuffer,
  168. uint ReplySize,
  169. uint Timeout
  170. );
  171. [DllImport("iphlpapi.DLL", EntryPoint="IcmpCloseHandle",  SetLastError=true,
  172.  CallingConvention=CallingConvention.StdCall)]
  173. public static extern bool IcmpCloseHandle(IntPtr IcmpHandle);
  174. #endregion
  175. #region typedefs
  176. [StructLayout(LayoutKind.Sequential)]
  177. public class WSADATA
  178. {
  179. public ushort wVersion = 0;  
  180. public ushort wHighVersion = 0;
  181. [MarshalAs(UnmanagedType.ByValTStr, SizeConst=(WSADESCRIPTION_LEN+1))]
  182. public string szDescription = "";
  183. [MarshalAs(UnmanagedType.ByValTStr, SizeConst=(WSASYS_STATUS_LEN+1))]
  184. public string szSystemStatus = "";
  185. public ushort iMaxSockets = 0;  
  186. public ushort iMaxUdpDg = 0;  
  187. [MarshalAs(UnmanagedType.LPStr)]
  188. public string lpVendorInfo = "";
  189. };
  190. #endregion
  191. #region 'C' Macros redefined as functions
  192. public static ushort MAKEWORD(byte a, byte b) 
  193. return (ushort)(a | (b << 8)); 
  194. #endregion
  195. #region stuff for System Menu
  196. #region Message Constants
  197. public const Int32 WM_NOTIFY          = 0x004E;
  198. public const Int32 WM_COMMAND         = 0x0111;
  199. public const Int32 WM_SYSCOMMAND      = 0x112;
  200. public const Int32 WM_NOTIFYFORMAT    = 0x0055;
  201. public const Int32 WM_NCMOUSEMOVE                 = 0x00A0;
  202. public const Int32 WM_NCLBUTTONDOWN               = 0x00A1;
  203. public const Int32 WM_NCLBUTTONUP                 = 0x00A2;
  204. public const Int32 WM_NCLBUTTONDBLCLK             = 0x00A3;
  205. public const Int32 WM_NCRBUTTONDOWN               = 0x00A4;
  206. public const Int32 WM_NCRBUTTONUP                 = 0x00A5;
  207. public const Int32 WM_NCRBUTTONDBLCLK             = 0x00A6;
  208. public const Int32 WM_NCMBUTTONDOWN               = 0x00A7;
  209. public const Int32 WM_NCMBUTTONUP                 = 0x00A8;
  210. public const Int32 WM_NCMBUTTONDBLCLK             = 0x00A9;
  211. public const Int32 WM_DEVMODECHANGE               = 0x001B;
  212. public const Int32 WM_ACTIVATEAPP                 = 0x001C;
  213. public const Int32 WM_FONTCHANGE                  = 0x001D;
  214. public const Int32 WM_TIMECHANGE                  = 0x001E;
  215. public const Int32 WM_CANCELMODE                  = 0x001F;
  216. public const Int32 WM_SETCURSOR                   = 0x0020;
  217. public const Int32 WM_MOUSEACTIVATE               = 0x0021;
  218. public const Int32 WM_CHILDACTIVATE               = 0x0022;
  219. public const Int32 WM_QUEUESYNC                   = 0x0023;
  220. #endregion 
  221. #region Menu Flags
  222. //public const Int32 MF_SEPARATOR       = 0x800;
  223. //public const Int32 MF_BYPOSITION      = 0x400;
  224. //public const Int32 MF_STRING          = 0x0;
  225. /*
  226.  * Menu flags for Add/Check/EnableMenuItem()
  227.  */
  228. public const Int32 MF_INSERT          = 0x00000000;
  229. public const Int32 MF_CHANGE          = 0x00000080;
  230. public const Int32 MF_APPEND          = 0x00000100;
  231. public const Int32 MF_DELETE          = 0x00000200;
  232. public const Int32 MF_REMOVE          = 0x00001000;
  233. public const Int32 MF_BYCOMMAND       = 0x00000000;
  234. public const Int32 MF_BYPOSITION      = 0x00000400;
  235. public const Int32 MF_SEPARATOR       = 0x00000800;
  236. public const Int32 MF_ENABLED         = 0x00000000;
  237. public const Int32 MF_GRAYED          = 0x00000001;
  238. public const Int32 MF_DISABLED        = 0x00000002;
  239. public const Int32 MF_UNCHECKED       = 0x00000000;
  240. public const Int32 MF_CHECKED         = 0x00000008;
  241. public const Int32 MF_USECHECKBITMAPS = 0x00000200;
  242. public const Int32 MF_STRING          = 0x00000000;
  243. public const Int32 MF_BITMAP          = 0x00000004;
  244. public const Int32 MF_OWNERDRAW       = 0x00000100;
  245. public const Int32 MF_POPUP           = 0x00000010;
  246. public const Int32 MF_MENUBARBREAK    = 0x00000020;
  247. public const Int32 MF_MENUBREAK       = 0x00000040;
  248. public const Int32 MF_UNHILITE       =  0x00000000;
  249. public const Int32 MF_HILITE         =  0x00000080;
  250. #endregion
  251. #region menu defs
  252. public const Int32 IDM_RENAMECAPTION     = 1000;
  253. public const Int32 IDM_HELP      = 1001;
  254. public const Int32 IDM_HELPABOUT      = 1002;
  255. public const Int32 IDM_DIAGNOSTICS       = 1003;
  256. public const Int32 IDM_TOGGLELITE_HEIGHT = 1004;
  257. public const Int32 IDM_TOGGLELITE_WIDTH  = 1005;
  258. public const Int32 IDM_TOGGLE_FORM_SIZABLE = 1006;
  259. #endregion
  260. #region fuctions
  261. [DllImport("user32.dll")]
  262. public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
  263. [DllImport("user32.dll")]
  264. public static extern bool InsertMenu (IntPtr hMenu, Int32 wPosition, Int32 wFlags, Int32 wIDNewItem, string lpNewItem);
  265. [DllImport("user32.dll")]
  266. public static extern uint CheckMenuItem(IntPtr hMenu, uint nIDCheckItem, uint nCheck);
  267. [DllImport("user32.dll")]
  268. public static extern uint GetMenuState(IntPtr hMenu, uint nID, uint nFlags); 
  269. /// <summary>
  270. /// The EnableMenuItem function enables, disables, or grays the specified menu item. 
  271. /// </summary>
  272. /// <param name="hMenu">[in] Handle to the menu. </param>
  273. /// <param name="uIDEnableItem">[in] Specifies the menu item to be enabled, disabled, or grayed, 
  274. /// as determined by the uEnable parameter. This parameter specifies an item in a menu bar, menu, or submenu. 
  275. /// </param>
  276. /// <param name="uEnable">
  277. /// [in] Controls the interpretation of the uIDEnableItem parameter and indicate 
  278. /// whether the menu item is enabled, disabled, or grayed. This parameter must be 
  279. /// a combination of either MF_BYCOMMAND or MF_BYPOSITION and MF_ENABLED, MF_DISABLED, or MF_GRAYED. 
  280. /// MF_BYCOMMAND - Indicates that uIDEnableItem gives the identifier of the menu item. 
  281. /// If neither the MF_BYCOMMAND nor MF_BYPOSITION flag is specified, the MF_BYCOMMAND 
  282. /// flag is the default flag.
  283. /// MF_BYPOSITION - Indicates that uIDEnableItem gives the zero-based relative position of the menu item.
  284. /// MF_DISABLED - Indicates that the menu item is disabled, but not grayed, so it cannot be selected.
  285. /// MF_ENABLED - Indicates that the menu item is enabled and restored from a grayed state so that it can be selected.
  286. /// MF_GRAYED - Indicates that the menu item is disabled and grayed so that it cannot be selected.
  287. /// </param>
  288. /// <returns>The return value specifies the previous state of the menu item (it is either 
  289. /// MF_DISABLED, MF_ENABLED, or MF_GRAYED). If the menu item does not exist, the return value is -1.</returns>
  290. [DllImport("user32.dll")]
  291. public static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);
  292. #endregion
  293. #endregion
  294. #region stuff for process communication i'm not even using
  295. const uint PROCESS_ALL_ACCESS = (uint)(0x000F0000L | 0x00100000L | 0xFFF);
  296. const uint MEM_COMMIT         = 0x1000;
  297. const uint MEM_RELEASE        = 0x8000;
  298. const uint PAGE_READWRITE     = 0x04;
  299. [DllImport("user32.dll")]
  300. static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, IntPtr lParam);
  301. [DllImport("user32")]
  302. static extern IntPtr GetWindowThreadProcessId( IntPtr hWnd, out int lpwdProcessID );    
  303.   
  304. [DllImport("kernel32")]
  305. static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId);
  306. [DllImport("kernel32")]
  307. static extern IntPtr VirtualAllocEx( IntPtr hProcess, IntPtr lpAddress, int dwSize, uint flAllocationType, uint flProtect);
  308. [DllImport("kernel32")]
  309. static extern bool VirtualFreeEx( IntPtr hProcess, IntPtr lpAddress, int dwSize, uint dwFreeType );
  310. [DllImport("kernel32")]
  311. static extern bool WriteProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, ref string buffer, int dwSize, IntPtr lpNumberOfBytesWritten );
  312. [DllImport("kernel32")]
  313. static extern bool ReadProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, IntPtr lpNumberOfBytesRead );
  314. [DllImport("kernel32")]
  315. static extern bool CloseHandle( IntPtr hObject );
  316. #endregion
  317. #region time.h stuff
  318. [DllImport("MSVCRT.DLL")]
  319. public static extern void time(ref long t);
  320. #endregion
  321. }
  322. }