4/9/2007

Windows Embedded CE 6.0 Platform Builder Service Pack 1 provides new features, improvements, and bug fixes to Windows Embedded CE 6.0.

It also includes the Platform Builder for Windows Embedded CE 6.0 tools hosted in the Visual Studio 2005 shell. The functionality included in previous releases of Platform Builder is available, along with many features of the Visual Studio environment. For more information about the tools in Visual Studio 2005, see the Platform Builder User's Guide.

Windows Embedded CE 6.0 Platform Builder Service Pack 1 has been updated from previous versions in the following major areas:

Contents

System Requirements

To use Windows Embedded CE 6.0 Platform Builder Service Pack 1, you need the following:

  • 600-MHz Pentium III or later processor; 1-GHz processor recommended.

  • Microsoft Windows 2000 Professional with Service Pack 4 or later, Windows XP Professional with Service Pack 2 or later, or Windows Vista.

  • 512 MB of RAM; 1 GB of RAM recommended.

  • 4 GB of available hard-disk space for a single microprocessor installation with tools; 1.7 GB of available hard–disk space per additional microprocessor installation; approximately 18 GB for installation of the entire product.

  • 1024 x 768 screen resolution with 256 colors.

  • Microsoft Mouse, or similar pointing device, and keyboard.

  • Serial port or Ethernet card for debugging support; a LAN hub is recommended.

  • DVD-ROM drive.

Installing Windows Embedded CE 6.0 Platform Builder Service Pack 1

Before installing Windows Embedded CE 6.0 Platform Builder Service Pack 1, complete the following tasks:

  • Verify that you have administrative privileges.

  • Uninstall any pre–release builds of Windows Embedded CE 6.0 Platform Builder Service Pack 1.

How to install Windows Embedded CE 6.0 Platform Builder Service Pack 1
  1. Log on to the development workstation with Windows administrator privileges.

    Note:
    You do not need to be logged on with Windows administrator privileges to run the tools after installation is complete.
  2. Download and run the Windows Embedded CE 6.0 Platform Builder Service Pack 1 .msi file.

  3. When the Welcome dialog box appears, click Install, and follow the on-screen instructions.

Installation time is typically 5 to 10 minutes, depending on system specifications.

Uninstalling Windows Embedded CE 6.0 Platform Builder Service Pack 1

Use the following procedure to uninstall Windows Embedded CE 6.0 Platform Builder Service Pack 1.

How to uninstall Windows Embedded CE 6.0 Platform Builder Service Pack 1
  1. Log on to Windows as an administrator.

  2. Use Add or Remove Programs to remove Windows Embedded CE 6.0 Platform Builder Service Pack 1.

  3. If you want to keep CE 6.0 on the system, use Add or Remove Programs to repair CE 6.0.

    -OR-

    If you want to remove CE 6.0 from the system, use Add or Remove Programs to remove CE 6.0.

Windows Embedded CE 6.0 Installation Issues

Enable feature in MMC to install Windows Embedded CE 6.0 over RDP or Terminal Services

System administrators cannot install programs over a Remote Desktop Protocol (RDP) or Terminal Services session.

However, you can enable this feature in the Microsoft Management Console (MMC) Group Policy setting using the following procedure:

How to enable Windows Embedded CE 6.0 installation over RDP by changing MMC policy setting
  1. Click Start, and select Run.

  2. Type gpedit.msc, and click OK.

    The Group Policy window opens.

  3. Expand the Computer Configuration, Administrative Templates, and Windows Components nodes.

  4. Select Windows Installer.

  5. In the right pane, double-click Allow admin to install from Terminal Services session.

    The Properties dialog box opens.

  6. Click the Setting tab, and select Enabled.

  7. Click OK.

Using this computer, you can now log on through Terminal Services and install such programs as Windows Embedded CE 6.0.

Visual Studio Help may not be functional during Windows Embedded CE 6.0 installation

Platform Builder shares Help components with Visual Studio. Therefore, during Platform Builder setup, Visual Studio Help may not be functional. Do not use Visual Studio Help during a Platform Builder installation.

Setup dialog box may appear when Help is launched under a different account

The Help 2.0 Setup dialog box may appear when installing Platform Builder under one account and using Platform Builder under a different account.

Preparing to Install dialog box may appear when opening other applications

After installing Platform Builder, the Preparing to install dialog box may appear when you open Windows Embedded CE, Visual Studio Help documentation viewer, or any Microsoft Office application. This dialog box is the result of an install-on-demand feature. You must allow the installer to complete.

If this dialog box continues to appear on subsequent uses of these applications, use the following procedure:

How to edit registry settings to complete installation
  1. Create a text file that has the .reg extension.

  2. Add the following text to the file:

    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.2]
    @="Microsoft Office 10.0 Object Library"
    "PrimaryInteropAssemblyName"="Office, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    [HKEY_CLASSES_ROOT\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.2\0]
    [HKEY_CLASSES_ROOT\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.2\0\win32]
    @="C:\\Program Files\\Common Files\\Microsoft Shared\\office10\\mso.dll"
    [HKEY_CLASSES_ROOT\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.2\FLAGS]
    @="0"
    [HKEY_CLASSES_ROOT\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.2\HELPDIR]
    @=""
  3. Save the file, and close it.

  4. Double-click the file, and click Yes.

Uninstallation of Windows CE 5.0 can delete registry keys required for Windows Embedded CE 6.0 in a side-by-side installation

If your developer workstation contains a side-by-side installation of Windows CE 5.0 and Windows Embedded CE 6.0 Platform Builder Service Pack 1, uninstallation of Windows CE 5.0 deletes the registry keys under HKLM\Software\CoreCon\1\1\InstallDir. Windows Embedded CE 6.0 Platform Builder Service Pack 1 requires these registry keys to function.

To resolve this issue, from the Setup wizard, perform a repair of your Windows Embedded CE 6.0 Platform Builder Service Pack 1 installation.

What's New for Windows Embedded CE 6.0 Platform Builder Service Pack 1

Windows Embedded CE 6.0 Platform Builder Service Pack 1 provides new functionality and features in the following areas:

Remote Tools Framework

Remote Tools Framework is a framework for developing tools to diagnose and test Windows Embedded CE-based devices. It combines a desktop-side .NET Class Library (DLL) and a set of device-side libraries (both native DLLs and .NET Class Libraries) with which you develop plug-ins, along with a shell in which you can load a plug-in.

Hardware-Assisted Debugging

Hardware-assisted debugging on Platform Builder now has full OS awareness and an improved exDI2 sample to support the Device Emulator.

Documentation Update

In addition to documentation of Remote Tools Framework, new information has been added to these release notes for the Test Kit and debugging, including documentation of CeDebugX. See the following sections:

Copyright Information for Windows Embedded CE 6.0 Platform Builder Service Pack 1

Information in this document, including URLs and other Internet Web site references, is subject to change without notice. Unless otherwise noted, the example companies, organizations, products, domain names, e-mail addresses, logos, people, places, and events depicted herein are fictitious, and no association with any real company, organization, product, domain name, e-mail address, logo, person, place, or event is intended or should be inferred. Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in, or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation.

Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property.

© 2007 Microsoft Corporation. All rights reserved.

Microsoft, MS-DOS, Windows, Windows NT, Windows Server, Windows Vista, Active Desktop, Active Directory, ActiveSync, ActiveX, ClearType, IntelliMouse, IntelliSense, JScript, MSDN, MSN, Outlook, PowerPoint, Visual Basic, Visual C#, Visual C++, Visual InterDev, Visual Studio, Win32, and Windows Media are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.

Portions of this software are based on NCSA Mosaic. NCSA Mosaic was developed by the National Center for Supercomputing Applications at the University of Illinois at Urbana-Champaign. Distributed under a licensing agreement with Spyglass, Inc.

Contains security software licensed from RSA Data Security, Inc.

All other trademarks are property of their respective owners.

License Terms

The license terms for Windows Embedded CE 6.0 Platform Builder Service Pack 1 and shared sources can be accessed from the directory C:\Program Files\Microsoft Platform Builder\6.00.

Technical Support and Community

