C++ windows系统调用

C++ windows系统调用,c++,windows,operating-system,system-calls,C++,Windows,Operating System,System Calls,在Linux上,getpid()似乎是最简单的系统调用,可以用来最好地测量系统调用所花费的时间。有没有人能告诉我一个简单的windows系统调用,我可以用来测量切换到内核模式和返回内核模式所花费的时间 我在谷歌上搜索了一下,在MSDN网站上找到了一个Windows系统调用列表,但它们都提到打开文件,这似乎很奇怪: 我使用的是64位Windows 7。我的建议(这只是基于直觉)是尝试以下操作 CloseHandle(NULL) 或 理由是这应该是禁止的。然而,我没有任何证据支持这一点 更新

在Linux上,
getpid()
似乎是最简单的系统调用,可以用来最好地测量系统调用所花费的时间。有没有人能告诉我一个简单的windows系统调用,我可以用来测量切换到内核模式和返回内核模式所花费的时间

我在谷歌上搜索了一下,在MSDN网站上找到了一个Windows系统调用列表,但它们都提到打开文件,这似乎很奇怪:

我使用的是64位Windows 7。

我的建议(这只是基于直觉)是尝试以下操作

CloseHandle(NULL)

理由是这应该是禁止的。然而,我没有任何证据支持这一点


更新 在Win8.1 x64上进行一点基准测试表明(未记录的)
NtDisplayString(NULL)
函数更快,其次是半记录的
NtAllocateLocallyUniqueId(&some\luid)
。您必须使用
GetProcAddress
从NTDLL动态加载它们;签名如下:

NTSTATUS NTAPI PNtAllocateLocallyUniqueId(PLUID LUID);
NTSTATUS NTAPI PNtDisplayString(PUNICODE_STRING DisplayString);

很抱歉,
getpid()
如何提供任何与计时相关的数据?我使用时间(0),这似乎有点简单。在我7岁的Dell上,Linux 12.04达到每秒13.2兆次(0),但每秒只有12.3兆次getpid()。很抱歉,这不是Win 7的答案。如果您能设法从用户模式调用它,我认为
PsGetProcessExitTime
是我能找到的最简单的函数。@RedAlert“调用最简单的系统调用,以最好地测量系统调用所用的时间”@Mehrdad已包含但无法访问该函数。GetStartupInfo将是另一个合理的猜测,或者在没有模拟的情况下(甚至可能是在模拟的情况下)恢复为self。对于其中任何一个,您都需要某种方法来检查内核模式转换是否确实发生了;Windows API尽可能地优化了这些功能。@HarryJohnston:我不明白为什么
GetStartupInfo
需要内核模式转换。你说得很对,这些信息可能是在进程创建过程中复制到用户空间的。但你永远不知道。:-)
NTSTATUS NTAPI PNtAllocateLocallyUniqueId(PLUID LUID);
NTSTATUS NTAPI PNtDisplayString(PUNICODE_STRING DisplayString);