使用c#中的Windows API函数

本文关键字:API 函数 Windows 中的 使用 | 更新日期: 2023-09-27 18:08:13

所以,我想在c#中使用CreateProcess API函数。我知道我必须导入kernel32.dll文件并覆盖函数头并将其标记为extern。我还知道我必须实现函数使用的结构。我遇到的问题是:我在哪里可以看到我需要实现的结构的确切结构?

[DllImport("Kernel32.dll")]
public static extern HANDLE CreateThread(PSECURITY_ATTRIBUTES psa,
                                             DWORD cbStack,
                                             PTHREAD_START_ROUTINE pfnStartAddr,
                                             PVOID pvParam,
                                             DWORD fwdCreate,
                                             PDWORD pdwThreadID);

我需要实现以下结构,以使其工作:HANDLE, DWORD…剩下的我该怎么做?

使用c#中的Windows API函数

您不需要重新实现这些类型。你只需要将它们转换成相应的。net等价:

平台调用数据类型

你可能也有兴趣知道。net有它自己的方式来创建线程和进程:

进程类(System.Diagnostics)

线程类

您可以使用pinvoke.net作为Win32 API翻译的源代码。例如,这里有两个你感兴趣的:

  • CreateProcess
  • CreateThread

请注意,那里的翻译质量参差不齐。例如,在上面的链接中有两个版本的CreateThread。只有一个是准确的。很明显是哪一个!

更一般地说,您应该好好阅读MSDN p/invoke教程和使用平台调用封送数据。

我发现MSDN主题Windows数据类型对识别Windows dll中使用的各种类型别名很有帮助。