/***************************************************************************** Natural Language Group Common Library CMN_CreateFileW.c - windows 95 safe version of CreateFileW History: DougP 11/20/97 Created ©1997 Microsoft Corporation *****************************************************************************/ #include "precomp.h" #undef CMN_CreateFileW #undef CreateFileW HANDLE WINAPI CMN_CreateFileW ( PCWSTR pwzFileName, // pointer to name of the file DWORD dwDesiredAccess, // access (read-write) mode DWORD dwShareMode, // share mode LPSECURITY_ATTRIBUTES pSecurityAttributes, // pointer to security descriptor DWORD dwCreationDistribution, // how to create DWORD dwFlagsAndAttributes, // file attributes HANDLE hTemplateFile) // handle to file with attributes to copy { HINSTANCE hFile; Assert(pwzFileName); hFile = CreateFileW ( pwzFileName, // pointer to name of the file dwDesiredAccess, // access (read-write) mode dwShareMode, // share mode pSecurityAttributes, // pointer to security descriptor dwCreationDistribution, // how to create dwFlagsAndAttributes, // file attributes hTemplateFile); #if defined(_M_IX86) if (!hFile && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) { // must be in win95 - arghhh! char szFileName[MAX_PATH]; // Lenox convinced me this is a safe limit for w95 //(if it's NT we're not here) BOOL fcharerr; char chdef = ' '; int res = WideCharToMultiByte (CP_ACP, 0, pwzFileName, -1, szFileName, sizeof(szFileName), &chdef, &fcharerr); if (res && !fcharerr) hFile = CreateFileA ( szFileName, // pointer to name of the file dwDesiredAccess, // access (read-write) mode dwShareMode, // share mode pSecurityAttributes, // pointer to security descriptor dwCreationDistribution, // how to create dwFlagsAndAttributes, // file attributes hTemplateFile); else if (fcharerr) SetLastError(ERROR_NO_UNICODE_TRANSLATION); } #endif #if defined(_DEBUG) if (!hFile || hFile == INVALID_HANDLE_VALUE) CMN_OutputSystemErrW(L"Can't CreateFile", pwzFileName); #endif return hFile; }