windows-nt/Source/XPSP1/NT/inetsrv/intlwb/thai2/sth/cmn_createfilew.c
2020-09-26 16:20:57 +08:00

68 lines
2.1 KiB
C

/*****************************************************************************
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;
}