Мне кажется, что вы спрашиваете, почему os.open магически не равен вызову CreateFile с очень специфическим набором параметров. Ответ Кости практичен: он говорит, что вы можете использовать привязки Python Win32 для непосредственного вызова CreateFile, который является Win32 API.
Что-либо кроме выполнения прямого ввода-вывода CreateFile / readFile / writeFile собирается представить еще один слой сверху (объекты файла python и их поведение), который ограничивает вас параметрами, которые поддерживает os.open. os.open создает объект файла Python, который не совсем одно и то же и не предназначен для предоставления всех параметров Win32 CreateFile.
Это означает, например, что точный аналог GENERIC_READ, OPEN_EXISTING или FILE_ATTRIBUTE_NORMAL не гарантированно существует.
Мое лучшее предположение заключается в том, что os.open не предназначен для замены прямых вызовов CreateFile для таких странных целей, как та, для которой вы его используете.
Если вы можете читать C, почему бы не открыть исходные коды для python и прочитать реализацию os.open. Если вам действительно нужно пройти через os.open, вы узнаете, какие параметры передать ему, так что в итоге реализация os.open (в C) вызывает CreateFile в Win32 API с правильными параметрами, указанными выше. Все это больше похоже на работу, чем просто использование предложения Кости.