pasando un descriptor de archivo a una función de biblioteca C a través de ctypes en windows

Estoy tratando de pasar un descriptor de archivo a través de ctypes, a una función C donde las escrituras se realizan en el fd. En linux funciona. En Windows no lo hace y no entiendo por qué (no tengo experiencia como desarrollador en Windows)

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

desde python (detalles omitidos):

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(...))

program muere en write () s con una afirmación fallida _osfile (fh) & FOPEN

cl.exe: 16.00.40219.01 para x86 python 2.7.2 msc v.1500 32bit

¿Cómo se supone que debo hacerlo? no, no quiero descargar open () a lib. Quiero pasar un descriptor de archivo ya abierto de manera segura, independiente de la plataforma.

información adicional, por si acaso: la biblioteca es tinycdb, la porté rápidamente a Windows con una breve especificación de cmake y pocos parches sucios para que las exportaciones de getopt y dll funcionen. la biblioteca y la herramienta exe funcionan como se esperaba (probado). los envoltorios de python ctypes para tinycdb funcionan en linux como se esperaba. Windows me da globos oculares. no aceptará que el fd sea un descriptor válido incluso si lo paso después de abrirlo con su propio (msvcrt) _open libcall.

por supuesto, todo funciona si estoy abriendo () ing / close () ing el archivo dentro de la biblioteca pero no puedo permitirme cambiar la API.

Respuestas a la pregunta(2)

Su respuesta a la pregunta