将 errno.h 错误值转换为 Win32 GetLastError() 等效项

发布于 2024-09-27 23:58:05 字数 874 浏览 8 评论 0 原文

我正在POSIX 文件系统,以及使用 Dokan,并且需要转换 errno 类型 的错误值( EINVALENOENT 等),转换为调用 GetLastError() (例如 ERROR_INVALID_PARAMETER)。

我可以使用现有的函数、库或引用来执行这些转换吗?

我通常会浏览 Python 源代码以获取有关这些问题的灵感,但 Python 巧妙地避免了这种需求(至少就目前而言)我可以告诉)。

例如,EINVAL (22) 将转换为 ERROR_INVALID_PARAMETER (87)

I'm writing a layer between a POSIX filesystem, and Windows using Dokan, and need to convert error values of the errno kind (EINVAL, ENOENT, etc.), to the Win32 equivalents you'd receive when calling GetLastError() (such as ERROR_INVALID_PARAMETER).

Is there an existing function, library, or reference I can use to perform these conversions?

I typically poke through the Python source for inspiration on these matters, but Python neatly avoids this need (at least as far as I can tell).

As an example, EINVAL (22) would convert to ERROR_INVALID_PARAMETER (87).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

妄断弥空 2024-10-04 23:58:05

我过去曾做过关于这个主题的实验,主要基于 Microsoft DOSMAP .CPP 单位。然而,我当时取消了该项目,因为错误映射并不总是适合特定的错误代码。例如,并非每个 POSIX 版本都会针对 ERROR_INVALID_ACCESS 返回 EINVAL,其中一些版本会返回 EACCES。我还对 POSIX.1 的 errno.h 系统错误号进行了比较-2008 和 DOSMAP.CPPmingw.c, Postgresql 错误.ctclWinError.c、MySQL my_winerr.c 等等;有时,对于特定的错误代码,它们之间的映射规则有所不同。就我个人而言,我建议您仅处理它们之间一致的错误代码映射。

I had done an experiment about this subject in the past, mostly based on Microsoft DOSMAP.CPP unit. However, I cancelled the project at that time because the error mapping was not always right for particular error codes. For Example, not every POSIX version return EINVAL for ERROR_INVALID_ACCESS, some of them return EACCES instead. I also had made a comparison between errno.h system error numbers of POSIX.1-2008 and DOSMAP.CPP, mingw.c, Postgresql error.c, tclWinError.c, MySQL my_winerr.c and many more; sometimes, the mapping rule differ among them for particular error codes. Personally, I suggest you to deal with only the consistent error-code mapping among them.

那支青花 2024-10-04 23:58:05

对于每个 errno 通常有许多可能的 GetLastError 值,因此您的想法可能不一定可行。

不管怎样,我只是用谷歌搜索“errno to getlasterror”,第一个谷歌点击提供了 此对应列表来自 Cygwin 来源。

这是错误的方式,GetLastErrorerrno,但也许有帮助?

干杯&嗯。

For each errno there are in general many possible GetLastError values, so what you're thinking may not necessarily be feasible.

Anyway, I just googled "errno to getlasterror", and the first google hit provided this correspondence list from the Cygwin sources.

It is the wrong way, GetLastError to errno, but perhaps helpful?

Cheers & hth.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文