GetCurrentProcessId()vs System.Diagnostics.Process.Id - 返回类型的差异

时间:2017-12-18 17:14:33

标签: .net windows api process

我之前从未注意过,但显然代表进程ID的数据类型与本机Windows API和.NET Process.Id不同。具体而言,GetCurrentProcessId定义为

DWORD WINAPI GetCurrentProcessId(void);

...而DWORD当然被定义为unsigned long。 .NET的System.Diagnostics.Process.Id定义为

public int Id { get; }

... int当然是签名值。

由于该值的最终来源是Windows内核,并且该值预期与通过Windows API调用或通过.NET的本机Process.Id看到的相同,所以为什么两者返回的数据类型不同?

我理解,因为Windows内核试图将流程ID保持在频谱的低端(出于非技术原因),即使是最强大的机器也没有足够的资源来托管足够的流程来推动有符号整数的上限。但是,这仍然无法证明创建类型不匹配的合理性。

那么为什么会出现这种差异呢?应该使用互操作来获取进程ID并避免使用.NET获取id的方法吗?

0 个答案:

没有答案
相关问题