To learn more about available support and community options for this release, see Windows Embedded Community.

Windows CE 5.0 Functionality Not Included in Windows Embedded CE 6.0 Platform Builder Service Pack 1

See the topic "Windows CE 5.0 Functionality Not Included in Windows Embedded CE 6.0" in the OEM documentation to view functionality in Windows CE 5.0 that was not included in Windows Embedded CE 6.0 Platform Builder Service Pack 1.

Known Issues for Windows Embedded CE 6.0 Platform Builder Service Pack 1

Bootloaders on Windows Vista

Bootloaders for all other platforms need to be rebuilt to function correctly on Windows Vista. This applies to all bootloaders (Eboot.*) except CEPC and Device Emulator bootloaders.

Once the bootloader is rebuilt, customers need to reflash their device with the updated bootloader, which is usually located in the flat release directory with the name Eboot.bin or Eboot.nb0.

The CEPC bootloader does not need to be rebuilt. However, it does need to be reflashed.

Booting a Device Emulator image

To boot a pre–Windows Embedded CE 6.0 Device Emulator image on Windows XP, do the following:

  1. At a command prompt, change directories to <Windows Embedded CE 6.0 install directory>/corecon/bin/.

  2. Run Regsvr32 download_DEmulator.dll.

  3. Install the Virtual Machine Network Driver for Microsoft Device Emulator from this Microsoft Web site.

To boot a pre–Windows Embedded CE 6.0 Device Emulator image on Windows Vista, do the following:

  1. Open a command prompt as an administrator.

  2. Change directories to <Windows Embedded CE 6.0 install directory>/corecon/bin/.

  3. Run Regsvr32 download_DEmulator.dll.

  4. Download the driver (Netsvwrap.msi) from this Microsoft Web site, and save it locally.

  5. Open a command prompt as an administrator.

  6. Run msiexec/i netsvwrap.msi.

Platform Builder not supported on 64-bit systems

Platform Builder and related desktop tools are not supported on 64-bit versions of the desktop Windows operating system, including Windows XP 64-bit and Windows Vista 64-bit.

Microsoft Smart Devices Remote Tools Framework and Windows Embedded CE 6.0 Platform Builder Service Pack 1 cannot be installed on the same computer

Use Add/Remote Programs to uninstall the Microsoft Smart Devices Remote Tools Framework before installing Windows Embedded CE 6.0 Platform Builder Service Pack 1. If you install Windows Embedded CE 6.0 Platform Builder Service Pack 1 without removing Microsoft Smart Devices Remote Tools Framework or if you install Microsoft Smart Devices Remote Tools Framework after installing Windows Embedded CE 6.0 Platform Builder Service Pack 1, Remote Tools Framework included with Windows Embedded CE 6.0 Platform Builder Service Pack 1 may not work. To fix problems, use Add or Remove Programs to uninstall the Microsoft Smart Devices Remote Tools Framework, and then use Add or Remove Programs to repair the installation of Windows Embedded CE 6.0 Platform Builder Service Pack 1.

Remote Tools does not connect to a device image that resides on a read-only share

In Platform Builder for CE 6.0, if you load a device image that resides in a read-only directory (such as a network), you cannot connect a remote tool to it. This is because the device-side binaries need to be copied to that path.

You can instead use a special mode of the KITL Bootstrap Server. The following procedure shows how to configure your remote tool connectivity when the device image is hosted on a read-only folder.

  1. In Platform Builder for Windows Embedded CE 6.0, select Open on the File menu, and then select Project.

  2. Open the *.bin directly from a read-only folder.

  3. Attach the device, and wait for the device to launch completely.

  4. In the remote tool, select Configure Windows CE Platform Manager on the Connection menu to bring up the Device Properties dialog box.

  5. Select Windows CE Default Platform, and then Default Device.

  6. Click Properties.

  7. For the Startup server, ensure that you are using KITL Bootstrap Server.

  8. Click Configure.

  9. In the CESHX Configuration Settings dialog box, select Alternate Folder, and enter a local path (for example, c:\temp\KITLBootstrap).

  10. Click OK.

  11. In the Device Properties dialog box, click Test to make sure that you can get a proper connection.

  12. If successful, click OK, and try to reconnect the remote tool.

    —OR—

    If unsuccessful, make sure the folder path you specified is a on a drive that has sufficient free space and that it is a folder to which you have write access.

Remote Call Profiler does not stop collection on application exit

If you select Launch in the Remote Call Profiler, and select Finish collection on exit, Remote Call Profiler does not stop collecting data when the specified application exits. You must manually watch for the application to exit, and click Stop to stop data collection.

Remote Kernel Tracker process never exits if its connection is canceled

If you start Remote Kernel Tracker and select Default device while Platform Builder is not connected to any device, and then close Remote Kernel Tracker, Kerneltracker.exe is still running in the background.

You can close the kernel tracker process by opening Task Manager, selecting the Kerneltracker.exe process, and clicking End Process.

Error while building a Remote Tools Framework plug-in

You may see the following build-time error message while building a Remote Tools Framework plug-in:

"Projects targeting .NET Compact Framework 1.0 require version 1.1 of the .NET Framework, which is not detected on this machine."

If you have Visual Studio 2005 (the original release) and see this message, make sure that you have the .NET Framework 1.1 installed, including the proper .NET Compact Framework 1.0 support necessary to build Remote Tools Framework plug-ins. To download the desired version, go to this Microsoft Web site or this Microsoft Web site.

Searching in Visual Studio 2005 with Find and Replace fails if Current Project is selected in the Look in box

Searching with the Find and Replace dialog box fails, commonly with the message: "The operation could not be completed. No such interface supported." This is usually because the Look in box is set to Current Project, which is not supported for Windows Embedded CE runtime images (*.bin; *.nb0; *.dio; *.lst) projects.

Set the Look in box to All Open Documents, Current Document, or Current Window, as desired.

Remote Tools shell and Plug-in Explorer context menus are shown only if the node is selected

You must select the node in the Plug-in Explorer or the device/plug-in tree view in the Remote Tools shell before right-clicking to display the context menu for that node. If you try to show the context menu by right-clicking without first selecting the node, the context may not be what you expect.

A fix for this issue will be considered for a future release.

Target menu persists if it is clicked right after a mode change

In Platform Builder, the Target menu sometimes persists for some time after clicking on other menus or other parts of the desktop. When this problem occurs, you may not be able to bring up other menus, such as the Debug menu, and it may take up to 15 minutes for the Target menu to disappear.

Platform Manager fails to copy DOS executables from desktop to device with the Remote File Viewer

When you try to export executable (*.exe) files from the desktop to a device using Remote File Viewer (from Platform Builder 6.0) to a device, if the executable files are not built for the target CPU (for example, you are copying a DOS .exe to a ARMV4 device), the export operation fails without any error message. This is a known issue in Platform Manager. However, this issue is not fixed in Windows Embedded CE 6.0 Platform Builder Service Pack 1.

As a workaround, use the Visual Studio 2005 version of the Remote File Viewer, which can be launched from Start > All Programs > Microsoft Visual Studio 2005 > Visual Studio Remote Tools. This version of the Remote File Viewer uses Core Connectivity, which does not have this issue.

Remote Tools Framework managed device-side code requires full .NET Compact Framework on Windows Embedded CE 6.0

Remote Tools Framework plug-ins that use managed device-side code require the full .NET Compact Framework component to be installed on the device (SYSGEN_DOTNET on Windows CE 5.0, or SYSGEN_DOTNETV2 on Windows Embedded CE 6.0). The headless framework available Windows Embedded CE 6.0 (SYSGEN_DOTNETV2_HEADLESS) is not sufficient. Remote Tools Framework plug-ins that have managed device-side code cannot run on Windows Embedded CE 6.0 devices that include only the headless .NET Compact Framework component.

If you have Windows Embedded CE 5.0 or Platform Builder for Windows Mobile Version 5.0 and Platform Builder 6.0, you cannot use the x86 emulator with the earlier version

The x86 emulator does not work with earlier versions of Windows Embedded CE or Windows Mobile if you have them installed with Windows Embedded CE 6.0 Platform Builder Service Pack 1.

