В рамках этого вопроса меня интересуют только настольные приложения, как с графическим интерфейсом пользователя, так и с командной строкой.
В чем разница между Универсальная среда выполнения C, также известная как библиотека времени выполнения C и Настольные API?
В чем разница с точки зрения доступности - какой API работает в других версиях Windows? Есть ли затраты на размер / производительность при использовании обоих в одном приложении? В чем разница в надежности при обработке крайних случаев, например. имя файла в юникоде?
Кажется, настольные API-интерфейсы более мощные, чем универсальная среда выполнения C? Построен ли последний на основе первого, что делает первый строгий надмножество с точки зрения функциональности? Например, действительно ли _open реализован поверх CreateFileW?
"Что я должен предпочесть использовать?" спрашивает мнения. Stackoverflow пытается сосредоточиться больше на фактах, чем на мнениях.
@AdrianMcCarthy Я удалил часть вопроса о предпочтениях. Остальные - конкретные технические вопросы по факту - я считаю, что они не противоречат правилам, и поэтому эти вопросы следует открыть повторно.
Да, _[w]open вызывает CreateFileW, который, в свою очередь, вызывает NtCreateFile, заглушку системного вызова, которая переключается в режим ядра и отправляется на настоящий NtCreateFile.
К вашему сведению, NtCreateFile вызывает IoCreateFileEx, который устанавливает открытый пакет и вызывает ObOpenObjectByNameEx. Это анализирует путь, включая каталоги объектов и символические ссылки (например, "\ ?? \ C:" -> "\ Device \ HarddiskVolume2") до объекта с помощью процедуры синтаксического анализа. Устройство использует IopParseDevice, который проверяет фактическое целевое устройство (например, смонтированную файловую систему) и вызывает драйвер для стека устройств через IofCallDriver с запросом IRP_MJ_CREATE. Устройство анализирует оставшуюся часть пути. Для точки повторной обработки (например, соединения или символической ссылки) запрос возвращается обратно в ObOpenObjectByNameEx.
@eryksun Спасибо, это очень полезно и впечатляюще подробно!





Это зависит от потребностей вашего приложения. Интерфейсы API рабочего стола более «мощные» в том смысле, что они предлагают больше функциональных возможностей, но если они вам не нужны, они могут также усложнить работу.