Windows CE 2.12 QFE Pack - Fixes 1 ~ 15 How to Install the QFE set: QFE's should be installed on a uniform number basis. Starting at one, copy the files over to their respective location in your build tree. You will be overwriting the previous files, do not be afraid to do so. You may also overwrite a file numerous times in some instances. As long as you are following the copy through the order of QFE's (Starting at 1 and working through the last one), you will have no problems. If you have installed previous QFE's: If you have installed previous QFE's (for Windows CE 2.12), you need only install the latest QFE's you don't already have installed. For instance, if you had 1~3 previously installed, all you need to install now is 4~15. You do NOT have to reinstall all the previous QFE's. CDCR stands for Critical Design Change Request. These are provided on an as needed basis only, and are installed in a similar fashion to QFEs. The installation of CDCRs are optional. Fixes that were made in this QFE set: QFE #1 Components: DHCP, NDIS, COM/OLE * KeepAlive Timers not functioning in 2.12 stack. * WSAENOBUFS can occur in sledge tests with 100 connections due to TCBs in TIME_WAIT state (200 Max Connections added). * AFD can trash the heap if Windows CE doesn't have enough memory to complete a send. * DHCP clients & Random XID. * Need to support sending DHCP options. * Loss of DNS functionality with Unix DHCP server. * NDIS system exception occurs with repeated insertion and removal of a network card. * Serious Memory Leak in LoadTypeLibEx() * LoadTypeLibEx leaks 520 bytes of memory when returning cached typelib * TCP crashes when running Winsiock stress test. QFE #2 Components: NK, AFD, TCPSTK, DHCP * Static Variables Being Used in the Core Routines to Open an Executable. * ARPAddMCast was applying a mask before adding the address to the mcast list. * DHCP doesn't detect change in subnet mask. * TCP Handles a max of 4 configured Adapters. * Need to support sending DHCP options (behavior changed from Birch SP2 QFE #1) * DevMan hang when removing NIC with UDP Multicast listener active. QFE #3 Components: DHCP * DHCP bug in INIT_REBOOT. If options are requested from the server using the [HLM\Comm\\Parms\Tcpip\DhcpOptions] key, the DHCP client will not handle the INIT-REBOOT (warm boot with existing DHCP lease) state correctly. In this case, the state machine will generate improperly formatted DISCOVER and REQUEST messages (the ciaddr field is filled in with the previous IP, which is not allowed in the INIT-REBOOT or SELECTING states in RFC 2131). Most servers will ignore these packets, causing DHCP to time out (after approx 36 seconds) and fall back to the INIT state, at which point DHCP operation should resume normally. This bug does not appear if DHCP options aren't requested in the registry. The bug exists in the released versions of DHCP.DLL for CE 2.10, 2.11, and 2.12. QFE #4 Components: AFD * The Windows CE DNS lookup code did not handle DNS responses with the tc (Truncate) bit set. Such messages were discarded causing gethostbyname() failures. QFE #5 Components: NK * 2 line change to schedule.c. On SP2, we have a helper thread which "helps" a thread wait for multiple objects (the thread blocks on the first one, and then the helper enqueues the other objects, including putting it to sleep). We had a bug where we could corrupt the helper queue of things to do if multiple threads were asking for help at the same time. QFE #6 Components: AFD * gethostbyname leaks 72 bytes of memory for each call, when resolving the local hostname to IP address. The leak does not occur when resolving a remote address. The bug exists in the released versions of AFD.DLL for CE 2.10, 2.11, and 2.12. QFE #7 Components: lmem - component of coredll * The current allocator leaks (mostly virtual memory) under certain allocation patterns (mostly large allocs, in the 128 KB range). CDCR #1 (QFE #8) Components: mshtml * Created registry setting to control the behavior of frame printing [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main] "PrintFrames"=dword:1|2|3 1 = As laid out on screen 2 = Only the selected frame 3 = All frames individually QFE #9 Components: COMM (TCP/IP) * TCP/IP wireless configuration settings are only read for PCMCIA adapters, not for built in adapters. CDCR to increase tcp/ip timeout. Registry Setting Instructions TcpMaxConnectRetransmissions Key: HKEY_LOCAL_MACHINE\Comm\Tcpip\Parms Value Type: REG_DWORD-number Valid Range: 0-255 (decimal) Default: 3 Description: This parameter determines the number of times that TCP retransmits a connect request (SYN) before aborting the attempt. The retransmission time-out is doubled with each successive retransmission in a given connect attempt. TcpMaxDataRetransmissions Key: HKEY_LOCAL_MACHINE\Comm\Tcpip\Parms Value Type: REG_DWORD-number Valid Range: 0-255 (decimal) Default: 5 Description: This parameter controls the number of times that TCP retransmits an individual data segment (not connection request segments) before aborting the connection. The retransmission time-out is doubled with each successive retransmission on a connection. It is reset when responses resume. The Retransmission Timeout (RTO) value is dynamically adjusted, using the historical measured round-trip time (Smoothed Round Trip Time, or SRTT) on each connection QFE #10 Components: Kernel (Scheduler) * In certain circumstances, interrupt events could be lost on PPC platforms. This was a problem caused by the PowerPC HandleException() routing not updating the PendEvents bit field atomically. If the scheduler happened to be clearing a bit in this flag when an external interrupt occurred, the bit for that interrupt could be lost when the scheduler resumed. QFE #11 Components: COM * Memory leak in repeating Create/Destroy of ActiveX Control. QFE #12 Components: NK * ReadFile for com port sometime returns zero bytes even when the driver returns serveral bytes on the MIPS 3912. "branch likely" instructions can be interrupted in the delay slot. QFE #13 Components: NK * On the AMD K6-2 400 processor , the CPU page translation logic occasionally ( fewer than once in a million page faults) gets into a bad state. Moreover, it is not able to correct itself with a page fault or by executing the instruction to invalidate a specific TLB entry. As a result the CPU repeatedly page faults on the same address. QFE #14 Components: AFD * Under heavy network load, an access violation may occur with multicast group operations QFE #15 Components: FSDMGR · The FSDMGR component was accessing kernel data structures during suspend/resume processing, however did not go into kernel mode before accessing the memory. This would cause FS drivers to never be reloaded.