The workaround is to install Emulatortransport_500.dll to %ProgramFiles%\common files\microsoft shared\corecon\5.01\bin.

if you have Windows CE 5.0 , copy it from %ProgramFiles%\windows ce platform builder\5.00\corecon\bin

if you have Windows Mobile Version 5.0 , copy it from %ProgramFiles%\Platform builder for windows mobile\5.00\corecon\bin.

Disconnecting and reconnecting a Remote Tools Framework plug-in quickly may cause your device to hang

After disconnecting a Remote Tools Framework plug-in from a device, you may have a problem reconnecting the same plug-in if you try to reconnect too quickly. This is more likely to happen on physical devices and appears to be an internal issue with Core Connectivity. The workaround is to wait a few seconds after disconnecting a Remote Tools Framework plug-in before reconnecting it.

CETK cannot connect over IP security–protected sockets on Window Vista

CETK cannot connect to networks under the following conditions:

  • The computer is running Window Vista.

  • The computer is joined to a domain that has an IP security policy that cannot be locally overridden.

  • The domain has an IP security policy stating, "Accept no communication unless it is IP security protected."

  • The domain has a rule stating, "Try IP security on outbound connection, and go clear if the peer cannot do IP security."

Remote tool OS dependencies

When a remote tool makes a connection to a device, it runs some code on the device. To successfully run the device-side code, the run-time image on the target device must include some features. If the operating system (OS) design that your runtime image is based on lacks any one of these features, the remote tool cannot connect to the device.

The following table shows the features that a runtime image must include to provide support for the remote tools that are included with Platform Builder.

Remote Tool Required OS Dependency

File Viewer

None.

Heap Walker

None.

Process Viewer

None.

Registry Editor

None.

System Information

None.

Performance Monitor

None.

Kernel Tracker

None.

Zoom

Minimal GWES configuration: SYSGEN_MINGWES and minimal GDI configuration: SYSGEN_MINGDI.

Spy

Minimal GWES configuration: SYSGEN_MINGWES and minimal GDI configuration: SYSGEN_MINGDI.

Call Profiler

National Language Support (NLS): SYSGEN_CORELOC.

-OR-

English (US) National Language Support only: SYSGEN_LOCUSA and Standard String Functions—ASCII (corestra): SYSGEN_CORESTRA.

When debugging an ARM application, you cannot step into an ASM function

You cannot step into an ASM function when debugging ARM applications that have ASM files compiled into them. The ARM assembler does not generate debugging information for source-level stepping.

Platform Builder installed on a system with Platform Builder 4.x already installed may modify debugger connectivity settings and the debugger may not connect

When you install Windows Embedded CE 6.0 Platform Builder Service Pack 1 on a machine that already has Windows CE .NET 4.0, Windows CE .NET 4.1, or Windows CE .NET 4.2 installed, you may experience some issues in remote tools connectivity:

  • Remote tools for Platform Builder for Windows Embedded CE 6.0 install an additional startup service (KITL Bootstrap Service), and this may be set up as the default startup server for Windows Embedded CE Platform Manager Connectivity Options. Make sure that you use a startup server other than KITL Bootstrap Server. To check your current Platform Manager connectivity options, use the following procedure:

    1. Start any remote tool from the Platform Builder Tools menu, or in Visual Studio 2005/Platform Builder for CE 6.0 select Remote Tools on the Target menu.

    2. Select Connection, and then Configure Windows CE Platform Manager.

    3. Select the default device, and click Properties.

  • Due to conformance to binary distribution requirements, the Remote Performance Monitor and Remote Call Profiler remote tools accessible from Platform Builder 4.x and 5.0 are removed during the installation of Windows Embedded CE 6.0 Platform Builder Service Pack 1. Therefore, you cannot run these two remote tools. The workaround is as follows:

    1. Run the repair for your older Windows Embedded CE installation(s) (in chronological order, for example, 4.0, and then 5.0).

    2. Back up the contents of the C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\bin and C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\bin\wce420 folders on your computer.

    3. Install (or repair) Windows Embedded CE 6.0.

    4. Copy back CePerfMon.exe and Msic.exe into the respective folders under C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\bin and C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\bin\wce420.

Opening a .csi file in SysInfo remote tool does not refresh UI

When you run the System Information remote tool and open a .csi file while some previously captured system information is displayed, the UI does not reflect the contents of the .csi file that you just opened. This is a known issue and will be addressed in a future release.

The workaround is to close the System Information remote tool and rerun it. (You do not necessarily need to connect to a device at this point.) Then open the .csi file from the File menu.

Zoom may display error when run under out-of-memory conditions

The Zoom-in remote tool may report an error due to out-of-memory conditions when run on a large device image. When you use the Zoom-in remote tool on a large device image, it may display the error message "Connection to the device was lost."

If you are running Zoom-in from Platform Builder, you may also see a message such as the following in the debug output window:

"Unable to create dib section...errorcode = 8"

This error comes while attempting to allocate a memory buffer to hold the bitmap DIB bit values. However, this may not be the only out-of-memory condition that you encounter. This type of error indicates that the device-side code for Zoom-in (Cezcli.exe) ran out of memory.

The workarounds are as follows:

  • Terminate other applications running on the device to free memory.

  • If you can modify the OS design, free memory so that your device has enough memory to allocate the necessary buffers for the bitmap data.

Kernel Tracker memory usage may rise

When you run the remote tool Kernel Tracker for a prolonged period of time, the amount of memory that it uses on the desktop computer may rise to a very large amount. Instead of running Kernel Tracker for a prolonged period of time, you may want to run it in Limited Buffer Mode, or terminate and restart Kernel Tracker to show events only as needed.

Registry Editor remote tool may not refresh completely when programmatically modifying the registry from another application

When using the Registry Editor remote tool while programmatically modifying registry keys from another application running on your device, refreshing the view (F5) on Registry Editor may not show the modifications made by the other application if the currently selected node is not a top-level node (for example, HKEY_LOCAL_MACHINE). Instead, before you refresh the view, select one of the top-level nodes. The view should refresh with the latest state of the registry.

Several Platform Manager SDK samples require updating the projects and code

The following Platform Manager sample SDK projects do not build successfully as installed. However, with a few simple steps, you can fix them in Visual Studio 2005.

  • C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\Hello\Hello.vcw

  • C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\KTSubSample\KTSubSample.dsp

  • C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\PubSub\Publisher\hellopublisher.vcp

  • C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\PubSub\Subscriber\hellosubscriber.dsp

  • C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\PubSub\Test\PubSubTest.vcproj

  • C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\timeviewer\desktop\timeviewer.dsp

  • C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\timeviewer\device\timeviewerce.vcp

Follow these steps to build the samples in Visual Studio 2005:

Hello.vcw

  1. Open C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\Hello\Hello.vcw in Visual Studio 2005 , and let Visual Studio 2005 convert the project.

  2. Save Hello.sln to the same path as the VCW file.

    You will see two new files: CallCap\CallCap.vcproj and FastCap\FastCap.vcproj.

  3. Open C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\Hello\Fastcap\Fastcap.cpp, and move the int i declaration out of the first for loop in DoMultiThread to the previous line.

  4. Open C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\Hello\Callcap\Callcap.cpp, and move the int i declaration out of the first for loop in DoMultiThread to the previous line.

  • Build Hello.sln.

    Both debug and release configurations should build without errors.

KTSubSample.dsp

  1. Open C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\KTSubSample\KTSubSample.dsp, and let Visual Studio 2005 convert the project.

  2. Save KTSubSample.sln to the same path as the DSP file.

  3. Open a command prompt, and change directories to C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\include.

  4. Assuming that Visual Studio 2005 folders are in your %PATH% environmental variable, run MIDL CEPUBSUB.IDL, and then MIDL KTSUB.IDL.

  5. Open KTSubSample.cpp, and comment out the following line:

    Enable3dControlsStatic();// Call this when linking to MFC statically
  6. Build KTSubSample.sln.

    Both debug and release configurations should build without errors.

