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:
-
New debugging tools
-
Target Control extensions
-
New documentation
Contents
-
System Requirements
-
Installing Windows Embedded CE 6.0 Platform Builder Service Pack 1
-
Uninstalling Windows Embedded CE 6.0 Platform Builder Service Pack 1
-
Windows Embedded CE 6.0 Installation Issues
-
What's New for Windows Embedded CE 6.0 Platform Builder Service Pack 1
-
Copyright Information for Windows Embedded CE 6.0 Platform Builder Service Pack 1
-
License Terms
-
Technical Support and Community
-
Windows CE 5.0 Functionality 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
-
Change List for Windows Embedded CE 6.0 Platform Builder Service Pack 1
-
Documentation Updates
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.
-
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. -
Download and run the Windows Embedded CE 6.0 Platform Builder Service Pack 1 .msi file.
-
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.
-
Log on to Windows as an administrator.
-
Use Add or Remove Programs to remove Windows Embedded CE 6.0 Platform Builder Service Pack 1.
-
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
-
Visual Studio Help may not be functional during Windows Embedded CE 6.0 installation
-
Setup dialog box may appear when Help is launched under a different account
-
Preparing to Install dialog box may appear when opening other applications
-
Uninstallation of Windows CE 5.0 can delete registry keys required for Windows Embedded CE 6.0 in a side-by-side installation
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:
-
Click Start, and select Run.
-
Type gpedit.msc, and click OK.
The Group Policy window opens.
-
Expand the Computer Configuration, Administrative Templates, and Windows Components nodes.
-
Select Windows Installer.
-
In the right pane, double-click Allow admin to install from Terminal Services session.
The Properties dialog box opens.
-
Click the Setting tab, and select Enabled.
-
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:
-
Create a text file that has the .reg extension.
-
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] @=""
-
Save the file, and close it.
-
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 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 Window Vista
-
Booting a Device Emulator image
-
Platform Builder not supported on 64-bit systems
-
Microsoft Smart Devices Remote Tools Framework and Windows Embedded CE 6.0 Platform Builder Service Pack 1 cannot be installed on the same computer
-
Remote Tools does not connect to a device image that resides on a read-only share
-
Remote Call Profiler does not finish collection on application exit
-
Remote Kernel Tracker process never exits if its connection is canceled
-
Error while building a Remote Tools Framework plug-in
-
Searching in Visual Studio 2005 with Find and Replace fails if Current Project is selected in the Look In box
-
Remote Tools shell and Plug-in Explorer context menus are shown only if the node is selected
-
Target menu persists if it is clicked right after a mode change
-
Platform Manager fails to copy DOS executables from desktop to device with the Remote File Viewer
-
Remote Tools Framework managed device-side code requires full .NET Compact Framework on Windows Embedded CE 6.0
-
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
-
Disconnecting and reconnecting a Remote Tools Framework plug-in quickly may cause your device to hang
-
CETK cannot connect over IP security–protected sockets on Window Vista
-
Remote tool OS dependencies
-
When debugging an ARM application, you cannot step into an ASM function
-
Platform Builder installed on a system with Platform Builder 4.x already installed may modify debugger connectivity settings and the debugger may not connect
-
Opening a .csi file in SysInfo remote tool does not refresh UI
-
Zoom may display error when run under out-of-memory conditions
-
Kernel Tracker memory usage may rise
-
Registry Editor remote tool may not refresh completely when programmatically modifying the registry from another application
-
Several Platform Manager SDK samples require updating the projects and code
-
Remote Spy window message viewing capability has been disabled
-
Kernel Tracker displays events that are off by 10 ms after an event that has no timestamp
-
Remote tools
-
eXDI1 version drivers are not supported by the Platform Builder 6.0 System Debugger and must be replaced with eXDI2 version drivers
-
Remote Tools Framework Bundle Input Editor leaves deleted settings after a device configuration is deleted
-
How to create a debugger extension
-
Debugger extension functions not implemented
-
Additions to the documentation of the Ioctl function
-
Documentation issue
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:
-
At a command prompt, change directories to <Windows Embedded CE 6.0 install directory>/corecon/bin/.
-
Run
Regsvr32 download_DEmulator.dll
.
-
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:
-
Open a command prompt as an administrator.
-
Change directories to <Windows Embedded CE 6.0 install directory>/corecon/bin/.
-
Run
Regsvr32 download_DEmulator.dll
.
-
Download the driver (Netsvwrap.msi) from this
Microsoft Web site , and save it locally.
-
Open a command prompt as an administrator.
-
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.
-
In Platform Builder for Windows Embedded CE 6.0, select Open on the File menu, and then select Project.
-
Open the *.bin directly from a read-only folder.
-
Attach the device, and wait for the device to launch completely.
-
In the remote tool, select Configure Windows CE Platform Manager on the Connection menu to bring up the Device Properties dialog box.
-
Select Windows CE Default Platform, and then Default Device.
-
Click Properties.
-
For the Startup server, ensure that you are using KITL Bootstrap Server.
-
Click Configure.
-
In the CESHX Configuration Settings dialog box, select Alternate Folder, and enter a local path (for example, c:\temp\KITLBootstrap).
-
Click OK.
-
In the Device Properties dialog box, click Test to make sure that you can get a proper connection.
-
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
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:
-
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.
-
Select Connection, and then Configure Windows CE Platform Manager.
-
Select the default device, and click Properties.
-
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.
-
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:
-
Run the repair for your older Windows Embedded CE installation(s) (in chronological order, for example, 4.0, and then 5.0).
-
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.
-
Install (or repair) Windows Embedded CE 6.0.
-
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.
-
Run the repair for your older Windows Embedded CE installation(s) (in chronological order, for example, 4.0, and then 5.0).
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
-
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.
-
Save Hello.sln to the same path as the VCW file.
You will see two new files: CallCap\CallCap.vcproj and FastCap\FastCap.vcproj.
-
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 firstfor
loop in DoMultiThread to the previous line.
-
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 firstfor
loop in DoMultiThread to the previous line.
-
Build Hello.sln.
Both debug and release configurations should build without errors.
KTSubSample.dsp
-
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.
-
Save KTSubSample.sln to the same path as the DSP file.
-
Open a command prompt, and change directories to C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\include.
-
Assuming that Visual Studio 2005 folders are in your
%PATH%
environmental variable, runMIDL CEPUBSUB.IDL
, and thenMIDL KTSUB.IDL
.
-
Open KTSubSample.cpp, and comment out the following line:
Enable3dControlsStatic();// Call this when linking to MFC statically
-
Build KTSubSample.sln.
Both debug and release configurations should build without errors.
Hellopublisher.vcp
-
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.
-
Save Hellopublisher.sln to the same path as the VCP file.
-
On the Project menu, click Properties.
-
Click Configuration Properties, Linker, and then General Property.
-
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.
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."
-
Output file: from ..\..\bin\Target\armv4\HelloPublisher.dll, to ..\..\bin\Target\armv4i\HelloPublisher.dll.
-
Build Hellopublisher.sln.
Both debug and release configurations should build (with a service pack of Visual Studio 2005) without errors.
Hellosubscriber.dsp
-
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.
-
Save Hellosubscriber.sln to the same path as the DSP file.
-
Open HellpSub.cpp.
-
In CHelloSub::Open, change the following line:
To:m_file = ::CreateFile(OLE2T(const_cast<unsigned short *>(filename)),GENERIC_WRITE,0,NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
#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
-
Open Stdafx.cpp, and comment out
#include <statreg.cpp>
and#include <atlimpl.cpp>
.
-
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:
-
In Solution Explorer, select the HelloSubscriber (project) node, and right-click.
-
Select Properties.
-
Make sure the Configuration is set to one of the release configurations.
-
Select Configuration Properties, Linker, and then Input.
-
Set Ignore Specific Library to Atlmincrt.lib.
-
In Solution Explorer, select the HelloSubscriber (project) node, and right-click.
-
Open a command prompt, and change directories to C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\sdk\wce600\include.
-
Assuming that Visual Studio 2005 folders are in your
%PATH%
environmental variable, runMIDL CEPUBSUB.IDL
.
-
Build Hellosubscriber.sln.
Both debug and release configurations should build without errors.
PubSubTest.vcproj
-
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.
-
Save the PubSubTest.sln to the same path as the .vcproj file.
-
Select Properties on the Project menu.
-
Select Configuration Properties, C/C++, and then General.
-
Change Additional Include Directories from \..\..\platman\include to \..\..\include.
-
Select Configuration Properties, Linker, and then Input.
-
Change Additional Dependencies from Rts.lib to \..\..\lib\dsktop\rts.lib.
Remember to do this step for both Debug and Release configurations.
-
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.
-
Run
MIDL CEMGR.IDL
, and thenMIDL CEMGRUI.IDL
.
-
Build PubSubTest.sln.
Both debug and release configurations should build without errors.
Timeviewer.dsp
-
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.
-
Save Timeviewer.sln to the same path as the DSP file.
-
Open TimeViewer.cpp.
-
Modify some of the string functions called from ConnectToDevice to use the safer versions (with an _s in the function name), as follows:
-
Change:
To:stRet = wcstombs(szDeviceName, pszName, sizeof szDeviceName);
size_t _PtNumOfCharConverted; stRet = wcstombs_s(&_PtNumOfCharConverted, szDeviceName, pszName, sizeof szDeviceName);
-
Change:
strcpy(szTitle, "TimeViewer : ");
-
To:
strcpy_s(szTitle, "TimeViewer : ");
-
Change:
To:strcat(szTitle, szDeviceName);
strcat_s(szTitle, szDeviceName);
-
Change:
To:wcscpy(wszDeviceExe, L"\\Windows\\TimeViewerCE.exe");
wcscpy_s(wszDeviceExe, L"\\Windows\\TimeViewerCE.exe");
-
Change:
-
Build Timeviewer.sln.
Both debug and release configurations should build without errors.
Timeviewerce.vcp
-
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.
-
Save Timeviewerce.sln to the same path as the VCP file.
-
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:
-
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.
-
Export an ExtensionApiVersion function, as follows:
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.LPEXT_API_VERSION WDBGAPI ExtensionApiVersion(void)
DECLARE_API( XXX ) expands to voidWDBGAPI 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:
-
Diagnostic Commands
-
Extension Help and Control
-
General System Information
-
Thread Information
-
Process Information
-
Module Information
-
Handles
-
Proxies
-
Memory Information
-
GWES Information
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 |
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 |
!threadh < hThread > |
Displays detailed information for the thread whose handle value is entered. |
< hThread > Thread handle value. This can be obtained with the |
!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 |
!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 |
!context < pThread > |
Displays the current register context for the specified thread. |
< pThread > Thread pointer value. This can be obtained with the |
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 < 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 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 < process > (optional) Looks for handles in the process handle tables. This can be a process name, handle, or ID. See the 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 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 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 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 < heap ptr > Pointer to heap. This value can be obtained with the |
!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 |
< 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 |
!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 < process > (optional) Searches the heap in the specified process. This can be a process name, handle, or ID. See the |
!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 |
!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 |
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 |
!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 |
!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
-
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.
-
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
-
Determine which functions you want to shim, and then implement those functions in a DLL.
-
Start ShimGenUI.exe. The following figure displays Application Verifier Shim Generator.
-
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.
-
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.
-
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.
|
|||
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:
|
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; } |