Windows CE .NET 4.2 Product Update Rollup, December 31, 2005

 

2006 Microsoft Corporation. All rights reserved.

 

How to Install this update

All updates for Windows CE .NET 4.2 require the following:

 

1) Platform Builder .NET 4.2 is installed on the machine.

2) The current user has run Platform Builder .NET 4.2 at least once.

3) Upon installing, the platforms must be rebuilt using the "Rebuild Platform" menu option.

 

Please download the file(s) most appropriate for your installation, as follows:

 

 

WinCEPB42-051231-Product-Update-Rollup-ARMV4I.MSI      For installation based upon ARMV4I processors
WinCEPB42-051231-Product-Update-Rollup-ARMV4.MSI      For installation based upon ARMV4 processors
WinCEPB42-051231-Product-Update-Rollup-MIPSII_FP.MSI      For installation based upon MIPSII-FP processors
WinCEPB42-051231-Product-Update-Rollup-MIPSII.MSI      For installation based upon MIPSII processors
WinCEPB42-051231-Product-Update-Rollup-MIPSIV_FP.MSI      For installation based upon MIPSIV-FP processors
WinCEPB42-051231-Product-Update-Rollup-MIPSIV.MSI      For installation based upon MIPSIV processors
WinCEPB42-051231-Product-Update-Rollup-SH3.MSI      For installation based upon SH3 processors
WinCEPB42-051231-Product-Update-Rollup-SH4.MSI      For installation based upon SH4 processors
WinCEPB42-051231-Product-Update-Rollup-X86.MSI      For installation based upon X86-based processors

 

 

This package will install all updates directly to the build environment specified by the original Platform Builder installation.  This is specified by the following registry key: HKLM\Software\Microsoft\Platform Builder\&!&\Directories - "OS Install Root".  By default, a backup of all updated files will be maintained at the following location:  %_WINCEROOT%\Updates\Backup.  You can remove any files from this directory at your choosing.

 

 

If You Have Installed Previous Updates

If you have installed previous updates, this package will update your build environment to include the latest files for this component.

 

If You See "Files that will not be installed"

If this message is displayed, it means that you have an update installed with a later version of the files then those that are being installed.  You already have the updates mentioned in this document including some updates released later.  This message is displayed to prevent accidental overwrite of the latest update to that particular component.

 

By Component:

 

Component:  1394 Bus

Component:  1394 SBP-2

Component:  ActiveSync

Component:  AFD

Component:  ATL

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     others\atl\include\ATLCOM.H

Component:  Bluetooth

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     
  public\common\oak\drivers\bluetooth\transports\bcsp\csr\hcibcsp.cpp
     public\common\oak\inc\bt_ioctl.h
     public\common\oak\lib\ARMV4\debug\btdrt.def
     public\common\oak\lib\ARMV4\retail\btdrt.def
     public\common\oak\lib\ARMV4I\debug\btdrt.def
     public\common\oak\lib\ARMV4I\retail\btdrt.def
     public\common\oak\lib\MIPSII\debug\btdrt.def
     public\common\oak\lib\MIPSII\retail\btdrt.def
     public\common\oak\lib\MIPSII_FP\debug\btdrt.def
     public\common\oak\lib\MIPSII_FP\retail\btdrt.def
     public\common\oak\lib\MIPSIV\debug\btdrt.def
     public\common\oak\lib\MIPSIV\retail\btdrt.def
     public\common\oak\lib\MIPSIV_FP\debug\btdrt.def
     public\common\oak\lib\MIPSIV_FP\retail\btdrt.def
     public\common\oak\lib\SH3\debug\btdrt.def
     public\common\oak\lib\SH3\retail\btdrt.def
     public\common\oak\lib\SH4\debug\btdrt.def
     public\common\oak\lib\SH4\retail\btdrt.def
     public\common\oak\lib\x86\debug\btdrt.def
     public\common\oak\lib\x86\retail\btdrt.def
     public\common\sdk\inc\bt_api.h
     private\winceos\COMM\bluetooth\rfcomm\portemu.cxx
     private\winceos\COMM\bluetooth\rfcomm\rfcomm.cxx
     private\winceos\COMM\bluetooth\runtime\btdrt.cxx
     private\winceos\COMM\bluetooth\runtime\btdrt.def
     private\winceos\COMM\bluetooth\sys\btd.cxx
     private\winceos\COMM\bluetooth\tdi\tdi.cxx     
     public\common\oak\drivers\bluetooth\sample\btdc\btclient.cxx
     public\common\oak\inc\bt_ddi.h
     private\winceos\COMM\bluetooth\hci\base\hci.cxx

     public\common\oak\drivers\bluetooth\sample\btcp\btcp.cxx

     private\winceos\comm\bluetooth\sdp\base\btsdpcon.cpp
     private\winceos\comm\bluetooth\sdp\inc\btsdp.h

Component:  CEDRMUTIL

Component:  CELOG

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     private\winceos\COREOS\nk\celog\celog.c
     private\winceos\COREOS\nk\kernel\profiler.c

Component:  CEMGR

Component:  Certificates

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

    
 private\test\gwes\gdi\gdiapi\global.cpp

Component:  CETK

If the user is testing a device that does not have a KITL connection to Platform Builder, the user may specify a location accessible to the device, such as a storage card attached to the device or a writable network share. To enable bitmap creation in the release directory, pass the parameter /o to the test dll.

 

To enable bitmap creation in a user specified location, pass /o followed by the path where the bitmap should be stored. The bitmaps can be saved to any location the device has a write access to. Please be certain the location exists before attempting to run the test.

 

To pass the parameter from the tux command line to the test dll, use the tux -c parameter, encapsulating the full text of the /o option in the double quotes.

 

For example, to save the test failure bitmaps to a compact flash card, append -c"/o \storage card" to the existing command line as it appears in the CETK. The full command line would appear as 'tux -o -d gdiapi -c"/o \storage card"'.