Hellopublisher.vcp

  1. Open C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\PubSub\Publisher\Hellopublisher.vcp, and let Visual Studio 2005 convert the project.

  2. Save Hellopublisher.sln to the same path as the VCP file.

  3. On the Project menu, click Properties.

  4. Click Configuration Properties, Linker, and then General Property.

  5. Change the following items:

    • Output file: from ..\..\bin\Target\armv4\HelloPublisher.dll, to ..\..\bin\Target\armv4i\HelloPublisher.dll.

    • Additional library directories: from ..\..\..\target\armv4, to ..\..\..\target\armv4i.

    Remember to do this step for both debug and release configurations. You may also have to repeat this step for other solution platforms (or device SDKs) that you have installed in your Visual Studio 2005 configuration. In that case, the processor-specific part of the library paths may differ.

    This library was compiled with updated Visual Studio for Devices compilers/linkers. You need an upcoming Visual Studio 2005 service pack to obtain these compilers/linkers. Go to the Microsoft Download Center for the latest service packs for Visual Studio 2005. If you are using Visual Studio 2005 (original release), you will get the following linker error: "Error LNK2001: unresolved external symbol __GSHandlerCheck." Once you make these changes, the link is created without an error. However, you may see the following warning messages during the debug configuration build:

    • RComHelperCE.lib(MajRegistryhelper.obj) : "Warning LNK4204: C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\PubSub\Publisher\Pocket PC 2003 (ARMV4)\Debug\vc80.pdb is missing debugging information for referencing module; linking object as if no debug info."

    • LIBCMTD.lib(gshandler.obj) : "Warning LNK4099: PDB Libbmtd.pdb was not found with C:\Program Files\Microsoft Visual Studio 8\VC\ce\lib\ARMV4\LIBCMTD.lib or at c:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\PubSub\Publisher\Pocket PC 2003 (ARMV4)\Debug\libbmtd.pdb; linking object as if no debug info."

    Both of these can be ignored because the libraries that are being linked are release build libraries. You cannot debug with them.

  6. Build Hellopublisher.sln.

    Both debug and release configurations should build (with a service pack of Visual Studio 2005) without errors.

