【问题标题】:Windows API which raises exceptions引发异常的 Windows API
【发布时间】:2013-02-03 14:39:18
【问题描述】:

我正在寻找一种可能(在一个或多个场景中)抛出/引发异常的 winapi 函数的分类。一个明显的例子是已关闭资源上的 CloseHandle。

【问题讨论】:

  • 您的问题是什么?
  • CloseHandle 不会抛出 C++ 意义上的异常。它与调试器一起工作。这就是你要找的分类吗?
  • “异常”是指像 C++ 异常吗?没有一个 Windows API 是 C++ 函数,所以不会抛出异常!
  • Windows API 是 C,它们不会/不能抛出异常。
  • 这不是一个明显的例子,CloseHandle 仅在您连接了调试器时引发 SEH。试图提醒您,您的代码容易受到回收攻击。 Win32 api 层不会引发异常。但也不会竭尽全力阻止它们,当您调用具有错误指针值的 api 函数时,您会被 SEH 打。就像你自己的代码会失败一样。

标签: c winapi exception-handling


【解决方案1】:

一些 Win32 API 函数被记录为抛出一些异常(当然是 SEH 异常,而不是 C++ 异常)。你可以去 MSDN 并检查每个功能。但鉴于 Win32 API 文档的质量,我不确定它是否完全记录在案。这不是 .NET :)

【讨论】:

  • 嗯,是的,我知道.. 我希望这些功能有一个可靠的分类.. 谢谢。
  • @user1610015,您能否举一个 Win32 API 的示例,其中记录了在常规使用中抛出 SEH 的情况?
  • @JPBlanc HeapAlloc 被记录为抛出异常(但前提是您在第二个参数中指定了 HEAP_GENERATE_EXCEPTIONS 标志)。
【解决方案2】:

没有一个正式的 Windows API 函数列表详细说明哪些函数会引发 SEH 异常。你需要检查你调用的每一个函数。

【讨论】:

  • 对不起,我不明白。你能详细说明一下吗?
  • 我担心 api 函数会在 MSDN 上没有明确文档的情况下引发异常,但似乎没有答案..
  • 嗯,根据定义,没有关于无证行为的文档。
猜你喜欢
  • 2021-12-12
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多