Component:  Codecs

Component:  Comm

[HKEY_LOCAL_MACHINE\Comm\Tcpip\Parms]

"IGMPVersion"=dword:3

 

If the value does not exist, IGMPv3 will be used to connect to a router.

If the value is set to dword:2, it will use IGMPv1 to connect to a router.

If the value is set to dword:3, it will use IGMPv2 to connect to a router.

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

private\winceos\COMM\bluetooth\sys\btd.cxx

private\winceos\comm\bluetooth\hci\base\sources

public\common\oak\drivers\netui\getuser.c
public\common\oak\drivers\netui\netui.def
public\common\oak\inc\eap.h
public\common\oak\lib\ARMV4\debug\netui.def
public\common\oak\lib\ARMV4\retail\netui.def
public\common\oak\lib\ARMV4I\debug\netui.def
public\common\oak\lib\ARMV4I\retail\netui.def
public\common\oak\lib\MIPSII\debug\netui.def
public\common\oak\lib\MIPSII\retail\netui.def
public\common\oak\lib\MIPSII_FP\debug\netui.def
public\common\oak\lib\MIPSII_FP\retail\netui.def
public\common\oak\lib\MIPSIV\debug\netui.def
public\common\oak\lib\MIPSIV\retail\netui.def
public\common\oak\lib\MIPSIV_FP\debug\netui.def
public\common\oak\lib\MIPSIV_FP\retail\netui.def
public\common\oak\lib\SH3\debug\netui.def
public\common\oak\lib\SH3\retail\netui.def
public\common\oak\lib\SH4\debug\netui.def
public\common\oak\lib\SH4\retail\netui.def
public\common\oak\lib\x86\debug\netui.def
public\common\oak\lib\x86\retail\netui.def

Component:  Common Controls

Component:  Compiler

Component:  Core

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

private\winceos\COREOS\core\dll\time.c

Component:  Core GWES

The file(s) with the new public source code changes for this component can be found in the directory %_WINCEROOT%\:

 
    private\winceos\coreos\gwe\mgdi\inc\gdiobj.h

Component:  Cursor

Component:  Database API

Component:  DCOM

Component:  Debugger

Component:  DHCP

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

private\winceos\COMM\dhcp\autonet.c
private\winceos\COMM\dhcp\dhcp.c
private\winceos\COMM\dhcp\dhcpp.h
private\winceos\COMM\dhcp\init.c
private\winceos\COMM\dhcp\packet.c
private\winceos\COMM\inc\dhcp.h

Component:  Diffbin

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

private\winceos\coreos\nk\tools\romimage\diffbin\imgdata.cpp

Component:  DirectDVD

Component:  DirectX

        Description of the issues addressed in this update:

Inside the DRM OCX

The support for such a feature either has to come from the client side or the server side.  Windows CE provide a way for the client to be notified that a DRM license has been successfully acquired.  The OCX will call the GetExternal method of IDocHostUIHandler which will return an IDispatch interface from the host application of the browser.  The final stage is for the OCX to call "LicenseAcquired" that has been exposed by the host application of the browser.   The function has one parameter which is a BOOL where TRUE indicates that a license has been acquired and FALSE otherwise.

Inside the host application of the browser

To set up the proper calling sequence the host application of the browser must enable the "LicenseAcquired" method by first enabling an IDispatch interface to be returned.

// IDocHostUIHandler methods

STDMETHOD(GetExternal)(IDispatch **ppDispatch)

{ *ppDispatch = (IDispatch *)this; return S_OK ; }

Note that the application can implement a separate object for IDispatch requests instead of using ‘this’ in GetExternal.

When a license is acquired, the OCX initiates call to IDispatch::Invoke.  Therefore inside your implementation of IDispatch::Invoke a new dispatch ID is required. 

#define DISPID_LICENSEACQUIRED            <nnn>

    [id(DISPID_LICENSEACQUIRED), helpstring("Fired when License is acquired."), helpcontext(0x0000)]

    HRESULT LicenseAcquired([in] VARIANT_BOOL varResult );

Now you can modify IDispatch::Invoke method on the following lines:

case DISPID_LICENSEACQUIRED :

    VARIANT_BOOL fAcquired;

fAcquired = pdparams->rgvarg[0].boolVal;

    LicenseAcquired( fAcquired ) ;

    break ;

where definition of LicenseAcquired can be as follows:

HRESULT       LicenseAcquired( VARIANT_BOOL varRestult )

