//============================================================================ // // Stub or little implementation for Win32 specific APIs // //============================================================================ #include "pch.hxx" #include #include #include #include "list.h" #define EACCES 13 extern "C" { /*****************************************************************************\ * * * From winbase.h (INC32) * * \*****************************************************************************/ BOOL WINAPI __export SetFileAttributesA( LPCSTR lpFileName, DWORD dwFileAttributes ) { return( FALSE ); } BOOL WINAPI __export SetFileAttributesW( LPCWSTR lpFileName, DWORD dwFileAttributes ) { return( FALSE ); } /* HeapAlloc and HeapFree uses Global memory */ CList * g_HeapList = NULL; LPVOID WINAPI __export OE16HeapAlloc( HANDLE hHeap, DWORD dwFlags, DWORD dwBytes ) { Assert ( dwBytes < 0x10000 ); // Can't handle more than 64KB return malloc( dwBytes ); } LPVOID WINAPI __export HeapReAlloc( HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, DWORD dwBytes ) { return( NULL ); } BOOL WINAPI __export OE16HeapFree( HANDLE hHeap, DWORD dwFlags, LPVOID lpMem ) { free (lpMem ); return TRUE; } DWORD WINAPI __export HeapSize( HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem ) { return 0; } DWORD WINAPI __export GetShortPathNameA( LPCSTR lpszLongPath, LPSTR lpszShortPath, DWORD cchBuffer ) { return( 0L ); } VOID WINAPI __export SetLastError( DWORD dwErrCode ) { } #ifdef RUN16_WIN16X LONG WINAPI CompareFileTime( CONST FILETIME *lpFileTime1, CONST FILETIME *lpFileTime2 ) { return( 0 ); } #endif /***** It is in Win16x.h as dummy inline VOID WINAPI Sleep( DWORD dwMilliseconds ) { sleep( (unsigned)((dwMilliseconds+999)/1000) ); Yield(); } ********/ BOOL WINAPI __export CreateProcessA( LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ) { return( FALSE ); } UINT WINAPI __export GetDriveTypeA( LPCSTR lpRootPathName ) { return( 0 ); // DRIVE_UNKNOWN } DWORD WINAPI __export GetEnvironmentVariableA( LPCSTR lpName, LPSTR lpBuffer, DWORD nSize ) { return( 0 ); } BOOL WINAPI __export CreateDirectoryA( LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes ) { if ( !mkdir( lpPathName ) ) if ( errno != EACCES ) return FALSE; return TRUE; } BOOL WINAPI __export GetUserNameA ( LPSTR lpBuffer, LPDWORD nSize ) { return( FALSE ); } BOOL WINAPI __export GetComputerNameA ( LPSTR lpBuffer, LPDWORD nSize ) { return( FALSE ); } /*****************************************************************************\ * * * OE16 File mapping object related function * * \*****************************************************************************/ CList * g_FileMappingList = NULL; LPVOID WINAPI __export OE16CreateFileMapping( HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName ) { LPVOID lpMem; LPCSTR lpNameLocal; if ( !g_FileMappingList ) g_FileMappingList = new CList; if ( !g_FileMappingList ) return (LPVOID)NULL; lpMem = g_FileMappingList->FindItemHandleWithName ( lpName, NULL ); if ( lpMem == NULL ) { lpMem = malloc( dwMaximumSizeLow ); if ( lpMem != NULL ) { ZeroMemory ( lpMem, dwMaximumSizeLow ); lpNameLocal = strdup( lpName ); if( lpNameLocal ) g_FileMappingList->AddItemWithName( (LPVOID)lpMem, lpNameLocal ); else { free( lpMem ); lpMem = NULL; } } } return lpMem; } LPVOID WINAPI __export OE16MapViewOfFile( HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, DWORD dwNumberOfBytesToMap ) { // We are using fixed memory. return (LPVOID)hFileMappingObject; } BOOL WINAPI __export OE16UnmapViewOfFile( LPCVOID lpBaseAddress ) { return TRUE; } BOOL WINAPI __export OE16CloseFileMapping( LPVOID lpObject ) { LPVOID lpMem; if( !g_FileMappingList ) return FALSE; lpMem = g_FileMappingList->FindItemHandleWithName( NULL, lpObject ); // if lpMem is not NULL, it means usagecnt == 0. Let's delete the item. if( lpMem != NULL ) { // Delete the item. g_FileMappingList->DelItem ( (LPVOID)lpMem ); free ( lpMem ); if( g_FileMappingList->IsEmpty() ) { delete g_FileMappingList; g_FileMappingList = NULL; } } return TRUE; } ///// Got to remove those below related to file mapping object HANDLE WINAPI CreateFileMappingA( HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName ) { return( NULL ); } LPVOID WINAPI MapViewOfFile( HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, DWORD dwNumberOfBytesToMap ) { return( NULL ); } BOOL WINAPI UnmapViewOfFile( LPCVOID lpBaseAddress ) { return( FALSE ); } BOOL WINAPI __export OE16ReleaseMutex( HANDLE hMutex ) { return( TRUE ); } BOOL WINAPI __export GetDiskFreeSpaceA( LPCSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters ) { return( FALSE ); } DWORD WINAPI __export GetTimeZoneInformation( LPTIME_ZONE_INFORMATION lpTimeZoneInformation ) { return( 0 ); } BOOL WINAPI __export IsTextUnicode( CONST LPVOID lpBuffer, int cb, LPINT lpi ) { return( FALSE ); } LPVOID WINAPI __export VirtualAlloc( LPVOID lpAddress, DWORD dwSize, DWORD flAllocationType, DWORD flProtect ) { lpAddress = (LPVOID) malloc(dwSize); return lpAddress; } BOOL WINAPI __export VirtualFree( LPVOID lpAddress, DWORD dwSize, DWORD dwFreeType ) { free(lpAddress); return TRUE; } VOID WINAPI __export GetSystemInfo( LPSYSTEM_INFO lpSystemInfo ) { lpSystemInfo->dwPageSize = 4096; } VOID WINAPI __export GetSystemTimeAsFileTime( LPFILETIME lpSystemTimeAsFileTime ) { } DWORD WINAPI __export ExpandEnvironmentStrings( LPCSTR lpSrc, LPSTR lpDst, DWORD nSize ) { return ((DWORD) 0); } /*****************************************************************************\ * * * From shlobj.h(INC32) * * \*****************************************************************************/ BOOL WINAPI __export SHGetPathFromIDListA( LPCITEMIDLIST pidl, LPSTR pszPath ) { return( FALSE ); } LPITEMIDLIST WINAPI __export SHBrowseForFolderA(LPBROWSEINFOA lpbi) { return( NULL ); } HRESULT WINAPI __export SHGetSpecialFolderLocation( HWND hwndOwner, int nFolder, LPITEMIDLIST* ppidl ) { return( E_NOTIMPL ); } /*****************************************************************************\ * * * From shlobjp.h(private\windows\inc) * * \*****************************************************************************/ void WINAPI __export SHFree(LPVOID pv) { } /*****************************************************************************\ * * * From wingdi.h(INC32) * * \*****************************************************************************/ BOOL WINAPI __export TranslateCharsetInfo( DWORD FAR *lpSrc, LPCHARSETINFO lpCs, DWORD dwFlags) { return( FALSE ); } /*****************************************************************************\ * * * From winuser.h - It should be in the (win16x.h)INC16 * * \*****************************************************************************/ BOOL WINAPI __export EnumThreadWindows( DWORD dwThreadId, WNDENUMPROC lpfn, LPARAM lParam) { return( FALSE ); } int WINAPI __export DrawTextEx( HDC hdc, LPCSTR lpsz, int cb, LPRECT lprc, UINT fuFormat, LPVOID lpDTP ) { Assert( ( fuFormat & ( DT_EDITCONTROL | DT_PATH_ELLIPSIS | DT_END_ELLIPSIS | DT_MODIFYSTRING | DT_RTLREADING | DT_WORD_ELLIPSIS ) ) == 0 ); Assert( lpDTP == NULL ); return( DrawText( hdc, lpsz, cb, lprc, fuFormat ) ); } // // 6/18/97 - Implemented sizing ability only // BOOL WINAPI __export DrawIconEx( HDC hdc, int xLeft, int yTop, HICON hIcon, int cxWidth, int cyHeight, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags ) { int cx = GetSystemMetrics( SM_CXICON ); int cy = GetSystemMetrics( SM_CYICON ); if ( cxWidth == 0 ) cxWidth = cx; if ( cyHeight == 0 ) cyHeight = cy; HBITMAP hbmIcon = CreateCompatibleBitmap( hdc, cx, cy ); HDC hdcIcon = CreateCompatibleDC( hdc ); HBITMAP hbmIconOld = (HBITMAP)SelectObject( hdcIcon, hbmIcon ); if ( diFlags & DI_MASK ) { COLORREF rgbTxt, rgbBk; HBITMAP hbmMask; HBITMAP hbmMaskOld; HDC hdcMask = CreateCompatibleDC( hdc ); hbmMask = CreateCompatibleBitmap( hdcMask, cx, cy ); hbmMaskOld = (HBITMAP)SelectObject( hdcMask, hbmMask ); PatBlt( hdcMask, 0, 0, cx, cy, BLACKNESS ); DrawIcon( hdcMask, 0, 0, hIcon ); PatBlt( hdcIcon, 0, 0, cx, cy, WHITENESS ); DrawIcon( hdcIcon, 0, 0, hIcon ); BitBlt( hdcMask, 0, 0, cx, cy, hdcIcon, 0, 0, SRCINVERT ); rgbTxt = SetTextColor( hdc, RGB( 0, 0, 0 ) ); rgbBk = SetBkColor( hdc, RGB( 255, 255, 255 ) ); StretchBlt( hdc, xLeft, yTop, cxWidth, cyHeight, hdcMask, 0, 0, cx, cy, ( diFlags & DI_IMAGE ) ? SRCAND : SRCCOPY ); SetTextColor( hdc, rgbTxt ); SetBkColor( hdc, rgbBk ); DeleteObject( SelectObject( hdcMask, hbmMaskOld ) ); DeleteDC( hdcMask ); } if ( diFlags & DI_IMAGE ) { PatBlt( hdcIcon, 0, 0, cx, cy, BLACKNESS ); DrawIcon( hdcIcon, 0, 0, hIcon ); StretchBlt( hdc, xLeft, yTop, cxWidth, cyHeight, hdcIcon, 0, 0, cx, cy, ( diFlags & DI_MASK ) ? SRCINVERT : SRCCOPY ); } // // Clean Up // DeleteObject( SelectObject( hdcIcon, hbmIconOld ) ); DeleteDC( hdcIcon ); return( TRUE ); } HANDLE WINAPI __export LoadImageA( HINSTANCE hInst, LPCSTR lpszName, UINT uType, int cxDesired, int cyDesired, UINT fuLoad) { return LoadBitmap(hInst, lpszName); } BOOL WINAPI __export PostThreadMessageA( DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam) { return( FALSE ); } #if 0 HICON WINAPI CopyIcon( HICON hIcon) { return( NULL ); } #endif BOOL WINAPI __export TrackPopupMenuEx( HMENU hMenu, UINT fuFlags, int x, int y, HWND hwnd, LPTPMPARAMS lptpm) { Assert( ( fuFlags & TPM_RETURNCMD ) == 0 ); // Not supported in Win16 Assert( lptpm == NULL ); // Different meaning in Win16 return( TrackPopupMenu( hMenu, fuFlags, x, y, 0, hwnd, NULL ) ); } /*****************************************************************************\ * * * From winnls.h(INC32) - It should be in the (win16x.h)INC16 * * \*****************************************************************************/ BOOL WINAPI __export IsValidCodePage( UINT CodePage) { return( TRUE ); } #if 0 int WINAPI GetTimeFormatA( LCID Locale, DWORD dwFlags, CONST SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpTimeStr, int cchTime) { return( 0 ); } int WINAPI GetDateFormatA( LCID Locale, DWORD dwFlags, CONST SYSTEMTIME *lpDate, LPCSTR lpFormat, LPSTR lpDateStr, int cchDate) { return( 0 ); } #endif BOOL WINAPI __export GetCPInfo( UINT CodePage, LPCPINFO lpCPInfo) { return( FALSE ); } BOOL WINAPI __export IsDBCSLeadByteEx( UINT CodePage, BYTE TestChar) { return( FALSE ); } /*****************************************************************************\ * * * From wincrypt.h(INC32) * * \*****************************************************************************/ // ADVAPI32 and CRYPT32 APIs. BOOL WINAPI __export CryptAcquireContextA( HCRYPTPROV *phProv, LPCSTR pszContainer, LPCSTR pszProvider, DWORD dwProvType, DWORD dwFlags) { return( FALSE ); } BOOL WINAPI __export CryptReleaseContext( HCRYPTPROV hProv, DWORD dwFlags) { return( FALSE ); } BOOL WINAPI __export CryptGetProvParam( HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags) { return( FALSE ); } BOOL WINAPI __export CryptSetProvParam( HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD dwFlags) { return( FALSE ); } BOOL WINAPI __export CryptGenKey( HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey) { return( FALSE ); } BOOL WINAPI __export CryptDestroyKey( HCRYPTKEY hKey) { return( FALSE ); } DWORD WINAPI __export CertNameToStrA( IN DWORD dwCertEncodingType, IN PCERT_NAME_BLOB pName, IN DWORD dwStrType, OUT OPTIONAL LPSTR psz, IN DWORD csz ) { return( FALSE ); } PCCERT_CONTEXT WINAPI __export CertFindCertificateInStore( IN HCERTSTORE hCertStore, IN DWORD dwCertEncodingType, IN DWORD dwFindFlags, IN DWORD dwFindType, IN const void *pvFindPara, IN PCCERT_CONTEXT pPrevCertContext ) { return( NULL ); } LONG WINAPI __export CertVerifyTimeValidity( IN LPFILETIME pTimeToVerify, IN PCERT_INFO pCertInfo ) { return( 0 ); } BOOL WINAPI __export CryptDecodeObject( IN DWORD dwCertEncodingType, IN LPCSTR lpszStructType, IN const BYTE *pbEncoded, IN DWORD cbEncoded, IN DWORD dwFlags, OUT void *pvStructInfo, IN OUT DWORD *pcbStructInfo ) { return( FALSE ); } BOOL WINAPI __export CertGetCertificateContextProperty( IN PCCERT_CONTEXT pCertContext, IN DWORD dwPropId, OUT void *pvData, IN OUT DWORD *pcbData ) { return( FALSE ); } BOOL WINAPI __export CryptEncodeObject( IN DWORD dwCertEncodingType, IN LPCSTR lpszStructType, IN const void *pvStructInfo, OUT BYTE *pbEncoded, IN OUT DWORD *pcbEncoded ) { return( FALSE ); } BOOL WINAPI __export CertCloseStore( IN HCERTSTORE hCertStore, DWORD dwFlags ) { return( FALSE ); } BOOL WINAPI __export CertFreeCertificateContext( IN PCCERT_CONTEXT pCertContext ) { return( FALSE ); } PCCERT_CONTEXT WINAPI __export CertDuplicateCertificateContext( IN PCCERT_CONTEXT pCertContext ) { return( NULL ); } HCERTSTORE WINAPI __export CertDuplicateStore( IN HCERTSTORE hCertStore ) { return( NULL ); } HCERTSTORE WINAPI __export CertOpenStore( IN LPCSTR lpszStoreProvider, IN DWORD dwEncodingType, IN HCRYPTPROV hCryptProv, IN DWORD dwFlags, IN const void *pvPara ) { return( NULL ); } BOOL WINAPI __export CryptMsgClose( IN HCRYPTMSG hCryptMsg ) { return( FALSE ); } BOOL WINAPI __export CryptMsgUpdate( IN HCRYPTMSG hCryptMsg, IN const BYTE *pbData, IN DWORD cbData, IN BOOL fFinal ) { return( FALSE ); } BOOL WINAPI __export CryptMsgGetParam( IN HCRYPTMSG hCryptMsg, IN DWORD dwParamType, IN DWORD dwIndex, OUT void *pvData, IN OUT DWORD *pcbData ) { return( FALSE ); } HCRYPTMSG WINAPI __export CryptMsgOpenToEncode( IN DWORD dwMsgEncodingType, IN DWORD dwFlags, IN DWORD dwMsgType, IN void const *pvMsgEncodeInfo, IN OPTIONAL LPSTR pszInnerContentObjID, IN OPTIONAL PCMSG_STREAM_INFO pStreamInfo ) { return( NULL ); } HCRYPTMSG WINAPI __export CryptMsgOpenToDecode( IN DWORD dwMsgEncodingType, IN DWORD dwFlags, IN DWORD dwMsgType, IN HCRYPTPROV hCryptProv, IN OPTIONAL PCERT_INFO pRecipientInfo, IN OPTIONAL PCMSG_STREAM_INFO pStreamInfo ) { return( NULL ); } PCCERT_CONTEXT WINAPI __export CertGetSubjectCertificateFromStore( IN HCERTSTORE hCertStore, IN DWORD dwCertEncodingType, IN PCERT_INFO pCertId // Only the Issuer and SerialNumber // fields are used ) { return( NULL ); } BOOL WINAPI __export CryptMsgControl( IN HCRYPTMSG hCryptMsg, IN DWORD dwFlags, IN DWORD dwCtrlType, IN void const *pvCtrlPara ) { return( FALSE ); } BOOL WINAPI __export CertCompareCertificate( IN DWORD dwCertEncodingType, IN PCERT_INFO pCertId1, IN PCERT_INFO pCertId2 ) { return( FALSE ); } #if 0 /*****************************************************************************\ * * * From winreg.h(INC32) * * \*****************************************************************************/ LONG APIENTRY RegEnumValueA ( HKEY hKey, DWORD dwIndex, LPSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ) { return( 0xFFFFFFFFL ); } #endif /*****************************************************************************\ * * * From shellapi.h(INC32) * * \*****************************************************************************/ DWORD WINAPI __export SHGetFileInfoA(LPCSTR pszPath, DWORD dwFileAttributes, SHFILEINFOA FAR *psfi, UINT cbFileInfo, UINT uFlags) { Assert( ( uFlags & SHGFI_PIDL ) == 0 ); if ( uFlags & SHGFI_ICON ) psfi->hIcon = NULL; // psfi->hIcon = CopyIcon( (HINSTANCE)GetCurrentTask(), LoadIcon( NULL, IDI_APPLICATION ) ); if ( uFlags & SHGFI_DISPLAYNAME ) StrCpyN( psfi->szDisplayName, pszPath, ARRAYSIZE(psfi->szDisplayName) ); if ( uFlags & SHGFI_TYPENAME ) StrCpyN( psfi->szTypeName, "Type Name", ARRAYSIZE(psfi->szTypeName) ); return( 0 ); } BOOL WINAPI __export Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData) { return( FALSE ); } BOOL WINAPI __export Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData) { return( FALSE ); } BOOL WINAPI __export ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo) { return( FALSE ); } BOOL WINAPI __export ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo) { return( FALSE ); } HICON WINAPI __export ExtractAssociatedIcon( HINSTANCE hInst, LPSTR lpIconPath, LPWORD lpiIcon ) { return( NULL ); } #if 0 /*****************************************************************************\ * * * From INETCOMM * * \*****************************************************************************/ IMNACCTAPI HRESULT HrCreateAccountManager(IImnAccountManager **ppAccountManager) { return( E_NOTIMPL ); } #endif /*****************************************************************************\ * * * From WIN16X(INC16) - missing APIs * * \*****************************************************************************/ BOOL WINAPI __export GetVersionEx( LPOSVERSIONINFOA lpVersionInformation ) { return( FALSE ); } BOOL WINAPI __export GetStringTypeEx( LCID Locale, DWORD dwInfoType, LPCTSTR lpSrcStr, int cchSrc, LPWORD lpCharType ) { *lpCharType = 0; if(dwInfoType == CT_CTYPE1) { // Simple bug fix for IsDigit. if(lpSrcStr[0] >= '0' && lpSrcStr[0] <= '9') *lpCharType |= C1_DIGIT; } return( TRUE ); } HPALETTE WINAPI __export CreateHalftonePalette(HDC hDC) { return( NULL ); } BOOL WINAPI __export StretchBlt32(HDC, int, int, int, int, HDC, int, int, int, int, DWORD) { return( FALSE ); } STDAPI __export LoadTypeLib(const OLECHAR FAR* szFile, ITypeLib FAR* FAR* pptlib) { return( E_NOTIMPL ); } STDAPI __export RegisterTypeLib( ITypeLib FAR* ptlib, OLECHAR FAR* szFullPath, OLECHAR FAR* szHelpDir) { return( E_NOTIMPL ); } HWND WINAPI __export HtmlHelpA( HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD dwData ) { return( NULL ); } } // extern "C" #if 0 /*****************************************************************************\ * * * From NEWS * * \*****************************************************************************/ // // NOTE: This function must be CPP // void Output(HWND hwnd, int id, LPSTR sz) { } /*****************************************************************************\ * * * From PSTOREC * * \*****************************************************************************/ BOOL __stdcall GetPStoreProvider( IPStoreProvider __RPC_FAR *__RPC_FAR *ppProvider, PPST_PROVIDERINFO pProviderInfo, DWORD dwReserved) { return( FALSE ); } BOOL __stdcall EnumPStoreProviders( DWORD dwFlags, IEnumPStoreProviders __RPC_FAR *__RPC_FAR *ppenum) { return( FALSE ); } #endif /*****************************************************************************\ * * * From Shlwapi.h(INC16) - SHLWAPI APIs * * \*****************************************************************************/ STDAPI_(LPSTR) __export PathFindExtensionA(LPCSTR pszPath) { return( NULL ); } STDAPI_(LPSTR) __export PathFindFileNameA(LPCSTR pszPath) { return( NULL ); } STDAPI_(LPSTR) __export StrStrA(LPCSTR lpFirst, LPCSTR lpSrch) { return( NULL ); } STDAPI_(LPSTR) __export StrFormatByteSizeA(DWORD dw, LPSTR szBuf, UINT uiBufSize) { return( NULL ); } /*****************************************************************************\ * * * From Shlwapip.h(INC16) - SHLWAPI APIs * * \*****************************************************************************/ STDAPI_(HRESULT) __export UrlUnescapeA( LPSTR pszUrl, LPSTR pszUnescaped, LPDWORD pcchUnescaped, DWORD dwFlags) { return( NULL ); }