msdos/int21 CREAT special cases

Ferenc Wagner wferi at
Tue Jun 3 05:06:24 CDT 2003

Eric Pouech <pouech-eric at> writes:

> _lcreat16 (and al.) is in fact a 16 bit function, implemented in
> krnl386. so, normally it wouldn't be accessible from 32 bit DLLs (we
> can do it in some cases, but the least we do, the better it is).
> So, if the same behavior (as _lcreat16) can be obtained with other 32
> bit APIs (like _lcreat or CreateFile), that'd be better. Beware, that
> _lcreat16 is different from _lcreat (search path order for example is
> not the same).

Thanks for the clarification!  Given the definitions

HFILE16 WINAPI _lcreat16( LPCSTR path, INT16 attr )
    return Win32HandleToDosFileHandle( (HANDLE)_lcreat( path, attr ) );

HFILE WINAPI _lcreat( LPCSTR path, INT attr )
    /* Mask off all flags not explicitly allowed by the doc */
    TRACE("%s %02x\n", path, attr );
    return (HFILE)CreateFileA( path, GENERIC_READ | GENERIC_WRITE,
                               FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
                               CREATE_ALWAYS, attr, 0 );

I could easily change my patch to call _lcreat() or
CreateFileA() instead of _lcreat16(), but I am not sure if
that would be right, since the differences you mention do
not seem to be implemented, and I could not find any
documentation on them.  In sight of this, what do you
recommend?  The conformance tests do not show any anomaly in
the behaviour of _lcreat(), but it may be only that these
aspects simply are not tested.

Well, the above has not much to do with my original patch,
but given some pointers I am willing to investigate this

More information about the wine-devel mailing list