Hellosubscriber.dsp

  1. Open C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\PubSub\Subscriber\Hellosubscriber.dsp, and let Visual Studio 2005 convert the project.

  2. Save Hellosubscriber.sln to the same path as the DSP file.

  3. Open HellpSub.cpp.

  4. In CHelloSub::Open, change the following line:

    m_file = ::CreateFile(OLE2T(const_cast<unsigned short *>(filename)),GENERIC_WRITE,0,NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    To:

    #ifdef UNICODE
    m_file = ::CreateFile(T2CW_EX_DEF(OLE2CT(filename)),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
    #else
    m_file = ::CreateFile(OLE2T(filename),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
    #endif
  5. Open Stdafx.cpp, and comment out #include <statreg.cpp> and #include <atlimpl.cpp>.

  6. If you are building one of the release configurations (for example, Release MinDependency, Release MinSize, Unicode Release MinDependency, Unicode Release MinSize), you must set up a linker option to ignore Atlmincrt.lib. Do the following:

    1. In Solution Explorer, select the HelloSubscriber (project) node, and right-click.

    2. Select Properties.

    3. Make sure the Configuration is set to one of the release configurations.

    4. Select Configuration Properties, Linker, and then Input.

    5. Set Ignore Specific Library to Atlmincrt.lib.

    You do not need to do this for any of the debug configurations.

  7. Open a command prompt, and change directories to C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\include.

  8. Assuming that Visual Studio 2005 folders are in your %PATH% environmental variable, run MIDL CEPUBSUB.IDL.

  9. Build Hellosubscriber.sln.

    Both debug and release configurations should build without errors.

PubSubTest.vcproj

  1. Open C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\PubSub\Test\PubSubTest.vcproj, and let Visual Studio 2005 convert the project.

  2. Save the PubSubTest.sln to the same path as the .vcproj file.

  3. Select Properties on the Project menu.

  4. Select Configuration Properties, C/C++, and then General.

  5. Change Additional Include Directories from \..\..\platman\include to \..\..\include.

  6. Select Configuration Properties, Linker, and then Input.

  7. Change Additional Dependencies from Rts.lib to \..\..\lib\dsktop\rts.lib.

    Remember to do this step for both Debug and Release configurations.

  8. If you have not done so already, open a command prompt, and change directories to C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\include.

  9. Run MIDL CEMGR.IDL, and then MIDL CEMGRUI.IDL.

  10. Build PubSubTest.sln.

    Both debug and release configurations should build without errors.

Timeviewer.dsp

  1. Open C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\timeviewer\desktop\Timeviewer.dsp, and let Visual Studio 2005 convert the project.

  2. Save Timeviewer.sln to the same path as the DSP file.

  3. Open TimeViewer.cpp.

  4. Modify some of the string functions called from ConnectToDevice to use the safer versions (with an _s in the function name), as follows:

    • Change:

         stRet = wcstombs(szDeviceName, pszName, sizeof szDeviceName);
      To:

         size_t _PtNumOfCharConverted;
         stRet = wcstombs_s(&_PtNumOfCharConverted, szDeviceName, pszName, sizeof szDeviceName);
    • Change:

         strcpy(szTitle, "TimeViewer : ");
    • To:

         strcpy_s(szTitle, "TimeViewer : ");
    • Change:

         strcat(szTitle, szDeviceName);
      To:

         strcat_s(szTitle, szDeviceName);
    • Change:

         wcscpy(wszDeviceExe, L"\\Windows\\TimeViewerCE.exe");
      To:

         wcscpy_s(wszDeviceExe, L"\\Windows\\TimeViewerCE.exe");
  5. Build Timeviewer.sln.

    Both debug and release configurations should build without errors.

Timeviewerce.vcp

  1. Open C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\samples\timeviewer\device\Timeviewerce.vcp, and let Visual Studio 2005 convert the project.

  2. Save Timeviewerce.sln to the same path as the VCP file.

  3. Build Timeviewerce.sln.

    Both debug and release configurations should build without errors.

Remote Spy window message viewing capability has been disabled

In the Spy remote tool, the ability to spy on window messages has been disabled in Windows Embedded CE 6.0 Platform Builder Service Pack 1 due to OS security policies. If you start Spy, and then try to capture messages on any child window of the desktop window (handle != 0x00000000), the messages window does open in the client. The following message is displayed in the Visual Studio 2005/Platform Builder Debug Output Window:

119985 PID:5b2002e TID:5b4002e ######### CeSpy - Message intercept and display not supported in this OS #########

Kernel Tracker displays events that are off by 10 ms after an event that has no timestamp

If a log file that you are viewing with Kernel Tracker contains an event without a timestamp (for example, WaitForMultipleObjects), subsequent events appear shifted by 10 ms. This is an arbitrary delay that is added so that the event does not appear at the same time as the previous timestamped event.

Remote tools

  • Remote Tools Framework does not connect if you are using a kernel-level transport while the flat release directory is read-protected.

  • Only one remote tool can be connected to a device at a time.

eXDI1 version drivers are not supported by the Platform Builder 6.0 System Debugger and must be replaced with eXDI2 version drivers

If an eXDI1 version driver is selected and then loads by clicking Target Connectivity, and then clicking Debugger, exceptions could occur in Platform Builder if you try to attach the debugger.

Remote Tools Framework Bundle Input Editor leaves deleted settings after a device configuration is deleted

When you delete a device from the Devices panel in Bundle Input Editor, the screen fails to refresh the displayed information in the Selected device configuration section. The information for the deleted device information is still displayed. This only occurs in the user interface (UI), and the data saved in the .cebundleinfo file is correct. This UI behavior will be fixed in a future release.

How to create a debugger extension

Use the following procedure to create a debugger extension:

  1. Void WDBGAPI WinDbgExtensionDllInit (PWINDBG_EXTENSION_APIS lpExtensionApis, USHORT MajorVersion, USHORT MinorVersion).

    lpExtensionApis specifies a pointer to a structure that contains exported functions from Platform Builder.

    MajorVersion is not used. The intent of this structure is to communicate the version of the operating system.

    MinorVersion is not used. The intent of this structure is to communicate the version of the operating system.

  2. Export an ExtensionApiVersion function, as follows:

    LPEXT_API_VERSION WDBGAPI ExtensionApiVersion(void)
    When the debugger calls the ExtensionApiVersion function, the function returns a pointer to EXT_API_VERSION. The version number of the debugger extension DLL must match with the version of the debugger.

    DECLARE_API( XXX ) expands to void WDBGAPI XXX(HANDLE hCurrentProcess, HANDLE hCurrentThread, ULONG dwCurrentPC, ULONG dwProcessor, PCSTR args).

    hCurrentProcess specifies a handle of the current process.

    hCurrentThread specifies a handle of the current thread.

    dwCurrentPC specifies current instruction that the device is halted.

    dwProcessor is not used.

    args specifies the arguments of the command that the user inputs into the Target Control window to invoke the extension function.

Debugger extension functions not implemented

The following debugger extension functions are not yet implemented:

  • CheckControlC

  • GetDebuggerData

  • ReadControlSpace

  • ReadPhysical

  • SetThreadForOperation

  • WritetoSpace

  • WritePhysical

Additions to the documentation of the Ioctl function

The input/output control (Ioctl) function has the following usage:

ULONG Ioctl(
   USHORT IoctlType,
   PVOID lpvData,
   ULONG cbSizeOfData)

The following are some of the Ioctl functions available:

  • IG_GET_BOOTABLEDEVICE

    Obtains the CoreCon device ID for the currently booted device. As a parameter, takes a pointer to a buffer that can store a GUID. Ioctl writes a GUID into this buffer.

  • IG_GET_EXDI2_CCSERVICE

    Obtains the ICcService interface of the current eXDI2 debugger driver. As a parameter, takes a pointer to a buffer that can store a pointer. Ioctl copies out a COM pointer with refcount set to 1 into this buffer.

  • IG_GET_EXDI2_GENERIC

    Obtains the IeXdi2Generic interface of the current eXDI2 debugger driver.

  • IG_GET_OSACCESS_CCSERVICE

    Obtains the ICcService interface of the operating system awareness service.

  • IG_GET_OSACCESS_GENERIC

    Obtains the IOsAxsGeneric interface of the operating system awareness service.

Documentation issue

The following known issue applies to the documentation for Windows Embedded CE 6.0 Platform Builder Service Pack 1:

  • In the SimplePluginManagedAsync Sample topic, the Required Operating System Dependencies section should specify .NET Compact Framework 1.0.

Change List for Windows Embedded CE 6.0 Platform Builder Service Pack 1

CETK

The following changes have been made to the CETK:

  • Updated the CETK to work on Windows Vista.

  • Updated Perf_winsock Test to have better timeout and logging capabilities.

  • Updated NDIS Wireless LAN test to enable/disable wzcsvc before and after the test runs.

  • Updated Bluetooth test.

  • Updated Apcontrol.exe to work with Internet Explorer 7.

  • Updated the Real-time clock tests to allow more delay when fetching the time from RTC.

  • Updated USB Stress test to handle null command-line parameters gracefully.

  • Updated kernel tests.

  • Updated OAL test to remove internally available NTP server list from the Compare RTC to NTP drift test.

  • Added Apcontrol.exe as desktop binary for Authentication Matrix.

  • Updated file system tests.

  • Added new OAL test for Iltiming IOCTL.

  • Added new OAL tests for Instruction Cache.

New Kernel Tracker sample .clg file

A sample .clg file is now installed at C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce###\samples\KTLogFiles\sample.clg. For Windows Embedded CE 6.0 Platform Builder Service Pack 1, the wce### is "wce600". You can open this log file in Kernel Tracker and see interesting thread behaviors.

Deprecated Core Connectivity HLAPI

The following interfaces, along with all their methods, are now deprecated:

  • ICcConnection

  • ICcConnection::CloseProcessHandle

  • ICcConnection::ConnectDevice

  • ICcConnection::CreateStream

  • ICcConnection::DeleteDirectory

  • ICcConnection::DeviceId

  • ICcConnection::DisconnectDevice

  • ICcConnection::DownloadPackage

  • ICcConnection::EnumerateProcess

  • ICcConnection::GetFileInfo

  • ICcConnection::GetProcessExitCode

  • ICcConnection::GetSystemInfo

  • ICcConnection::IsConnected

  • ICcConnection::LaunchProcess

  • ICcConnection::MakeDirectory

  • ICcConnection::ReceiveFile

  • ICcConnection::RegistryCreateKey

  • ICcConnection::RegistyDeleteKey

  • ICcConnection::RegistyDeleteValue

  • ICcConnection::RegistyQueryValue

  • ICcConnection::RegistySetValue

  • ICcConnection::RemoveFile

  • ICcConnection::SearchFileSystem

  • ICcConnection::SendFile

  • ICcConnection::SetFileInfo

  • ICcConnection::TerminateProcess

  • ICcConnection::VerifyFilesInstalled

  • ICcServer::EnumerateConnections

  • ICcServer::GetConnection

  • ICcServer::GetConnectionFromId

  • ICcServer::GetDatastore

  • ICcServer::Locale

  • IConman

  • IConman::SetLocale

  • IConman::SetRegistryRoot

  • IConman::CreateNewServerGuid

  • IConman::EnumerateServerGuids

  • IConman::get_Datastore

  • IConman::GetDeviceFromServerGuid

  • IConman::GetServerFromServerGuid

  • IConman::GetServerGuidInfo

Other Deprecated Interfaces

In addition, the following APIs are now deprecated:

  • ICcCollection

  • ICcCollection::get_Count

  • ICcCollection::get_Item

  • ICcCollection::get_NewEnum

  • ICcDatastore

  • ICcDatastore::get_DeviceContainer

  • ICcDatastore::get_OSImageContainer

  • ICcDatastore::get_PackageContainer

  • ICcDatastore::get_PlatformContainer

  • ICcDatastore::get_PropertyContainer

  • ICcDatastore::get_ServiceCategoryContainer

  • ICcDatastore::get_Version

  • ICcDatastore::RegisterRefreshEvent

  • ICcDatastore::Save

  • ICcDatastore::UnregisterRefreshEvent

  • ICcDevice

  • ICcDevice::ClearOSImage

  • ICcDevice::ClearServiceMap

  • ICcDevice::GetOSImage

  • ICcDevice::GetServiceMap

  • ICcDevice::SetOSImage

  • ICcDevice::SetServiceMap

  • ICcDeviceContainer

  • ICcFile

  • ICcFile::get_FileContainer

  • ICcFile::get_IsCollection

  • ICcFile::MakeCollection

  • ICcFileContainer

  • ICcFormFactor

  • ICcFormFactorContainer

  • ICcObject

  • ICcObject::get_IsProtected

  • ICcObject::get_PropertyContainer

  • ICcObject::ID

  • ICcObject::Name

  • ICcObjectContainer

  • ICcObjectContainer::AddObject

  • ICcObjectContainer::DeleteObject

  • ICcObjectContainer::EnumerateObjects

  • ICcObjectContainer::FindObject

  • ICcOSImage

  • ICcOSImage::SupportedPlatform

  • ICcOSImageContainer

  • ICcPackageType

  • ICcPackageType::FileContainer

  • ICcPackageTypeContainer

  • ICcPlatform

  • ICcPlatform::DeviceContainer

  • ICcPlatform::FormFactorContainer

  • ICcPlatform::ProjectContainer

  • ICcPlatformContainer

  • ICcProject

  • ICcProjectContainer

  • ICcProperty

  • ICcProperty::AddPropertyContainer

  • ICcProperty::Value

  • ICcPropertyContainer

  • ICcServiceCategory

  • ICcServiceCategory::ServiceInfoContainer

  • ICcServiceCategoryContainer

  • ICcServiceInfo

  • ICcServiceInfoContainer

  • ICcTypeToArchitectureMap

Deprecated Structures and Enumerations

The following structures are now deprecated:

  • FileInfo

  • FileVerifyInfo

  • FileVerifyReference

  • FileVerifyResult

  • FileVerifyVersion

  • SystemInfo

The following enumeration is now deprecated:

  • FileCustomAction

Documentation Updates

The following updates will be added to the Windows Embedded CE documentation for the next release:

CeDebugX

CeDebugX is an extension to the Platform Builder debugger. It presents detailed information about the state of the system at break time and attempts to diagnose crashes, hangs, and deadlocks.

CeDebugX commands are available at break time through the Target Control window in Platform Builder.

System Information

CeDebugX provides a set of commands that expose detailed information about important elements of the system at break time. There are commands to examine threads, processes, modules, synchronization objects, heaps, GDI objects, windows, message queues, and other objects in detail. This information extends the basic information that is available through the standard debugger Threads, Processes, and Modules windows, and is intended to make kernel and application level debugging more efficient.

Automatic Diagnosis

CeDebugX includes commands to evaluate the state of the system to diagnose the type and detailed nature of a crash, hang, or deadlock. CeDebugX looks for access violations, stack overflows, spinning threads, deadlocks, orphaned critical sections and mutexes, and heap corruptions. If one or more of these failures is detected, CeDebugX displays as much detailed information as possible regarding the failures, for example, exception address, call stacks, sync object ownership, memory evaluations, and so forth. If more than one failure is detected, CeDebugX presents a list of failures, sorted by severity and confidence in the diagnosis. If a crash or hang is detected, but a positive diagnosis is not possible, CeDebugX will attempt to provide suggestions for further investigation.

Requirements for Running CeDebugX

CeDebugX requires an active debugging session and all of the following conditions:

  • Platform Builder is connected to the target device through the Kernel Independent Transport Layer (KITL).

  • The debugger is loaded on the device.

  • The device is at a debug break state.

  • Platform Builder has access to valid symbols for the modules on the device.

Loading CeDebugX

The version of Windows Embedded CE that you are debugging determines how CeDebugX is loaded. There are separate binary versions of CeDebugX corresponding to Windows Embedded CE major versions:

The Cedebugx60.dll targets products based on Windows Embedded CE 6.0, and it is loaded by default.

The Cedebugx50.dll targets products based on Windows CE 5.0 and can be loaded manually,

For a complete list of CeDebugX commands, see the CeDebugX Commands.

For a list of files generated by CeDebugX, see Files Generated by CeDebugX.

CeDebugX Commands

Once the requirements for running CeDebugX are met and the extension successfully loaded, CeDebugX commands can be invoked at the Target Control command prompt to diagnose errors and conditions on the target device.

All debugger extension commands must be preceded by an exclamation point (!), for example, !help.

Descriptions of most commands and their parameters can be found by typing !<command> /? at the Target Control command prompt.

The following table describes the most important and useful commands.

Command Description

!help

Lists all available commands.

!refresh

Synchronizes the extension with the current state of the system. This command must be invoked after every run/break cycle, or anytime the state of the system changes.

!diagnose

Performs an automatic diagnosis of all crashes or hangs present in the current state at break time.

!xml

Logs positive diagnoses and detailed system information in an XML file and displays the formatted data in a browser window.

The following topics provide more details about CeDebugX commands:

For commands that deal with file creation, see Files Generated by CeDebugX.

Diagnostic Commands

The primary command for automatic diagnosis is !diagnose all. If you are certain of the nature of the failure, you can call the diagnostic procedures individually to save time. However, there is no further action by the individual diagnostic commands if they do not detect the targeted failure type. Since certain failure types may be related (deadlock/starvation, AV/heap corruption), calling the individual diagnostic procedures is not recommended.

The following table describes the diagnostic commands.

Command Description

!diagnose all

Runs through all available diagnostic procedures to diagnose a failure of unknown type.

!diagnose exception

Attempts to diagnose an exception, including stack overflows.

!diagnose starvation

Attempts to diagnose thread starvation.

!diagnose deadlock

Attempts to diagnose a deadlock or orphaned critical section, or mutex.

!diagnose heap

Attempts to diagnose heap corruptions.

!diagnose memory

Attempts to identify low-memory conditions.

!diagnose < index >

If multiple diagnoses are made, the !diagnose command displays a list of diagnoses. To view details for individual diagnoses, use this command with the index of the diagnosis displayed by the previous !diagnose command.

Starvation Delta Checks

Thread starvation conditions are not positively identifiable at break time. To obtain a positive diagnosis you may have to re-enter a run state, wait, and then break into the debugger again.

Note:
After continuing execution and breaking, you must enter the !refresh command before any other CeDebugX commands.

If CeDebugX was unable to detect a clear starvation in the first pass, it saves information regarding the current state of the threads that can run and gives you instructions to proceed, as follows:

A starvation condition could be present in the system. Threads of priority X or below seem to be unable to run.

Please do the following:

1. Press F5 (GO) in the debugger, wait 30 seconds, and break manually.

2. Execute the !diagnose starvation delta command.

After you follow these instructions, CeDebugX uses the information that it saved during the initial pass and compares it to the new information for the threads that can run. In this way, the command can easily identify potentially spinning threads that may cause starvation.

Stack Overflow

If CeDebugX detects stack overflow, it performs a complete stack evaluation. CeDebugX evaluates each DWORD on the overflowing thread stack as text and compares them to known kernel objects. CeDebugX displays symbols near potential addresses and identifies them as frame pointers.

Stack evaluation information does not display in the Target Control window by default because it can be quite extensive.

The complete stack evaluation is saved in the Stackeval.txt in the extension working directory. See also Files Generated by CeDebugX.

To see a stack evaluation in the Target Control window, use the !stackeval command.

Extension Help and Control

The following table describes the commands for Help and general control commands for CeDebugX.

Command Description Parameters

!help

Lists all of the available commands.

None.

!refresh

Synchronizes the extension with the current state of the system. This command must be invoked after every run/break cycle, or anytime the state of the system changes.

None.

!xml -s

Saves debug information in an XML file in the extension working directory. This information is displayed in a browser window. This command includes information for all threads, processes, and modules, as well as diagnostic results, if available.

To save the XML to another location use the –s flag.

-s

Saves the XML file to a different location.

!save

Saves all files in the current working directory to a new location selected in the File Save dialog box.

None.

!version

Displays CeDebugX version and target Windows Embedded CE version, if connected and debugging.

None.

!checksymbols

Verifies that valid kernel and Windows Graphics, Windowing, and Events Subsystem symbols are currently loaded.

None.

!getworkingpath

Displays the path of the current CeDebugX working directory.

None.

!setworkingpath

Changes the current CeDebugX working directory to a new location, using the Browse Folder dialog box.

None.

General System Information

This topic covers general system information commands for CeDebugX. The following table describes these commands.

Command Description Parameters

!exception

Displays exception information, if any, and the current thread call stack.

None.

!kinfo

Displays the top-level information in the UserKInfo table.

None.

!disasm < addr > < process >

Displays the disassembly for a given address.

< addr >

Virtual address.

< process >

(optional)

Process name, handle, or ID that specifies the virtual memory context. The default setting is the current process.

!getsym < addr > < process >

Displays the nearest symbol at the address.

< addr >

Virtual address.

< process >

(optional)

Process context. May be a process name, handle, or ID. The default setting is the current process.

!dd < start address > < process >

Dump memory contents, 256 bytes at a time.

< start address >

(optional)

Starting address. If unspecified, CeDebugX uses the address immediately following the end of the last dump.

< process >

(optional)

Process name, handle, or ID that specifies the virtual memory context. The default setting is the current process.

!getsizeof < type | expr > < process >

Displays the size, in bytes, of a type or unary expression. This exposes the C++ sizeof operator at break time.

< type | expr >

Type or unary expression.

< process >

(optional)

Process context. This can be a process name, handle, or ID. The default setting is the current process.

!d2x < int >

Converts a decimal integer value into a hexadecimal value.

< int >

Integer value.

!x2i < hex >

Converts a hexadecimal value to a signed decimal integer.

< hex >

Hexadecimal value.

!x2u <hex>

Converts a hexadecimal value to an unsigned decimal integer.

< hex >

Hexadecimal value.

!ms2t < milliseconds >

Converts a count of milliseconds to a count of hours, minutes, seconds, and milliseconds.

< milliseconds >

Milliseconds.

!expr < expression >

Evaluates an expression.

< expression >

Symbolic expression. This uses Watch Window syntax, including context specifiers.

!printstr < addr > <process> < # chars >

Reads a Unicode string from device memory, and displays it.

< addr >

Address of string.

< process >

Process context. May be a process name, handle, or ID.

< # chars >

(optional)

Maximum number of characters to display. The default setting is 256.

!printstra < addr > < process > < # chars >

Reads an ANSI string from device memory, and displays it.

< addr >

Address of string.

< process >

Process context. This can be a process name, handle, or ID.

< # chars >

(optional)

Maximum number of characters to display. The default setting is 256.

Thread Information

This topic covers CeDebugX commands for obtaining thread information. The following table describes these commands.

Command Description Parameters

!thread < pThread >

Displays detailed information for the thread whose pointer value is entered.

< pThread >

Thread pointer value. This can be obtained with the !threadlist command.

!threadh < hThread >

Displays detailed information for the thread whose handle value is entered.

< hThread >

Thread handle value. This can be obtained with the !threadlist command.

!threadlist < process >

Displays summary information for all threads in the process entered, or all threads if no process is given.

< process >

(optional)

Process context. This can be a process name, handle, or ID. The default setting is the current process.

!allthreads < process >

Displays detailed information for all threads in the system, or for the given process, if specified.

< process >

(optional)

Process context. This can be a process name, handle, or ID. The default setting is the current process.

!runlist

Displays the list of threads currently able to run, as well as the currently running thread.

None.

!sleeplist

Displays the list of sleeping threads, including threads in calls to the Sleep function, and threads sleeping in WaitForMultipleObjects calls.

None.

!stackeval < pThread >

Enumerates all values on the stack belonging to the thread whose pointer is entered. This function attempts to match each value to a symbol or known value, such as a kernel object handle or GWES object, or a pointer to another location on the stack, if possible. All values display as text. Only values below the stack pointer are shown, and frame boundaries are included, if they can be evaluated.

< pThread >

Thread pointer value. This can be obtained with the !threadlist command.

!stacktrace < pThread >

Displays the stack pointer, frame pointers, and PC at frame pointers for the given thread.

< pThread >

Thread pointer value. This can be obtained with the !threadlist command.

!context < pThread >

Displays the current register context for the specified thread.

< pThread >

Thread pointer value. This can be obtained with the !threadlist command.

Process Information

This topic covers CeDebugX commands for obtaining process information. The following table describes these commands.

Command Description Parameters

!proc < process >

Displays detailed information about a process.

< process >

This can be a process name, handle, or ID.

!proclist

Displays summary information for all running processes.

None.

Module Information

This topic covers CeDebugX commands for obtaining module information. The following table describes these commands.

Command Description Parameters

!module < module >

Displays detailed information for the module identified by name or module object pointer.

< module >

Name of the module or a pointer to the MODULE structure. The MODULE pointer for a module can be found by using the !modlist command.

!modlist < process > < sort order >

!modlist all < sort order >

Displays summary information for all currently loaded modules.

< process >

Lists modules loaded by the given process. This can be a process name, handle, or ID. See the !proclist command.

all: Lists modules loaded by each process in the system.

< sort order >

(optional)

This can be any one of the following values:

name: Sort by module name.

va: Sort by module load address.

ptr: Sort by pointer to a kernel object.

Handles

This topic covers CeDebugX commands dealing with handles. The following table describes these commands.

Command Description Parameters

!handlelist < process >

Displays summary information about handles in the system or a specified process.

< process >

(optional)

Process context. This can be a process name, handle, or ID. The default setting displays handles in all processes.

!handle < h >

Displays detailed information about the object referred to by the specified handle.

< h >

Handle value. This can be obtained with the !handlelist command.

< process >

(optional)

Looks for handles in the process handle tables. This can be a process name, handle, or ID. See the !proclist command.

The default setting is the kernel process.

!h2p < handle > < process >

Displays the pointer value to the object referred to by the specified handle.

< handle >

Handle value.

< process >

(optional)

Looks for handles in the process handle tables. This can be a process name, handle, or ID. See the !proclist command.

The default setting is the kernel process.

Proxies

This topic covers CeDebugX commands for all types of proxies, such as events, critical sections, mutexes, and so forth. The following table describes these commands.

Command Description Parameters

!blocked

Displays a list of blocking objects (proxies) and the threads that they are blocking.

None.

!cslist

Displays a list of critical sections that are currently blocking threads and threads that currently own those critical sections.

None.

!eventlist

Displays a list of events that are currently blocking threads.

None.

!sending

Displays a list of threads blocked in calls to the Win32 SendMessage function.

None.

Memory Information

This topic covers CeDebugX commands for obtaining memory information. The following table describes these commands.

Command Description Parameters

!heaplist < process >

Displays basic information about heaps in the system or in the specified process.

< process >

(optional)

Displays only heaps in the given process. This can be a process name, handle, or ID. See the !proclist command.

The default setting is to display all heaps in the system.

!heapwalk < process > full

!heapwalk all full

Displays detailed information about heaps in the system or the specified process. Walks each heap item, looks for corruptions, and displays totals for heap use.

< process >

Walks only heaps in the specified process. This can be a process name, handle, or ID. See the !proclist command.

all

Walks all heaps in the system.

full

(optional)

Displays summary information about each item in the heap.

!walkthisheap < process > < heap ptr >

Displays summary information about each item in the specified heap.

<process>

(required)

Process context. This can be a process name, handle, or ID. See the !proclist command.

< heap ptr >

Pointer to heap. This value can be obtained with the !heaplist command. The heap pointer is referred to as "Address" in the heap list output.

!heapitem < addr > < process >

Searches for a heap item at the specified address. The address does not have to be the start address of a heap item. It can be an offset into a heap item. If the item is found, this command displays information about the heap item, including header information.

To view the complete contents of a heap item use the !dumpitem command.

< addr >

Address of item or within item.

< process >

(optional)

Searches the heap in the specified process. This can be a process name, handle, or ID. See the !proclist command. If not specified, all heaps are searched.

!dumpitem < addr > < process >

Displays the contents of a heap item, including the header. All user data is evaluated as text and displayed in DWORD increments.

<addr>

Address of heap item. This can be obtained with the !heapwalk command.

< process >

(optional)

Searches the heap in the specified process. This can be a process name, handle, or ID. See the !proclist command. If not specified, all heaps are searched.

!meminfo kernel

Displays information about he kernel heap.

None.

!meminfo basic

Windows CE 5.0 only. Displays a summary report of the memory in each process.

None.

!meminfo slots

Windows CE 5.0 only. Displays a summary report of the system memory and a summary for each slot.

None.

!meminfo pages

Windows CE 5.0 only. Displays all the virtual allocations and the commit information for all the pages.

None.

!meminfo full

Windows CE 5.0 only. Displays all the memory information available, including page header details.

None.

!meminfo legend

Windows CE 5.0 only. Displays Help about the symbols used to represent the pages.

None.

GWES Information

This topic covers CeDebugX commands for obtaining information about the Windows Graphics, Windowing, and Events Subsystem (GWES). The following table describes these commands.

Command Description Parameters

!win

Displays summary information about windows in the system.

all

Displays summary information for all windows in the system.

foreground

Displays the foreground, focus, capture, and keyboard destination windows.

invalid

Displays all windows that have an invalid signature.

< process >

Displays all windows that belong to the specified process. This can be a process name, handle, or ID. See the !proclist command.

!winh < handle >

Displays detailed information for the window whose handle is specified. After the command has been executed once with a valid handle, the user can use navigation commands to move in the window hierarchy.

< handle >

Displays information for the window specified by the given handle.

Navigation commands:

p

Displays the parent window information of the last printed window.

c

Displays the child window information of the last printed window.

n

Displays the sibling information of the last printed window.

d

Displays the window information of all the descendent windows of the last printed window.

a

Displays the window information of all the ancestor windows of the last printed window.

!gditable

Displays a list of Graphics Device Interface (GDI) objects.

When run without any parameters, this command displays GDI type IDs for use with the !gditable type command.

all

Displays the list of all valid GDI objects in the system.

< process >

Displays the list of all valid GDI objects that belong to the specified process. This can be a process name, handle, or ID.

type < type >

Displays the list of all valid GDI objects of the specified type in the system. The type is specified as a number. To obtain the available types, run the !gditable command without parameters.

!gdih < handle >

Displays detailed information for the GDI object specified by the handle.

<handle>

Handle that identifies the GDI object.

!gdiobj < pObj >

Displays detailed information for the GDI object specified by the object pointer.

< pObj >

Pointer to a GDI object. GDI object pointers can be obtained with the !gditable command.

!screenshot -s

Takes a snapshot of the screen, saves it as a bitmap, and then displays the bitmap.

-s

(optional)

Saves the bitmap to the location selected in the File Save dialog box. If not specified, the bitmap is saved in the current working directory.

!msgqueues

Lists window message queues in the system. Displays basic information: queue pointer, process owner, window, and next message in queue.

None.

Files Generated by CeDebugX

Several CeDebugX commands generate files containing information from the debugging session. These files can be useful for investigation and analysis after a debugging session has ended.

Files generated by CeDebugX are stored in its working directory. By default, this is a subfolder in the System\Temp directory.

To view the working directory path, use the !getworkingpath command.

To change the working directory, use the !setworkingpath command.

To save all files in the working directory to a different location use the !save command.

The following table describes the commands that generate files.

Command File Description

!xml

<Session name>.xml

Generates an XML file containing any positive diagnosis that has been made during the session; detailed information about all threads, processes, and modules running or loaded at break time; a list of sync objects currently blocking threads; and the current list of threads able to be run.

!screenshot

Screenshot.bmp

Generates a .bmp with a screenshot of the device at break time.

!diagnose

Stackeval.txt

When a stack overflow is detected, this command generates a complete listing of all values on the thread stack, as well as an attempt to identify the nature of these values. For example, does it point to a symbol? Is it a pointer or handle to an object maintained by the kernel? Is it a frame pointer?

!diagnose

Runlist.txt

When thread starvation is detected, this command generates a text file with the list of running, and able to be run, threads at break time.

Source Code for CETK Tests

You can install source code for the tests that ship with Windows Embedded CE 6.0 Test Kit (CETK). Microsoft provides source code to help you debug your device drivers and create custom tests for CETK. However, not all of the source code is able to build, and not all source code is provided.

You can install source code for CETK tests by installing Windows Embedded CE Shared Source from the Setup wizard for Windows Embedded CE.

If you use the source code to create a custom test, you can add it to CETK.

The Setup wizard for Windows Embedded CE installs source code for CETK tests at %_WINCEROOT%\Private\Test.

Some CETK tests require libraries or DLLs for which source code is not provided. Before you can build CETK source code, you must copy libraries or DLLs to the appropriate project directories for which source code is not provided.

Procedures

To build CETK source code
  1. Build the entire %_WINCEROOT%\Private\Test tree.

    -OR-

    Build the source code at %_WINCEROOT%\Private\Test\External.

    When you build the source code at %_WINCEROOT%\Private\Test\External, CETK test modules copy from %_WINCEROOT%\Others\Wcetk to the project directories of the current build window.

  2. Build the CETK source code that you want.

Writing a Shim for the Application Verifier Tool

A shim includes the following code sections:

Generated code

The source file specified in the Shim source box, as seen in the following procedure, contains all the redirected functions. These functions can either replace the functionality, or pass the call on to the original library, and monitor the input/output of that function. To pass the call on to the original function, call the function; the application verifier engine ensures that no functions imported by your shim will be redirected to another shim (or back to itself). You are not required to pass the call on to the original DLL.

DllMain.c

This file contains the implementation for DllMain. You can customize this file to perform any initialization or termination tasks required.

OptionsDlg.c

To add a pane for this shim, in the Options dialog box of Settings Manager, implement and export GetOptionsDialogProc. This function must return a dialog procedure and resource template to be used in the property sheet. Customize the dialog resource and procedure for your specific shim.

ParseCommand.c

To add a custom command to the CE Target Control in Platform Builder,, implement and export the ParseCommand function.

QueryShimInfo.c

The function QueryShimInfo is a required entry point of a shim dll. Do not make any changes to this file; instead, customize ShimInfo.rc described in the following.

RemoteUI.c

Get/Set/FreeShimSettings are not required entry points for a shim DLL. Implement these only if you want to send application-specific run-time settings to the device.

ShimInfo.rc

Customize this file with strings that describe your shim. The friendly name displays in the right pane of Settings Manager, and the description displays in the lower pane.

The following procedure specifies how to create and implement a shim for Application Verifier.

Procedures

Creating and implementing a shim for Application Verifier
  1. Determine which functions you want to shim, and then implement those functions in a DLL.

  2. Start ShimGenUI.exe. The following figure displays Application Verifier Shim Generator.

  3. In the Original DLL box, type the full path to the DLL that implements the functions you want to include in the shim.

    -OR-

    Click on the ellipsis button (...) to browse for the DLL.

    When the DLL is selected, the left pane populates with the functions exported by that DLL.

  4. In the Shim Source box, type the full path to the C/C++ file containing your shim's implementation of these functions.

    -OR-

    Click on the ellipsis button (...) to browse for the source file.

    From the left pane, select the functions to be implemented in the shim, and then click Add. You can also select the API Filter box to apply a case-sensitive filter to the functions.

  5. When all the functions to be implemented are selected, click on the Generate Code button. The framework code that generates displays in your code editor.

Target Control Extensions

A Target Control extension is a plug-in that runs in the Shell.exe process on the device. The extension allows you to add commands to the Target Control window. If a command is entered in the Target Control window that is not known to the core service, the command is passed to installed extensions. Target Control extensions run when the device is running. These commands are not available while the device is stopped in the debugger.

You need to include the Ceshext.h header file to build a Target Control extension. This header file is installed in the <Platform Builder directory>\cepb\SDK\INCLUDE directory.

Installation

Target Control extensions are registered in the device registry under the following key:

HKEY_LOCAL_MACHINE\Software\Microsoft\TxtShell\Extensions

Extensions are REG_SZ values. The value name is a descriptive name of the extension, and the value data is the location of the extension DLL.

Exported Function

Target Control extension DLLs export a single function, ParseCommand, as shown in the following code example:

BOOL ParseCommand(
   LPCTSTR szCmd,
   LPCTSTR szCmdLine,
   PFN_FmtPuts pfnFmtPuts,
   PFN_Gets pfnGets);

Usage

The function parameter usage is shown in the following table:

Parameter Description

szCmd

The name of the command.

szCmdLine

The rest of the command line.

pfnFmtPuts

Pointer to a function that writes formatted text to the Target Control window. The function is like printf and has a limit of 1024 characters.

typedef void (*PFN_FmtPuts)(TCHAR *s,...);

pfnGets

Pointer to a function that reads text from the Target Control window. Note that the text that is received often has extra white space at the front of the string. You can trim the white space at the beginning of the string as follows:

TEXT(' '), TEXT('\r'), TEXT('\n'))
typedef TCHAR * (*PFN_Gets)(TCHAR *s, int cch);

Return Value

Returns TRUE if the extension handles the command.

Help

If the user enters a question mark (?) in the Target Control window, each extension is passed the command. The extension can display the usage for supported commands using the pfnFmtPuts parameter.

Example

BOOL ParseCommand(
   LPCTSTR szCmd,
   LPCTSTR szCmdLine,
   PFN_FmtPuts pfnFmtPuts,
   PFN_Gets pfnGets)
{
   BOOL  fReturn = FALSE;
   //
   //Special case, the help command.
   //
   if (0 == _tcscmp(szCmd, _T("?")))
   {
      pfnFmtPuts(_T("Help for this extension commands\r\n"));
   }
   if (0 == _tcsicmp(szCmd, _T("mycommand")))
   {
      fReturn = TRUE; //This command is handled.
   //Specific logic for mycommand.
   }
   return fReturn;
}