Listing 5 Providing missing functions

#ifdef WDN_SHAREDCU

# define GetFileSizeEx_impl         GetFileSizeEx

. . .

#endif /* WDN_SHAREDCU */

. . .

static BOOL WINAPI GetFileSizeEx_impl_NT(HANDLE hFile, PLARGE_INTEGER lpFileSize)
{
  typedef BOOL (WINAPI *PFnGetFileSizeEx)(HANDLE , PLARGE_INTEGER );

  PFnGetFileSizeEx  pfn = (PFnGetFileSizeEx)GetProcAddress(GetInstance_Kernel32(), "GetFileSizeEx");

  return (NULL == pfn) ? FALSE : pfn(hFile, lpFileSize);
}

static BOOL WINAPI GetFileSizeEx_impl_9x(HANDLE hFile, PLARGE_INTEGER 			lpFileSize)
{
  DWORD dwHigh;
  DWORD dwLow = GetFileSize(hFile, &dwHigh);

  if( dwLow != INVALID_FILE_SIZE ||
      GetLastError() == ERROR_SUCCESS)
  {
    lpFileSize->LowPart = dwLow;
    lpFileSize->HighPart = dwHigh;

    return TRUE;
  }

  return FALSE;
}

#ifdef WDN_SHAREDCU
# pragma warning(disable : 4273)
#endif /* WDN_SHAREDCU */

#ifdef WDN_DLL
extern __declspec(dllexport)
#endif /* WDN_DLL */
BOOL WINAPI GetFileSizeEx_impl(HANDLE hFile, PLARGE_INTEGER lpFileSize)
{
  if(IsWinNT4Plus())
  {
    debug_printf("GetFileSizeEx_impl: calling GetFileSizeEx_impl_NT()\n");

    return GetFileSizeEx_impl_NT(hFile, lpFileSize);
  }
  else
  {
    debug_printf("GetFileSizeEx_impl: calling GetFileSizeEx_impl_9x()\n");

    return GetFileSizeEx_impl_9x(hFile, lpFileSize);
  }
}

#ifdef WDN_SHAREDCU
# pragma warning(default : 4273)
#endif /* WDN_SHAREDCU */