NativeStructs.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. using System;
  2. using System.Runtime.InteropServices;
  3. namespace PaintDotNet.SystemLayer
  4. {
  5. internal static class NativeStructs
  6. {
  7. [StructLayout(LayoutKind.Sequential)]
  8. internal struct PROCESS_INFORMATION
  9. {
  10. public IntPtr hProcess;
  11. public IntPtr hThread;
  12. public uint dwProcessId;
  13. public uint dwThreadId;
  14. }
  15. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  16. internal struct STATSTG
  17. {
  18. public IntPtr pwcsName;
  19. public NativeConstants.STGTY type;
  20. public ulong cbSize;
  21. public System.Runtime.InteropServices.ComTypes.FILETIME mtime;
  22. public System.Runtime.InteropServices.ComTypes.FILETIME ctime;
  23. public System.Runtime.InteropServices.ComTypes.FILETIME atime;
  24. public uint grfMode;
  25. public uint grfLocksSupported;
  26. public Guid clsid;
  27. public uint grfStateBits;
  28. public uint reserved;
  29. }
  30. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)]
  31. internal struct KNOWNFOLDER_DEFINITION
  32. {
  33. public NativeConstants.KF_CATEGORY category;
  34. [MarshalAs(UnmanagedType.LPWStr)]
  35. public string pszName;
  36. [MarshalAs(UnmanagedType.LPWStr)]
  37. public string pszCreator;
  38. [MarshalAs(UnmanagedType.LPWStr)]
  39. public string pszDescription;
  40. public Guid fidParent;
  41. [MarshalAs(UnmanagedType.LPWStr)]
  42. public string pszRelativePath;
  43. [MarshalAs(UnmanagedType.LPWStr)]
  44. public string pszParsingName;
  45. [MarshalAs(UnmanagedType.LPWStr)]
  46. public string pszToolTip;
  47. [MarshalAs(UnmanagedType.LPWStr)]
  48. public string pszLocalizedName;
  49. [MarshalAs(UnmanagedType.LPWStr)]
  50. public string pszIcon;
  51. [MarshalAs(UnmanagedType.LPWStr)]
  52. public string pszSecurity;
  53. public uint dwAttributes;
  54. public NativeConstants.KF_DEFINITION_FLAGS kfdFlags;
  55. public Guid ftidType;
  56. }
  57. [StructLayout(LayoutKind.Sequential, Pack = 4)]
  58. internal struct PROPERTYKEY
  59. {
  60. public Guid fmtid;
  61. public uint pid;
  62. }
  63. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)]
  64. internal struct COMDLG_FILTERSPEC
  65. {
  66. [MarshalAs(UnmanagedType.LPWStr)]
  67. public string pszName;
  68. [MarshalAs(UnmanagedType.LPWStr)]
  69. public string pszSpec;
  70. }
  71. [StructLayout(LayoutKind.Sequential)]
  72. internal struct SYSTEM_INFO
  73. {
  74. public ushort wProcessorArchitecture;
  75. public ushort wReserved;
  76. public uint dwPageSize;
  77. public IntPtr lpMinimumApplicationAddress;
  78. public IntPtr lpMaximumApplicationAddress;
  79. public UIntPtr dwActiveProcessorMask;
  80. public uint dwNumberOfProcessors;
  81. public uint dwProcessorType;
  82. public uint dwAllocationGranularity;
  83. public ushort wProcessorLevel;
  84. public ushort wProcessorRevision;
  85. }
  86. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  87. internal struct OSVERSIONINFOEX
  88. {
  89. public static int SizeOf
  90. {
  91. get
  92. {
  93. return Marshal.SizeOf(typeof(OSVERSIONINFOEX));
  94. }
  95. }
  96. public uint dwOSVersionInfoSize;
  97. public uint dwMajorVersion;
  98. public uint dwMinorVersion;
  99. public uint dwBuildNumber;
  100. public uint dwPlatformId;
  101. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
  102. public string szCSDVersion;
  103. public ushort wServicePackMajor;
  104. public ushort wServicePackMinor;
  105. public ushort wSuiteMask;
  106. public byte wProductType;
  107. public byte wReserved;
  108. }
  109. [StructLayout(LayoutKind.Sequential)]
  110. internal struct COPYDATASTRUCT
  111. {
  112. internal UIntPtr dwData;
  113. internal uint cbData;
  114. internal IntPtr lpData;
  115. }
  116. [StructLayout(LayoutKind.Sequential)]
  117. internal struct SHELLEXECUTEINFO
  118. {
  119. internal uint cbSize;
  120. internal uint fMask;
  121. internal IntPtr hwnd;
  122. [MarshalAs(UnmanagedType.LPTStr)] internal string lpVerb;
  123. [MarshalAs(UnmanagedType.LPTStr)] internal string lpFile;
  124. [MarshalAs(UnmanagedType.LPTStr)] internal string lpParameters;
  125. [MarshalAs(UnmanagedType.LPTStr)] internal string lpDirectory;
  126. internal int nShow;
  127. internal IntPtr hInstApp;
  128. internal IntPtr lpIDList;
  129. [MarshalAs(UnmanagedType.LPTStr)] internal string lpClass;
  130. internal IntPtr hkeyClass;
  131. internal uint dwHotKey;
  132. internal IntPtr hIcon_or_hMonitor;
  133. internal IntPtr hProcess;
  134. }
  135. [StructLayout(LayoutKind.Sequential)]
  136. internal struct MEMORYSTATUSEX
  137. {
  138. internal uint dwLength;
  139. internal uint dwMemoryLoad;
  140. internal ulong ullTotalPhys;
  141. internal ulong ullAvailPhys;
  142. internal ulong ullTotalPageFile;
  143. internal ulong ullAvailPageFile;
  144. internal ulong ullTotalVirtual;
  145. internal ulong ullAvailVirtual;
  146. internal ulong ullAvailExtendedVirtual;
  147. }
  148. [StructLayout(LayoutKind.Sequential)]
  149. internal struct OVERLAPPED
  150. {
  151. internal UIntPtr Internal;
  152. internal UIntPtr InternalHigh;
  153. internal uint Offset;
  154. internal uint OffsetHigh;
  155. internal IntPtr hEvent;
  156. }
  157. [StructLayout(LayoutKind.Sequential)]
  158. internal struct RGBQUAD
  159. {
  160. internal byte rgbBlue;
  161. internal byte rgbGreen;
  162. internal byte rgbRed;
  163. internal byte rgbReserved;
  164. }
  165. [StructLayout(LayoutKind.Sequential)]
  166. internal struct BITMAPINFOHEADER
  167. {
  168. internal uint biSize;
  169. internal int biWidth;
  170. internal int biHeight;
  171. internal ushort biPlanes;
  172. internal ushort biBitCount;
  173. internal uint biCompression;
  174. internal uint biSizeImage;
  175. internal int biXPelsPerMeter;
  176. internal int biYPelsPerMeter;
  177. internal uint biClrUsed;
  178. internal uint biClrImportant;
  179. }
  180. [StructLayout(LayoutKind.Sequential)]
  181. internal struct BITMAPINFO
  182. {
  183. internal BITMAPINFOHEADER bmiHeader;
  184. internal RGBQUAD bmiColors;
  185. }
  186. [StructLayout(LayoutKind.Sequential)]
  187. internal unsafe struct MEMORY_BASIC_INFORMATION
  188. {
  189. internal void* BaseAddress;
  190. internal void* AllocationBase;
  191. internal uint AllocationProtect;
  192. internal UIntPtr RegionSize;
  193. internal uint State;
  194. internal uint Protect;
  195. internal uint Type;
  196. };
  197. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  198. internal class LOGFONT
  199. {
  200. internal int lfHeight = 0;
  201. internal int lfWidth = 0;
  202. internal int lfEscapement = 0;
  203. internal int lfOrientation = 0;
  204. internal int lfWeight = 0;
  205. internal byte lfItalic = 0;
  206. internal byte lfUnderline = 0;
  207. internal byte lfStrikeOut = 0;
  208. internal byte lfCharSet = 0;
  209. internal byte lfOutPrecision = 0;
  210. internal byte lfClipPrecision = 0;
  211. internal byte lfQuality = 0;
  212. internal byte lfPitchAndFamily = 0;
  213. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
  214. internal string lfFaceName = string.Empty;
  215. }
  216. [StructLayout(LayoutKind.Sequential)]
  217. internal struct LOGBRUSH
  218. {
  219. internal uint lbStyle;
  220. internal uint lbColor;
  221. internal int lbHatch;
  222. };
  223. [StructLayout(LayoutKind.Sequential)]
  224. internal struct RGNDATAHEADER
  225. {
  226. internal uint dwSize;
  227. internal uint iType;
  228. internal uint nCount;
  229. internal uint nRgnSize;
  230. internal RECT rcBound;
  231. };
  232. [StructLayout(LayoutKind.Sequential)]
  233. internal struct RGNDATA
  234. {
  235. internal RGNDATAHEADER rdh;
  236. internal unsafe static RECT* GetRectsPointer(RGNDATA* me)
  237. {
  238. return (RECT*)((byte*)me + sizeof(RGNDATAHEADER));
  239. }
  240. }
  241. [StructLayout(LayoutKind.Sequential)]
  242. internal struct POINT
  243. {
  244. internal int x;
  245. internal int y;
  246. }
  247. [StructLayout(LayoutKind.Sequential)]
  248. internal struct RECT
  249. {
  250. internal int left;
  251. internal int top;
  252. internal int right;
  253. internal int bottom;
  254. }
  255. [StructLayout(LayoutKind.Sequential)]
  256. internal unsafe struct PropertyItem
  257. {
  258. internal int id;
  259. internal uint length;
  260. internal short type;
  261. internal void* value;
  262. }
  263. [StructLayout(LayoutKind.Sequential)]
  264. internal unsafe struct WINTRUST_DATA
  265. {
  266. internal uint cbStruct;
  267. internal IntPtr pPolicyCallbackData;
  268. internal IntPtr pSIPClientData;
  269. internal uint dwUIChoice;
  270. internal uint fdwRevocationChecks;
  271. internal uint dwUnionChoice;
  272. internal void* pInfo; // pFile, pCatalog, pBlob, pSgnr, or pCert
  273. internal uint dwStateAction;
  274. internal IntPtr hWVTStateData;
  275. internal IntPtr pwszURLReference;
  276. internal uint dwProvFlags;
  277. internal uint dwUIContext;
  278. }
  279. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  280. internal unsafe struct WINTRUST_FILE_INFO
  281. {
  282. internal uint cbStruct;
  283. internal char* pcwszFilePath;
  284. internal IntPtr hFile;
  285. }
  286. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  287. internal struct WINHTTP_CURRENT_USER_IE_PROXY_CONFIG
  288. {
  289. internal bool fAutoDetect;
  290. internal IntPtr lpszAutoConfigUrl;
  291. internal IntPtr lpszProxy;
  292. internal IntPtr lpszProxyBypass;
  293. };
  294. [StructLayout(LayoutKind.Sequential)]
  295. internal struct SP_DEVINFO_DATA
  296. {
  297. public uint cbSize;
  298. public Guid ClassGuid;
  299. public uint DevInst;
  300. public UIntPtr Reserved;
  301. }
  302. }
  303. }