передача файлового дескриптора функции библиотеки C через ctypes в windows

Я пытаюсь передать дескриптор файла через ctypes, в функцию C, где записи выполняются на FD. На Linux это работает. На Windows это не так, и я не понимаю, почему (у меня нет опыта в качестве разработчика для Windows)

//C func signature: 
void fun(struct bah *opaque, int fd)

от python (подробности опущены):

mylib.fun.argtypes = [POINTER(bah), c_int]
fh = open(filename,'wb')
#doesn't work on windows, works on linux/unix
mylib.fun(some_ctypes_struct, fh.fileno())
#doesn't work on windows
mylib.fun(bah_struct, ctypes.cdll.msvcrt._open(filename,_O_FLAGS_MASK, ACCMASK)
#doesn't work
mylib.fun(bah_struct, os.open(...))

программа умирает при write () с ошибочным утверждением _osfile (fh) & FOPEN

cl.exe: 16.00.40219.01 для x86 python 2.7.2 msc v.1500 32bit

как я должен это сделать? нет, я не хочу разгрузить open () в lib. Я хочу передать уже открытый дескриптор файла безопасным способом, независимым от платформы.

дополнительная информация, на всякий случай: библиотека - tinycdb, я быстро перенес ее на окна с короткой спецификацией cmake и несколькими грязными патчами, чтобы сделать экспорт getopt и dll работающим. библиотека и инструмент exe работают как положено (проверено). оболочки Python ctypes для tinycdb работают на Linux, как и ожидалось. окна дают мне глазные яблоки. он не примет, что fd является допустимым дескриптором, даже если я передаю его после открытия его собственным (msvcrt) _open libcall.

Конечно, все работает, если я открываю / закрываю / закрываю файл в библиотеке, но я не могу позволить себе сменить API.

Ответы на вопрос(1)

Ваш ответ на вопрос