为什么没有 ReadDirectoryChangesA?
有 ReadDirectoryChangesW在威纳皮斯。但没有 ReadDirectoryChangesA。
很好奇。
为什么要特殊对待呢? 有谁知道原因或者历史吗?
There is ReadDirectoryChangesW in Winapis. But there is no ReadDirectoryChangesA.
Curious.
Why is it treated specially?
Is there anyone who knows the reason or history?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它在Win98/98/SE/Me 中从未存在过。许多(大多数?)从一开始就仅限 NT 的功能(例如 Net* API)仅在“宽”版本中可用(尽管在 Net* 的情况下,它们省略了“W”后缀) 。
It never existed in Win98/98/SE/Me. Many (most?) of the functions that have been NT-only from the beginning (e.g., the Net* API) are only available in "wide" versions (though in the case of Net*, they omitted the "W" suffix).
内核内部使用unicode编码。带有 W 后缀的 Win32 API 通常会转换为内部 NtXxx API。 Win32 API 的 A 版本需要从 ASCII 转换为 Unicode,调用 W 版本,然后将任何输出转换回 ASCII。
在 ReadDirectoryChangesW 的情况下,最后一部分是不可能完成的,因为数据是直接从文件系统读取到调用者的缓冲区,并且可能在 API 返回之后,因此不可能实现 ReadDirectoryChangesA。
The kernel internally is using unicode encoding. Win32 APIs with W suffix usually translate to the internal NtXxx APIs. The A version of the Win32 API needs to translate from ASCII to Unicode, call the W-version, and then translate any output back to ASCII.
In the case of ReadDirectoryChangesW the last part is impossible to do because the data is read directly from the file system to the caller's buffer, and potentially after the API returns so it is impossible to implement ReadDirectoryChangesA.