ProcessApi.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Runtime.InteropServices;
  3. namespace MiniTerm.Native
  4. {
  5. /// <summary>
  6. /// PInvoke signatures for win32 process api
  7. /// </summary>
  8. static class ProcessApi
  9. {
  10. internal const uint EXTENDED_STARTUPINFO_PRESENT = 0x00080000;
  11. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  12. internal struct STARTUPINFOEX
  13. {
  14. public STARTUPINFO StartupInfo;
  15. public IntPtr lpAttributeList;
  16. }
  17. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  18. internal struct STARTUPINFO
  19. {
  20. public Int32 cb;
  21. public string lpReserved;
  22. public string lpDesktop;
  23. public string lpTitle;
  24. public Int32 dwX;
  25. public Int32 dwY;
  26. public Int32 dwXSize;
  27. public Int32 dwYSize;
  28. public Int32 dwXCountChars;
  29. public Int32 dwYCountChars;
  30. public Int32 dwFillAttribute;
  31. public Int32 dwFlags;
  32. public Int16 wShowWindow;
  33. public Int16 cbReserved2;
  34. public IntPtr lpReserved2;
  35. public IntPtr hStdInput;
  36. public IntPtr hStdOutput;
  37. public IntPtr hStdError;
  38. }
  39. [StructLayout(LayoutKind.Sequential)]
  40. internal struct PROCESS_INFORMATION
  41. {
  42. public IntPtr hProcess;
  43. public IntPtr hThread;
  44. public int dwProcessId;
  45. public int dwThreadId;
  46. }
  47. [StructLayout(LayoutKind.Sequential)]
  48. internal struct SECURITY_ATTRIBUTES
  49. {
  50. public int nLength;
  51. public IntPtr lpSecurityDescriptor;
  52. public int bInheritHandle;
  53. }
  54. [DllImport("kernel32.dll", SetLastError = true)]
  55. [return: MarshalAs(UnmanagedType.Bool)]
  56. internal static extern bool InitializeProcThreadAttributeList(
  57. IntPtr lpAttributeList, int dwAttributeCount, int dwFlags, ref IntPtr lpSize);
  58. [DllImport("kernel32.dll", SetLastError = true)]
  59. [return: MarshalAs(UnmanagedType.Bool)]
  60. internal static extern bool UpdateProcThreadAttribute(
  61. IntPtr lpAttributeList, uint dwFlags, IntPtr attribute, IntPtr lpValue,
  62. IntPtr cbSize, IntPtr lpPreviousValue, IntPtr lpReturnSize);
  63. [DllImport("kernel32.dll")]
  64. [return: MarshalAs(UnmanagedType.Bool)]
  65. internal static extern bool CreateProcess(
  66. string lpApplicationName, string lpCommandLine, ref SECURITY_ATTRIBUTES lpProcessAttributes,
  67. ref SECURITY_ATTRIBUTES lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags,
  68. IntPtr lpEnvironment, string lpCurrentDirectory, [In] ref STARTUPINFOEX lpStartupInfo,
  69. out PROCESS_INFORMATION lpProcessInformation);
  70. [DllImport("kernel32.dll", SetLastError = true)]
  71. [return: MarshalAs(UnmanagedType.Bool)]
  72. internal static extern bool DeleteProcThreadAttributeList(IntPtr lpAttributeList);
  73. [DllImport("kernel32.dll", SetLastError = true)]
  74. internal static extern bool CloseHandle(IntPtr hObject);
  75. }
  76. }