{

MessageBox(NULL, L"License”, "Notification",MB_OK|MB_ICONSTOP);

...

...

return S_OK ;

}

At this point you have received notification on the status of a license and can make further callouts as necessary as shown by the code snippet.

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

    public\directx\cesysgen\makefile

    public\directx\sdk\inc\axcore.idl

    public\directx\sdk\inc\playlist.h

    public\directx\sdk\inc\strmif.h

    public\directx\sdk\samples\ddvd\dvdsample\appstate.cpp
    public\directx\sdk\samples\ddvd\dvdsample\appstate.h
    public\directx\sdk\samples\ddvd\dvdsample\dvdcore.cpp
    public\directx\sdk\samples\ddvd\dvdsample\dvdcore.h
    public\directx\sdk\samples\ddvd\dvdsample\dvdsink.cpp
    public\directx\sdk\samples\ddvd\dvdsample\sinkmsg.h

    public\directx\sdk\inc\dvdnav.h
    public\directx\sdk\inc\dvdnav.idl

    public\directx\oak\files\directx.reg

    private\servers\smbprint\dialects\pc_net_prog.cpp
    private\servers\smbprint\fileserver\code\fileserver.cpp
    private\servers\smbprint\inc\fileserver.h
    private\servers\smbprint\inc\smbpackets.h

Component:  EAP/CHAP

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     public\common\oak\inc\netui.h

Component:  EAPOL

Component:  Edit Control

Component:  FAL

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     public\common\oak\drivers\fsd\fatutil\main\formatdisk.cpp

Component:  FATFS

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     private\winceos\COREOS\fsd\fatfs\misc.c
   
  private\winceos\COREOS\fsd\fatfs\path.c

     private\winceos\COREOS\fsd\fatfs\disk.c
     private\winceos\COREOS\fsd\fatfs\fat.c     
     private\winceos\COREOS\fsd\fatfs\cache.c          
     private\winceos\COREOS\fsd\fatfs\fatfs.h          
     private\winceos\COREOS\fsd\fatfs\stream.c             
     private\winceos\COREOS\fsd\fatfs\volume.c
     public\shell\oak\hpc\ceshell\ceshell.cpp
     public\shell\oak\hpc\ceshell\copyfilepriv.cpp
     private\winceos\COREOS\fsd\fatfs\api.c

     private\winceos\coreos\fsd\fatfs\name.c

Component:  FATUTIL

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

    
 public\common\oak\drivers\fsd\fatutil\main\formatdisk.cpp

Component:  FILESYS

For the first issue, the update checks that El Torito is not considered as a valid volume descriptor. For the second, it makes sure that we default to the recognized file system on those CDs which have multiple SVDs containing at least one unsupported file system (regardless of the order of SVDs).

 

NOTE:  This was formerly released as update 030731_KB824427.  That is the incorrect KB article number.  All references to this update are now changes to 030731_KB824247.

This registry key has to be enabled in order to force LFN generation:

[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]
"Flags"=dword:00800064

The file(s) with the new public source code changes for this component can be found in directory %_WINCEROOT%\:

public\common\oak\drivers\block\msflashfmd\sdnpci\fmd.cpp
public\common\oak\drivers\ethdbg\bootpart\bootpart.cpp

private\winceos\COREOS\fsd\fatfs\cache.c
private\winceos\COREOS\fsd\fatfs\find.c

private\winceos\COREOS\storage\dospart\part.cpp

private\winceos\COREOS\fsd\udfs\udfscdfs.cpp

private\winceos\COREOS\fsd\fatfs\fatfs.h

private\winceos\COREOS\fsd\fatfs\find.c

private\winceos\COREOS\fsd\fatfs\name.c

private\winceos\COREOS\storage\fsdmain\fsdmain.cpp

private\winceos\COREOS\storage\fsdmain\sources

private\winceos\COREOS\storage\fsdserv\fsdalloc.cpp

private\winceos\COREOS\storage\fsdserv\fsdapis.cpp

private\winceos\COREOS\storage\fsdserv\fsdserv.cpp

private\winceos\COREOS\storage\inc\fsdmgrp.h

private\winceos\COREOS\storage\storemgr\storemain.cpp

private\winceos\COREOS\fsd\fatfs\volume.c

private\winceos\coreos\storage\fsdserv\fsdapis.cpp

Component:  Firewall

Component:  FSDMGR

The registry key which controls this:

 [HKEY_LOCAL_MACHINE\System\StorageManager]

 "PNPThreadPrio256"=dword:<value>

where the <value> is the priority value in hexadecimal.

        The following regkey has to be implemented to enable the fix:

 

            [HKEY_LOCAL_MACHINE\System\StorageManager\<MyProfile>]

            "MountFlags"=dword:40

MountFlags in the storage profile set to dword:40 forces the store to be treated as permanent. All attempts to dismount or to delete partitions will fail.

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     private\winceos\COREOS\storage\storemgr\store.cpp
     private\winceos\COREOS\storage\storemgr\storemain.cpp

     public\common\oak\files\common.reg
     public\common\oak\inc\pwindbas.h
     private\winceos\COREOS\storage\fsdmain\fsdmain.cpp

Component: General

There are two registry settings which control this.

[HKEY_LOCAL_MACHINE\Comm\Tcpip\Parms\NumForwardPackets]

[HKEY_LOCAL_MACHINE\Comm\Tcpip\Parms\MaxNumForwardPackets]

NumForwardPackets specifies the number allocated initially whereas MaxNumForwardPackets specifies the maximum that can be allocated. Note that when MaxNumForwardPackets is greater than NumForwardPackets any allocations made after the NumForwardPackets number of allocations will be slower as these buffers will be allocated/deallocated dynamically. For maximum efficiency NumForwardPackets should be equal to MaxNumForwardPackets in most cases.

Component:  GWES

Component:  HTTPD

The following registry key have to be added to allow configuration of the Web Server timeout:

[HKEY_LOCAL_MACHINE\COMM\HTTPD\]

"ServerTimeout"=dword:<timeout in ms>

The default timeout is 30000 milliseconds (dword:00007530).

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     private\servers\http\core\request.h
     private\servers\http\auth\auth.cpp
     private\servers\http\auth\ssl.cpp
     private\servers\http\core\httpd.h
     private\servers\http\core\httpmain.cpp
     private\servers\http\extns\extns.cpp
     private\servers\http\extns\extns.h
     private\servers\http\parser\buffio.cpp
     private\servers\http\parser\buffio.h

Component:  IDE

Component:  IE

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     public\ie\oak\iesample\core\animthrd.cpp
     public\ie\oak\iesample\core\animthrd.h
     public\ie\oak\iesample\core\mainwnd.cpp

Component:  Imaging

Component:  IME

The file(s) with the new public source code changes for this component can be found in directory %_WINCEROOT%\:

public\wceshellfe\oak\inputmethods\korean\msimk\im.cpp
public\wceshellfe\oak\inputmethods\korean\msimk\im.h

public\wceshellfe\oak\inputmethods\korean\msimk\sip_i.c

Component:  IPSec

Component:  IPv6

Component:  IR

Component:  IRCOMM

Component:  Kernel

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     private\winceos\coreos\nk\inc\heap.h

     private\winceos\coreos\nk\kernel\loader.c

Component:  L2TP

Component:  LDAP

Component:  Makeimg

Component:  Messenger

The date on the device must be current in order for Messenger to be able to acquire the proper certificate authentication for MSNP8.

 

If proxy settings are necessary to connect to the Internet, the proxy settings for Windows Messenger must also be set accordingly.

The file(s) with the new public source code changes for this component can be found in directory %_WINCEROOT%\:

public\common\sdk\inc\rtccore.h
public\common\sdk\inc\rtccore.idl
public\common\sdk\inc\rtcerr.h

public\directx\cesysgen\makefile

Component:  MFC

Description of issues addressed in this update:

These are fixes in MFC OLECE400(d).DLL libraries that result in an assert for the described dispatch parameter types, incorrect function parameters and return values on SH3, SH4, MIPSII_FP and MIPSIV_FP platforms.

This update modifies the following MFC source files: dispimpl.h, oledisp1.cpp, oledisp2.cpp, and afxdisp.h. This package also updates the MFC libraries OLECE400(d).DLL. The updated MFC libraries can be redistributed when exporting a platform SDK.

Information for OEMs (Original Equipment Manufacturers):
After applying this update, a platform SDK should be re-exported to update it with the libraries and source files provided by this update. It is not necessary to rebuild any DLLs included in the platform that use the shared MFC DLL.

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

others\mfc\include\MIPS2ThunkBldr.h
others\mfc\include\MIPS4ThunkBldr.h
others\mfc\include\SH4ThunkBldr.h
others\mfc\src\oledisp1.cpp

others\mfc\include\afxdisp.h
others\mfc\src\dispimpl.h
others\mfc\src\oledisp2.cpp

others\mfc\src\wceole.cpp

Component:  MLANG

Component:  MSHTML

Component:  MSPY2

Component:  MSXML

The file(s) with the new public source code changes for this component can be found in the directory %_WINCEROOT%\:

     public\ie\oak\files\ie.reg

Component:  Multimedia

When mapping a frame buffer to virtual memory, write-combining may now be enabled by setting a memory attribute in the kernel. For example:

if(VirtualCopy((void *)(pVirtualAddress, (void *)(pPhysicalAddress >> 8), cbBytesToMap,

                            PAGE_READWRITE | PAGE_PHYSICAL | PAGE_NOCACHE))

{

        CeSetMemoryAttributes(void *)(pVirtualAddress, (void *)(pPhysicalAddress >> 8), cbBytesToMap,

                            PAGE_WRITECOMBINE);

}

Hardware support must also be provided in the OAL via MTRR (Memory Type Range Registers) or the PAT (Page Attribute Table). Sample code changes are provided for the x86 processors. To implement, a user has to add the following lines to OEMInit():

g_dwCPUFeatures = IdentifyCPU();

InitializePATAndMTRR();

Several new functions have been added to cfwpc.c to implement these changes:

WriteMTRRRegPair()

DumpMTRR()

CheckExistingMTRR()

PATSetMemoryAttributes()

MTRRSetMemoryAttributes()

OEMSetMemoryAttributes()

InitializePATAndMTRR()

The file(s) with the new public source code changes for this component can be found in directory %_WINCEROOT%\:

public\common\oak\csp\i486\inc\msr.h
public\common\oak\csp\i486\oal\cfwpc.c
public\common\oak\csp\i486\oal\oeminit.asm
public\common\oak\drivers\display\ati\ati.cpp
public\common\oak\drivers\display\mq200\config.cpp
public\common\oak\drivers\display\perm3\memory.c
public\common\oak\drivers\display\rflat\rflat.cpp
public\common\oak\drivers\display\tvia5000\config.cpp
public\common\oak\drivers\display\vgaflat\gpeflat.cpp
public\common\oak\inc\pkfuncs.h

public\common\sdk\inc\winnt.h

private\winceos\COREOS\nk\inc\kernel.h
private\winceos\COREOS\nk\inc\kwin32.h
private\winceos\COREOS\nk\inc\mem_x86.h

private\winceos\COREOS\nk\inc\nkx86.h

private\winceos\COREOS\nk\kernel\kdriver.c
private\winceos\COREOS\nk\kernel\kwin32.c
private\winceos\COREOS\nk\kernel\virtmem.c

private\winceos\COREOS\nk\kernel\x86\fault.c

Component:  NDIS

The following registry switches have to be applied to address this issue:

For memory-mapped I/O:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NDIS]

    "NeedsMapToScrap"=dword:1     ; any non-0 value

For bus I/O:

 

        [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NDIS]

            "NeedsMapToScrap"=dword:0

Component:  .Net Compact Framework

Description of issues addressed in this update:

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

public\netcf\cesysgen\makefile
public\netcf\oak\files\netcf.bib
public\netcf\oak\files\netcf.reg

Component:  NetBIOS

The following registry keys are required to enable this fix:

[HKEY_LOCAL_MACHINE\Comm\NetBIOS]
"EnableLoopBack"=dword:1


"EnableLoopBack" must be set to any non-zero value to enable loopback on the device. The default behavior when this value is not present is to disable loopback. The fix also requires a registry entry for a dummy "localhost" adapter, e.g., as follows:

[HKEY_LOCAL_MACHINE\Services\SMBServer]
"AdapterList"="VMINI1;localhost"

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     
private\servers\smbprint\transport\netbiostransport.cpp

Component: NETUI

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

      
 public\common\oak\inc\netui.h

      public\common\oak\drivers\netui\wzcprops.c

Component:  NK

This Registry setting allows unprivileged applications read-only access to SYSTEM files.

[HKEY_LOCAL_MACHINE\System\ObjectStore]

"AllowSystemAccess"=dword:1

This registry key enables a device-side JIT debugger:

[HKEY_LOCAL_MACHINE\Debug]

"LaunchJITOnFirstChance"=dword:1

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

private\winceos\COREOS\nk\kernel\kmisc.c

private\winceos\COREOS\nk\kernel\loader.c

private\winceos\COREOS\nk\kernel\schedule.c

private\winceos\COREOS\core\dll\apis.c

private\winceos\COREOS\nk\kernel\x86\mdx86.c

private\winceos\COREOS\nk\kernel\arm\mdarm.c

private\winceos\COREOS\nk\mapfile\mapfile.c

private\winceos\COREOS\nk\kernel\pgpool.c

private\winceos\COREOS\nk\kernel\virtmem.c

private\winceos\COREOS\nk\celog\celog.c

private\winceos\COREOS\nk\kernel\profiler.c

Component:  OLE Headers

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

    
 public\common\sdk\inc\olectl.h

Component:  OLEAUT32

Component:  PDF Viewer

       Description of issues addressed in this update:

o        Provide Adobe Type 1 and Type 3 font support in the PDF viewer

o        Add character mapping support for Korean, Japanese, Chinese (Simplified) and Chinese (Traditional) using the predefined Adobe Character mapping files (CMAPs)

o        Allow PDF files created using Crystal Reports to be correctly opened

o        Allow correct mapping of European characters to the proper Unicode value

o        Support demand loading of pages, provide quick document load times

Viewer enhancements and updates

 

This PDF Viewer update adds character mapping support for Korean, Japanese, Chinese (Simplified) and Chinese (Traditional) using the predefined Adobe character mapping files (CMAPs).  The Microsoft PDF viewer uses these character mapping files to map from the character index used in a document to a matching TrueType glyph, using the glyph’s Unicode value.  When a document is opened that requires a predefined mapping, the PDF Viewer will attempt to locate the appropriate character mapping file in the \Windows directory.

 

There are a total of 16 predefined character mapping files provided, four files for each of the four Far East languages.  The table below contains the files required for each language:

 

Japanese

 

Adobe-Japan1-UCS2

90ms-RKSJ-UCS2

90pv-RKSJ-UCS2

90pv-RKSJ-UCS2C

Korean

 

Adobe-Korea1-UCS2

KSCms-UHC-UCS2

KSCpc-EUC-UCS2

KSCpc-EUC-UCS2C

Chinese Simplified

 

Adobe-GB1-UCS2

GBK-EUC-UCS2

GBpc-EUC-UCS2

GBpc-EUC-UCS2C

Chinese Traditional

 

Adobe-CNS1-UCS2

ETen-B5-UCS2

B5pc-UCS2

B5pc-UCS2C

 

 

These tables are not automatically added to the image when the Microsoft PDF Viewer is selected.  The files exist in the following location:

 %_WINCEROOT%\public\viewers\oak\files\pdfviewertbls

During the build process all the files are copied to the %_FLATRELEASEDIR%.  An OEM at that point can use a modified MyProject.BIB file to include the required files.  The files should only be added to the FILES section of the BIB file and by default should be compressed to save space.

 

FILES

Adobe-Japan1-UCS2. %_FLATRELEASEDIR%\CEPC\x86\iabase\retail\ Adobe-Japan1-UCS2.          NK 

 

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

public\viewers\cesysgen\makefile

Component: Performance

o        Optimized forwarding path in networking components (TCP/IP, NAT, firewall and bridge) to increase performance on CPUs with small instruction and data caches.

o        Modified networking components to allocate memory from physical address region to reduce number of TLB misses (most benefit for platforms with SW TLB miss handler). See Enabling IMGLOADNETHIGH section.

o        Modified networking components to allow them to be optionally run from physical address region to reduce number of TLB misses (most benefit for platforms with SW TLB miss handler).

o        Modified interrupts to allow them to be shared among network controllers, which can reduce task switching (and increase performance) in routing scenarios.  In order to take advantage of this change, the OEM will need to implement some changes in the OAL code. See Shared IST section for details.

 

    There is an additional information for this update at the end of the document.

 

Component:  pIE

Component:  Platform Manager

Component:  PMail

Component:  PPP

This update introduces an algorithm to detect if a PPP link is unresponsive by use of the LCP echo request mechanism.  If a link is determined to be idle (no packets received for ½ of the disconnect timeout interval), then the CE PPP implementation will begin sending LCP echo request messages periodically until either a response is received from the peer, or the timeout is exceeded.  If no packets are received for the disconnect timeout interval, the connection is terminated.   Several registry settings exist to configure this behavior, described below:

 

By default, dead link detection is only enabled for PPPoE connections. The specific device types for which it is enabled can be specified by setting the registry value:

[HKEY_LOCAL_MACHINE\Comm\Ppp\Parms]

"LcpIdleDeviceTypes"=multi_sz:<values>

where values are device type strings such as vpn, direct, or pppoe.  Default is pppoe.

 

The following setting can be used to configure the disconnect timeout. Values are in milliseconds. Default is 15000 (15 seconds).

[HKEY_LOCAL_MACHINE\Comm\Ppp\Parms]

“LcpIdleDisconnectMs”=DWORD:<value>

The following can be used to configure the time between sending echo requests when the line is idle.  Values are in milliseconds. Default is 1000 (1 second).

[HKEY_LOCAL_MACHINE\Comm\Ppp\Parms]

“LcpEchoRequestIntervalMs”=DWORD:<value>

Component: PPPoE

The number of buffers was made registry configurable with this fix, using the following registry key:

[HKEY_LOCAL_MACHINE\Comm\PPPOE1\Parms]
   "MaxSendPackets"=dword:30

Where the dword value is the maximum number of transmit buffers.

Component:  PPTP

Component:  RAS

The following registry key must be set in the project.reg file before building an image:

[HKEY_LOCAL_MACHINE\ExtModems\HayesCompat]

"CmdSendDelay"=dword:0xc8

 NOTE: the 0xc8 is a preferred delay value (equating to a delay of 200 msec). The users may have to find a suitable ‘modem command send delay’ value pertaining to their own hardware.

 

 

The file(s) with the new public source code changes for this component can be found in directory %_WINCEROOT%\:

private\winceos\COMM\tapi\unimodem\modem.c

Component:  RES2EXE.EXE

Component:  RDP

public\rdp\cesysgen\makefile
public\rdp\oak\files\rdp.bib
public\rdp\oak\files\rdp.reg
public\rdp\oak\uit\dirs
public\rdp\oak\uit\filterfs\file.cpp
public\rdp\oak\uit\filterfs\filterfs.h
public\rdp\oak\uit\filterfs\find.cpp
public\rdp\oak\uit\filterfs\main.cpp
public\rdp\oak\uit\filterfs\makefile
public\rdp\oak\uit\filterfs\path.cpp
public\rdp\oak\uit\filterfs\sources

public\iabase\oak\misc\cesysgen.bat

Component:  Redir

Component:  Regcomp

Component:  ROMIMAGE

The file(s) with the new public source code changes for this component can be found in directory %_WINCEROOT%\:

private\winceos\COREOS\nk\tools\romimage\ribld.bat

private\winceos\COREOS\nk\tools\romimage\compbin\compbin.cpp

private\winceos\coreos\nk\tools\romimage\diffbin\reloc.cpp

private\winceos\coreos\nk\tools\romimage\romimage\config.cpp

private\winceos\COREOS\nk\tools\romimage\compbin\config.h

private\winceos\COREOS\nk\tools\romimage\compbin\memory.cpp

private\winceos\COREOS\nk\tools\romimage\compbin\memory.h

private\winceos\COREOS\nk\tools\romimage\compbin\module.cpp

private\winceos\COREOS\nk\tools\romimage\compbin\module.h

private\winceos\COREOS\nk\tools\romimage\compbin\pbtimebomb.h

private\winceos\COREOS\nk\tools\romimage\compbin\romimage.cpp

private\winceos\COREOS\nk\tools\romimage\stampbin\stampbin.c

Component:  Security

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

public\common\oak\files\common.reg

Component:  SERVICES

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

private\servers\services\lib\servacpt.cpp

Component:  SHDOCVW

Component:  Shell

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

public\shell\oak\hpc\explorer\taskbar\taskbar.cpp

private\shell\shellpsl\haveaygshell\keymap.cpp

Component:  SMBFile

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     private\servers\smbprint\dialects\pc_net_prog.cpp
     private\servers\smbprint\fileserver\code\fileserver.cpp
     private\servers\smbprint\inc\fileserver.h
     private\servers\smbprint\inc\smbpackets.h

Component:  SNMP

Component:  Software Mixer

Component:  Stampbin

Component:  TAPI

Component:  TCP/IP

Component:  TFAT

        In the case of FAT12 or FAT16, it is also necessary to specify FATFS_DISABLE_TFAT_REDIR (bit-wise OR with 0x00100000) in the

        registry flags to fix the issue:

        [HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]

        “Flags”=dword:01540054

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     private\winceos\COREOS\fsd\fatfs\api.c
     private\winceos\COREOS\fsd\fatfs\buffer.c
     private\winceos\COREOS\fsd\fatfs\cache.c
     private\winceos\COREOS\fsd\fatfs\cacherw.c
     private\winceos\COREOS\fsd\fatfs\disk.c
     private\winceos\COREOS\fsd\fatfs\fatfs.h
     private\winceos\COREOS\fsd\fatfs\find.c
     private\winceos\COREOS\fsd\fatfs\path.c
     private\winceos\COREOS\fsd\fatfs\volume.c

     private\winceos\COREOS\fsd\fatfs\fat.c

Component:  Transcriber

Component:  TV Lens

Component:  UDFS

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     private\winceos\COREOS\fsd\udfs\udfs.h
     private\winceos\COREOS\fsd\udfs\udfscdda.cpp
     private\winceos\COREOS\fsd\udfs\udfscdfs.cpp
     private\winceos\COREOS\fsd\udfs\udfsinit.cpp
     private\winceos\COREOS\fsd\udfs\udfsmain.cpp
     private\winceos\COREOS\fsd\udfs\udfsmnt.cpp
     private\winceos\COREOS\fsd\udfs\udfssrch.cpp
     private\winceos\COREOS\fsd\udfs\udfsudfs.cpp
     private\winceos\COREOS\fsd\udfs\udfscln.cpp
     private\winceos\COREOS\fsd\udfs\udfshelper.h

     private\winceos\coreos\fsd\udfs\udfsfind.cpp

Component:  Unimodem

A new configurable registry key was added in order to provide a delay between commands sent to a modem to accommodate slower-responding modems:

[HKEY_LOCAL_MACHINE\ExtModems]

value: "CmdSendDelay"=DWORD:FA

Where the DWORD value is 0-500ms, entered as a hexadecimal. 250ms (FAh) as shown above is for example purposes only. Your modem may require a larger, smaller or no delay value.


No delay is introduced between commands if the CmdSendDelay value is not present.


If a value greater than 500ms is used it will default to 500ms, as 500ms is the maximum allowable delay this update allows.


The CmdSendDelay value is read from the registry during modem enumeration, so a device reset is generally required if the CmdSendDelay value is added or modified.

The file(s) with the new public source code changes for this component can be found in directory %_WINCEROOT%\:

private\winceos\COMM\tapi\unimodem\modem.c

private\winceos\COMM\tapi\unimodem\dial.c

private\winceos\COMM\tapi\unimodem\misc.c

private\winceos\COMM\tapi\unimodem\tspip.c

Component:  URLMON

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     public\directx\cesysgen\makefile

Component:  Viewers

  • 040423_KB835850 - Image Viewer may not be started using the command line.

Component:  WDMLIB

  • 050204_KB893095 - CXPORT may not properly interpret a timeout value specified at load time by WDMLIB. This may cause some previously queued events to not fire.

Component:  Web Server

  • 040430_KB833270 - Security issue resolved: buffer overrun may occur when using ASP parser on the web server.

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     private\servers\asp\parseext\parseext.cpp

Component:  Windows Media Player

  • 031114_KB830765 - Windows Media Player control may not display when loaded again as a "Windowed" control and displays an assert.

Component:  WININET

Special build instructions:

After applying this update, please perform the "File\Build\Rebuild Platform" operation and perform a clean build of your project.

Component:  WinMgr

Component:  WMP Control

Component:  WPA

The file(s) with the new source code changes for this component can be found in the directory %_WINCEROOT%\:

     public\common\ddk\inc\nuiouser.h
     public\common\oak\drivers\ndisuio\ndisuio.h
     public\common\oak\drivers\ndisuio\uio_ce.c

Component:  ZeroConfig 802.11

The file(s) with the new public source code changes for this component can be found in the directory %_WINCEROOT%\:

     public\common\ddk\inc\ntddndis.h
     public\common\oak\inc\eapol.h

 

 

Additional information for the fixes in the update 031203_KB812950:

 

 

Coding Techniques

Shared IST

 

The performance gain can only be achieved if the miniport driver indicates multiple packets (i.e. using NdisMIndicateReceivePacket ()) and with NDIS_STATUS_SUCCESS (i.e. letting the protocol driver keep the packets for processing). 

 

Before enabling this functionality, please note the following concerns:

  • NDIS assumes that the system runs in ALLKMODE.

  • OEMIntrMask stores the bits mask value of the 1 << IRQ, whereas OEMIntrEnable stores the IRQ number.

To enable the shared IST behavior, the OEM must implement changes in the OEM Abstraction Layer (OAL) code, as illustrated below.  If the query for IOCTL_HAL_SYSINTR_NETWORK returns false, the shared IST functionality is not enabled, and the system will behave as before.

 

Once shared IST changes are enabled, the priority to run MBridge must be overridden in order to effectively implement the MBridge optimizations.  This is accomplished with the following registry key:

[HKEY_LOCAL_MACHINE\Comm\MBRIDGE]

"PRIORITY256"=dword:74

There are 2 shared global variables that are needed between NDIS and the ISR code.  OEMIntrMask stores the bits mask value of the 1 << IRQ, where as OEMIntrEnable stores the IRQ number.

NDIS uses the IOCTL_HAL_SYSINTR_NETWORK to query the address of these variables as shown below:

 

ULONG OEMIntrEnable = 0;
ULONG OEMIntrMask = 0;

BOOL OEMIoControl(

   DWORD code, PVOID pInpBuffer, DWORD inpSize, PVOID pOutBuffer, DWORD outSize,

   DWORD *pOutSize

) {     

   BOOL ok = TRUE;

….
   case IOCTL_HAL_SYSINTR_NETWORK:
      if (outSize < 2*sizeof(ULONG) || pOutBuffer == NULL) {
         ok = FALSE;
         SetLastError(ERROR_INVALID_PARAMETER);
         break;
      }
      ((ULONG*)pOutBuffer)[0] = (ULONG)&OEMIntrMask;
      ((ULONG*)pOutBuffer)[1] = (ULONG)&OEMIntrEnable;
      if (pOutSize != NULL) *pOutSize = 2*sizeof(ULONG);
      break;

...

return ok;

}

The OEMIntrMask variable is updated by the ISR code as the SYSINTR_NETWORK is returned as shown below (MIPS example):

    la   a0, OEMIntrMask
    lw   a1, 0(a0)
    or   a1, (1 << IRQ_MAC1)
    sw   a1, 0(a0)
    j    ra
    li   v0, SYSINTR_NETWORK

 

The OEMIntrEnable variable is updated by NDIS before it calls InterruptDone( ) and InterurptDisable( ) which map to OEMInterruptEnable( ) and OEMInterruptDisable( ) respectively. The HAL code will then need to consider OEMIntrEnable to determine which interrupt to enable or disable.

 

Code sample below:

 

   BOOL OEMInterruptEnable(DWORD sysIntr, LPVOID pvData, DWORD cbData)
   {
      DEBUGMSG(FALSE, (L"+OEMInterruptEnable %d\n", sysIntr));
      switch (sysIntr) {
         case SYSINTR_NETWORK:
            if (OEMIntrEnable == IRQ_PCI) {
               OUT32(PCI_BASE + PCI_INTMASK, PCI_INT_PA);

               OEMIntrEnable = 0x00;
          }
          break;

 

 

Enabling IMGLOADNETHIGH and cxport alloc from physical memory. 

 

On certain architectures and performance-critical scenarios such as network routing, the translation lookaside buffer (TLB) miss handling can have a large impact on performance.  To address this, two optional changes were made to Windows CE .NET 4.2 which enable the network stack direct access to physical memory for critical code and data. First was an option to allocate memory for use by the networking stack out of the kernel memory region (above address 0x80000000). The second change was loading some DLLs’ code into the same region. In Windows CE memory above 0x80000000 is partitioned into two blocks, 0x80000000-0xa0000000 that is mapped to contiguous CACHED physical memory, and 0xa0000000-0xc0000000 which is mapped to UNCACHED physical memory. Both regions are either mapped with larg TLB entries (on x86 or ARM), or CPU architecture defined (SHx or MIPS).  Therefore, code running out of it, as well as data addressed from it generates no TLB miss penalties.

 

To enable the networking stack to allocate from this high memory region, set the following registry key:

[HKEY_LOCAL_MACHINE\Comm\Cxport]

    “PhysHeap”=dword:1

  • Note1: The heap created in high-memory region will not be tracked with LMEMDEBUG.

  • Note2: The heap in high memory region is committed in large blocks (192K, as opposed to page granularity of normal heap), and is not subject to per-page decommit on compacting. As such it is considerably less memory-efficient than the normal heap.

  • Note3: The file(s) to be loaded high must be in the FILES section in the .BIB file.

 

To force loading DLLs into high memory region, in the HAL code, set the following variable early in your OEMInit() function:

extern BOOL (*pfnOEMIsKernelSpaceDll) (LPCWSTR pszDllName);

to a pointer to a function that will be called by the loader every time a DLL is about to load. The function will be passed a pointer to DLL’s name. Return TRUE if the DLL needs to be loaded into high memory space.

Examples of DLLs that could be loaded in high memory region for high-performance networking/routing scenario are: tcpstk, cxport, ndis, mbridge, ipnat, fw6 as well as network and/or wireless network miniport drivers.

 

Modules that are intended to be loaded into high memory area of the kernel space need to have their placement in image adjusted by ROMIMAGE tool (part of makeimg process). This can be done by listing the modules under the FILES section:

Ex. common.bib:

...

FILES

...

ndis.dll    $(_FLATRELEASEDIR)\ndis.dll                 NK  SH

...


or under the MODULES section with the 'K' flag set:

Ex. common.bib:

...

MODULES

...

ndis.dll    $(_FLATRELEASEDIR)\ndis.dll                 NK  SHM

...

Failure to place modules in the FILES section may result in exceptions during device boot time when loading these modules.

 

Note that an uncaught exception in the high-memory region is treated as a kernel exception and causes the entire system to halt!  Debug your platform fully before putting DLLs into the high memory region.

 

Also note that DLLs loaded into a high memory region can only be loaded by a single process.  That is, if a DLL is being used by more than one process, it cannot be loaded into a high memory region or it will fail when the second process tries to load the DLL. These DLLs are also need to be moved to the FILES section from the MODULES section where they reside by default in ce.bib file.

 

Sample implementation of aforementioned logic would be:

#if defined (IMGLOADNETHIGH)

 static LPCWSTR pszSpecialDlls[] = {

    L"tcpstk",

    L"cxport",

    L"ndis",

    L"mbridge",

    L"ipnat",

    L"fw6",

    L"myminiportdriver",

    L”mywirelessminiportdriver”

};

 

static WCHAR lowerW(WCHAR ch) {

    return ((ch >= 'A') && (ch <= 'Z')) ? (ch - 'A' + 'a') : ch;

}

 

static int strcmponeiW(const wchar_t *pwc1, const wchar_t *pwc2) {

    while (*pwc1 && (lowerW(*pwc1) == *pwc2)) {

        pwc1++;

        pwc2++;

    }

    return (*pwc1 ? 1 : 0);

}

 

static int strcmpdllnameW(LPCWSTR src, LPCWSTR tgt) {

    while (*src && (*src == lowerW(*tgt))) {

        src++;

        tgt++;

    }

    return ((*tgt && strcmponeiW(tgt,L".dll") && strcmponeiW(tgt,L".cpl")) || (*src && memcmp(src,L".dll",10) && memcmp(src,L".cpl",10))) ? 1 : 0;

}

 

static BOOL CheckDlls (LPCWSTR pszDllName) {

    int i;

 

    for (i = 0; i < sizeof(pszSpecialDlls)/sizeof(pszSpecialDlls[0]); i ++) {

        if (!strcmpdllnameW (pszSpecialDlls[i], pszDllName)) {

            RETAILMSG (1, (L"CheckDll: %s returns TRUE\r\n", pszDllName));

            return TRUE;

        }

    }

 

    return FALSE;

}

 

extern BOOL (* pfnOEMIsKernelSpaceDll) (LPCWSTR pszDllName);

 

#endif

 

void OEMInit(void)

{

#if defined (IMGLOADNETHIGH)

   pfnOEMIsKernelSpaceDll = CheckDlls;

#endif

Sample steps to pragmatically move the DLLs to the FILES section (This will update ce.bib file during the makeimage process):

 

Create a preromimage.bat file in % _TARGETPLATROOT%\FILES directory with the following text; you may need to modify this script to include/exclude files based on the pszSpecialDlls list.

@echo off

 

IF not "%IMGLOADNETHIGH%"=="1" goto :endfile

 

echo Moving DLLs to the file region

 

pushd %_FLATRELEASEDIR%

 

findstr /I " mbridge.dll ipnat.dll fw6.dll tcpstk.dll cxport.dll ndis.dll myminiportdriver mywirelessminiportdriver  " ce.bib > ce_net.bib

 

findstr /I /v " mbridge.dll ipnat.dll fw6.dll tcpstk.dll cxport.dll ndis.dll myminiportdriver mywirelessminiportdriver " ce.bib > ce_nonet.bib

 

copy /A ce_nonet.bib+ce_net.bib ce.bib

 

popd

 

:endfile

 

The file(s) with the new source code changes for this update can be found in the directory %_WINCEROOT%\


     public\common\cesysgen\makefile
     public\common\ddk\inc\ntcompat.h
     public\common\oak\drivers\ceddk\ddk_time\ddk_time.c
     public\common\oak\inc\nkintr.h
     public\common\oak\inc\pkfuncs.h
     public\common\sdk\inc\winbase.h
     platform\Aspen\inc\oalintr.h
     platform\Aspen\inc\oalintr.inc
     platform\keywest\inc\OALINTR.H
     platform\keywest\inc\OALINTR.INC
     private\winceos\COMM\tcpipw\ipnat\autodial\autodial.c
     private\winceos\COMM\tcpipw\ipnat\autodial\autodprv.h
     private\winceos\COMM\tcpipw\ipnat\autodial\sources
     private\winceos\COMM\tcpipw\ipnat\autodial\status.cpp
     private\winceos\COREOS\core\inc\coredll.h
     private\winceos\COREOS\core\lmem\heap.c
     private\winceos\COREOS\core\lmem\heap.h
     private\winceos\COREOS\core\lmem\rmem.c
     private\winceos\COREOS\nk\kernel\loader.c