Windows Driver Kit
version 7.1.0 Release Notes
Supporting
Windows 7, Windows Vista, Windows XP
Windows
Server 2008 R2, Windows Server 2008, Windows Server 2003
Welcome
Welcome to the Microsoft
Windows Driver Kit (WDK) Version 7.1.0. This WDK contains a set of tools, code
samples, documentation, compilers, headers, and libraries that driver
developers can use to create drivers for Windows 7, Windows Vista, Windows XP, Windows
Server 2008 R2, Windows Server 2008, and Windows Server 2003.
Each WDK has a version
number to identify WDK releases. This version number changes with each service release.
The first number will increase with each major Windows client operating system
release. The second and third numbers will identify WDK service releases.
This is the first service release for WDK version 7.
These release notes cover the changes that were made for this release as well as the changes that were
in the WDK version 7.0.0.
Table
of Contents
License Information
Installation
Information
WDK Version 7.1.0 Changes
and Issues
WDK Build
Environment Changes and Issues
Redistributable
Files Changes and Issues
Sample Changes and
Issues
Tool Changes and Issues
Supplemental
Release Notes
License
Information
End User License Agreement
The contents included in
the Windows Driver Kit are licensed to you, the end user. Your use of the WDK
is subject to the terms of an End User License Agreement (EULA) accompanying
the WDK and located in the WDK installation directory. The name of the file is
license.rtf. Before you access or use the WDK, you must read and accept the
terms of the EULA. If you do not agree to the terms of the EULA, you are not
authorized to use the WDK.
Active Perl
The Windows Driver Kit
contains Active Perl. For more information about ActiveState Corporation's
Active Perl, see the ActiveState
Web site.
Installation
Information
Complete
information about WDK installation can be found in the Installation
Guide.
IA64 is not supported as
an installation platform
Debugger Installation
If you install the Windows
Debugger using Kitsetup, the debugger tool will be installed in a folder called
Debuggers in the installation path that you selected. If you install the debugger
tool along with other WDK components, they will all have the same root
installation path. If you do not want the debugger tool to be installed
in the same root path as the other WDK components, you can do one of the
following:
1. Run
the Debugger MSI on the media directly.
2. Run
Kitsetup, install ONLY the debugger, and choose an installation path for the
Debugger. When you rerun Kitsetup to install the other WDK components, choose a
different installation path for the other WDK components.
MSXML 6.0 required for the
Mc.exe tool to run
The Message Compiler (Mc.exe)
tool has a dependency on Microsoft Core XML Services (MSXML) 6.0 to run
correctly. If you have the Windows Driver Kit installed on Windows XP with
Service Pack 3 (SP3) or later versions of Windows, MSXML 6.0 is already
installed. If you have the Windows Driver Kit installed on an earlier version
of the Windows operating system, download MSXML 6.0. To download MSXML 6.0
services, go to the Microsoft
Download Center Web site.
Kit
Content Layout
By default, the WDK is
installed to your local disk in the locations below. The default installation
path for this WDK is C:\WinDDK\7600.16385.1.
Directory
|
Contents
|
\Bin
|
WDK build tools
|
\Debug
|
Files used during debugging
|
\Help
|
WDK documentation
|
\Inc
|
WDK headers
|
\Lib
|
Import libraries
|
\OACR
|
Microsoft Auto Code
Review
|
\Redist
|
Redistributable files
|
\Src
|
WDK samples
|
\Tools
|
Development, Debug and
Test tools
|
\Debuggers
|
Windows Debugger
|
Possible installation
problems with WinUSB on Vista RTM
Issue: On
Windows Vista with no service packs installed, occasionally we have seen a
problem. When installing WinUSB2, it is possible the install will fail and the
device will not work.
Workaround: To
mitigate the problem install the KB fixes 949939 & 937287, or update your
system to Vista SP1 or Vista SP2.
WDK
Version 7.1.0 Changes and Issues
This section
contains information about the changes to the WDK for the 7.1.0 refresh release.
Windows XP x64 is now supported as
an installation platform
Debugger Changes
The Debugging Tools for Windows have been updated
in this release of the WDK. The following changes were made:
·
Debugger Version changed to 6.12.2.633. See the release notes in the debugger package for more information.
·
Updated ndiskd.dll
·
Miscellaneous bugfixes in UMDF and KMDF debugger extensions:
·
KMDF:
o Ability to print more than 50 requests on a queue
o !wdfdevice correctly displays FileObjectClass Name
o Display if a request is cancelled if it is on the driver notified list
·
UMDF:
o Correctly display a umirps cancel callback
o Dump a devices Cleanup and Close callbacks
o Display the file object associated with a request
Redistributable Change: Update to offreg.dll
Build Environment Changes
·
Updated MSVCRT.lib to fix driver crashes in Vista
·
Updated ws2_32.lib
·
Added ntddump.h
·
Added NPIV.mof
·
Added headers for Vista 7ip
·
Fixed annotations on I/O routines
·
Added wudftrace.ctl containing all umdf trace guids
Sample Changes and Issues
·
NDIS:
·
Xframeii: bugs fixed
·
Added NetVmini sample
·
Sensor skeleton sample: memory leak issues fixed
·
KMDF Toaster sample: bug fixed
·
WDM Event sample: bug fixed
·
Port I/O sample driver: There is a syntax issue in the file …\src\general\portio\sys\genport.inx
that prevents the driver from being successfully installed on pre-Windows 7 systems. The workaround is to replace
all occurrences of “PORTIO_Device” with “PortIO_Inst”.
Update to Sensor Adapter Test Suite
WDK
Build Environment Changes and Issues
This section
contains information about the changes to the Build Environment since the WDK
for Server 2008 (6001.18002).
Windows 2000 Build
Environment no longer supported
The libraries for
Microsoft Windows 2000 have been removed from the WDK. _NT_Target_Version=$(NT_TARGET_VERSION_WIN2K)
will result in an error. _NT_Target_Version must be Windows XP or a
later version of Windows.
KMDF and UMDF Version
Macros changed
The macros to indicate
KMDF and UMDF versions have changed syntax. For Windows 7, the old syntax will
produce a warning.
·
KMDF_VERSION changed to KMDF_VERSION_MAJOR
·
UMDF_VERSION changed to UMDF_VERSION_MAJOR
·
KMDF_MINOR_VERSION changed to KMDF_VERSION_MINOR
·
UMDF_MINOR_VERSION changed to UMDF_VERSION_MINOR
Microsoft Auto Code Review
(OACR) added
Microsoft Auto Code Review
tools (OACR) has been added to the WDK Build Environment. OACR will start
automatically when a WDK Build Environment window is opened. It runs in the
background and will run PreFast for Drivers (PFD) after every build. An icon in
the taskbar will indicate if the build contains PFD errors and warnings. For
more information on OACR, please see the WDK documentation.
Changes to code signing
tools
Signtool has been updated
with the following changes:
·
Removed
dependency on CAPICOM
·
Supports
SHA-2 digest algorithm use in signatures
·
Supports
RFC 3161 timestamping when used on Windows 7
·
Fixes
to the use of the /ac and /kp switches
ATL 2.1 and ATL 3.0
headers removed
The headers for ATL 2.1
and ATL 3.0 have been removed. ATL 7.1 headers have been moved from
…\inc\crt\atl71 to …\inc\atl71. Changes were made to the build environment to
use the ATL 7.1 header files in the new location. If your Sources file contains
ATL_VER, the value should be 70 or 71.
Headers added and removed
The following headers were
included in the WDK for Server 2008 (6001.18002), but are not
included in this release:
·
DDK:
o fsctlbuf.h
o hvgdk.h
o rdbss.h
o rxassert.h
o rxcommon.h
o rxdebug.h
o rxpooltg.h
o smbus.h
·
API
o dmmdiag.h
o specstrings_adt.h
o wincred.h
The following DDK headers
have been added to the WDK:
·
DDK:
o anchorsyncdeviceservice.h
o bridgedeviceservice.h
o calendardeviceservice.h
o cifs.h
o contactdeviceservice.h
o deviceservices.h
o dsm.h
o fullenumsyncdeviceservice.h
o hintsdeviceservice.h
o messagedeviceservice.h
o metadatadeviceservice.h
o mpiodisk.h
o mpiowmi.h
o ndischimney.h
o ndiswwan.h
o notesdeviceservice.h
o offreg.h
o procgrp.h
o ringtonedeviceservice.h
o sensorsclassextension.h
o statusdeviceservice.h
o syncdeviceservice.h
o taskdeviceservice.h
o usbstorioctl.h
o wwan.h
o
xpsrassvc.h
·
API:
o
audioapotypes.h
o
audioendpoints.h
o
audioendpoints.idl
o
d3d11tokenizedprogramformat.hpp
o
dxgiformat.h
o
functiondiscoveryerror.h
o
functiondiscoveryprovider.h
o
functiondiscoveryprovider.idl
o
functiondiscoveryproviderhelper.h
o
fwpvi.h
o
hvgdk.h
o
ime_cmodes.h
o
kernelspecs.h
o
lsalookup.h
o
lsalookupi.h
o
mmc.h
o
mshtmhst.h
o
mshtml.h
o
msopc.h
o
mxdc.h
o
objectarray.h
o
objectarray.idl
o
pbdaerrors.h
o
pmi.h
o
qosobjs.h
o
sal_supp.h
o
sdv_driverspecs.h
o
sensors.h
o
specstrings_supp.h
o
structuredquerycondition.h
o
structuredquerycondition.idl
o
usbrpmif.h
o
verrsrc.h
o
winbio.h
o
winbio_adapter.h
o
winbio_err.h
o
winbio_ioctl.h
o
winbio_types.h
o
wnnc.h
o
xpsobjectmodel.h
KMDF/UMDF Version 1.9
KMDF and UMDF have been
updated to version 1.9. Changes include the following:
·
Guaranteed
forward progress for KMDF drivers
·
Performance
improvements in KMDF
·
Security
hardening of the UMDF host process
·
Improvements
in the UMDF PnP model
·
Ability
to use KM drivers in the UM stack
KMDF continues to support
execution on Windows 2000 SP4 and later systems. UMDF supports execution on Windows
XP SP3 and later systems. For more information, see the Windows
Hardware Developer Central (WHDC) website and the WDK
documentation.
KMDF filter driver for HID
device may fail to send I/O
Issue: For
filter drivers, due to a bug in the framework, the I/O type information used by
WDFIOTARGET objects - created before the device is started - may not match with
the I/O type information of the target deviceobject represented by the iotarget
object. As a result when the filter driver formats the request, the underlying
IRP may get formatted incorrectly. Currently this bug manifest only if the
filter driver is used for HID devices because HIDClass changes the I/O type of
its device (PDO) during IRP_MN_START_DEVICE processing. This issue impacts
default I/O target and other WDFIOTARGET objects created by the driver in
EvtDriverDeviceAdd callback.
Workaround: The
only workaround is to create an I/O target in EvtDeviceSelfManagedIoInit()
callback instead of EvtDriverDeviceAdd() callback to the lower device object
and use it. Sample code is given below:
WDF_IO_TARGET_OPEN_PARAMS_INIT_EXISTING_DEVICE(&openParams,
WdfDeviceWdmGetAttachedDevice (device));
status = WdfIoTargetCreate(device,
WDF_NO_OBJECT_ATTRIBUTES,
&devExt->IoTarget);
status =
WdfIoTargetOpen(devExt->IoTarget, &openParams);
Redistributable
Changes and Issues
This
section contains information on the changes to the Redistributables since the WDK
for Server 2008 (6001.18002).
WDF Co-installers
Co-installers for WDF
version 1.9 are included. The co-installers for WDF version 1.7 have been
removed. The WDF 1.9 co-installers are backward compatible with prior versions
of WDF.
WinUSB Co-installers
Co-installers for WinUSB
v2 have been added to the kit.
DIFx
The DIFx redistributables
have been updated.
Offreg
Offreg DLLs have been
added.
Sample
Changes and Issues
This section
contains information on the changes to the Samples since the WDK
for Server 2008 (6001.18002).
Sample Folder
Reorganization
The samples have been
reorganized. The KMDF and UMDF samples have been moved into the folders for
their appropriate device areas. Some of the WDM samples have been removed.
Those that are still in the WDK can be found in the same location.
Signing Sample
The signing sample, Selfsign_example.cmd,
has been moved from …\bin\selfsign to …\src\general\build\driversigning.
Samples added and removed
The following samples were
included in the WDK for Server 2008 (6001.18002), but are not
included in this release:
·
HID:
Virtual HID (vhidmini.sys)
·
File
System:
o Filespy
Filter
o Mulnrx
o Smbmrx
·
PnPI8042
·
Mouser
·
Kernel
Samples:
o AGP440
o AGPlib
o GAGP30KX
o Radeon
8500 Sample Driver
o UAGP35
·
MCA
Management Application
·
Network:
o COISDN
o IRDA
o E100BEX
o NDIS
Connection-less Protocol Driver
·
Storage:
o Changer
INF Samples
o Tape
Samples
o I2O
Miniport
·
Video:
R200 Sample
The following samples have
been added to the WDK:
·
1394:
Hybrid (UMDF/KMDF) 1394VDEV driver
·
Audio:
Mic Array
·
Biometric
samples
·
Build.exe
samples
·
Bus:
o Virtual
Serial Driver in UMDF
o UMDF
USB Fx2 sample updated to demonstrate continuous reader and power-policy owner
·
File
System: Simrep Minifilter
·
General:
o Performance
Counters
o RegFltr
o PortIO
sample converted to KMDF
o UMDF
version of Toastmon driver
o UMDF
version of toaster function driver
·
HID:
EloMT
·
Input:
Moufilter driver converted to KMDF
·
Network:
Xframe II
·
Print:
XPS Raster Filter
·
Sensors
samples
·
Storage:
Storport Miniports
·
WMI
Sample
·
WPD:
o WPD
Basic Hardware Driver
o WPD
MultiTransport Driver
o WPD
Service Sample Driver
Additional information
about these samples can be found in the WDK Documentation, or in a file in the
directory with the sample.
SWTuner Sample
The SWTuner sample
support the digital network types:
• ATSC
• QAM
• DVB-T
• DVB-S
• DVB-C
• ISDB-T
• ISDB-S
• Netop
Main
differentiation is the demodulator node type, which identifies the used
standard.
The framework
exposes all necessary BDA definitions for the KS Proxy to control tuner and
demodulator parameters.
However the SWTuner
internally process only the frequency to select a transport stream that is
streamed from HDD.
Enhancements in the
PAL/Secam Tuner show how to implement Exhaustive Scanning for analog TV. To
enable the tuner hardware based scanning the registry key HardwareScanning=1
have to be set. The sample show how to setup a scan thread that scan in 250khz
steps from low to high frequency.
The analog framework
expose the filters tuner, audio, crossbar, capture and encoder.
Enhancement for
DVB-S show how to implement DiSEqC into the tuning.
PBDA interfaces are
incorporated for the DVB-S sample. This explain how to enhanced a BDA tuner
with PBDA interfaces, e.g. eventing and MMI.
Further the Netop
Tuner type use the full PBDA schema and implements all possible PBDA interfaces
such as the following services. The Netop Tuner is adjusted as DVB-T network
type in the GPNV value Source Types.
Eventing Service:
Eventing manager
that handle the transfer of queued events to the PBDA User mode ESEvents
Debug Service:
Manage to queue
debug messages to user mode.
GPNV Service:
Implementation of
necessary Name values, that show the basic use for a operation, setup and MMI
A real tuner shall
not set the variables Device Id and Tuner Id and instead store the values
persistent for the tuner.
CAS Service:
The implementation
show the use of MMI's for the Diagnostic and Setup page. Broadcast MMI's are
shown
with the change of
a channel.
MUX Service:
The service
transfer PID mapping information, which allows to control transport stream
mapping and
identification of
the current selected service. A PBDA tuner can control his own demultiplexer
and shall map all PID's to the output transport stream (if the hardware cannot
deliver a full mpeg2 transport stream).
DRM Service:
Entry points for
all DRM related functions.
Scanning/Tuning:
Scanning the
frequency range and set/get the tuning parameters with xml tuning parameters.
Tuners can use the scanning to scan from low to high frequency and determine
the modulation parameters. These parameters are read every time the tuner find
a signal via PBDA_Tuning_GetTunerState.
GDDS:
Loading the PBDA
services and there tuning parameters, interface to load guide data. Note that
only if the data type is PBDA_GUIDE_DATATYPE services and guide data is loaded
via GDDS, in all other cases the services and guide data is determinate by
inband transport stream data.
UserActivity:
Interfaces for this
PBDA service
Memory leaks in Portable
Devices (WPD) Driver Samples
Issue: The
following application scenarios result in memory leaks in the driver. As a
result, memory usage will accumulate in the WUDFHost.exe process until the
driver shuts down.
To fix these leaks, update
the driver sample code as described in the workaround section.
1. During
object enumeration, the enumerator context is not released in
WpdObjectEnumerator::OnFindNext. Affects: WpdHelloWorldDriver,
WpdMultiTransportDriver, WpdBasicHardwareDriver, WpdServicesSampleDriver
2. During
object deletion, the destructors for the fake content object(s) are not called
before deleting their references from the m_Content array. Affects:
WpdWudfSampleDriver
3. In
WpdObjectResources::OnClose, an additional reference to the resource context is
not released. Affects: WpdWudfSampleDriver
Workarounds:
1. 1.
In WpdObjectEnum.cpp, SAFE_RELEASE pEnumeratorContext before
WpdObjectEnumerator::OnFindNext() returns. For example:
SAFE_RELEASE(pEnumeratorContext);
return hr;
2. 2.
In WpdWudfSampleDriver\FakeDevice.h, RemoveObjectsMarkedForDeletion(), delete
the FakeContent object before removing its reference from the m_Content array.
For example:
if (m_Content[Index - 1]->MarkedForDeletion == TRUE)
{
// Delete this object
FakeContent* pContent = m_Content[Index - 1];
m_Content.RemoveAt(Index - 1);
delete pContent;
}
3.
In WpdWudfSampleDriver\WpdObjectResources.cpp, SAFE_RELEASE pContext before
WpdObjectResources::OnClose() returns. For example:
//Free the context
SAFE_RELEASE(pContext);
if (hr == S_OK)
{
hr = DestroyResourceContext(pContextMap, pszContext);
...
DSF: Incorrectly
configured bulk endpoints in the Loopback sample
Issue: Per
the USB 2.0 specification, bulk endpoints can have a maximum packet size of 512
bytes. The endpoint descriptors of the bulk endpoints in the DSF Loopback
sample are incorrectly configured to be 1024 bytes.
Workaround: In
src/test/dsf/usb/softusbloopback/LoopbackDevice.cpp, in
CLoopbackDevice::ConfigureINEndpoint and ConfigureOUTEndpoint, set the endpoint
descriptors as bulk endpoints with a max packet size of 512 bytes and recompile
the sample.
Memory leaks in Sensor
driver samples
This Issue has been fixed in WDK 7.1.0: There
are memory leaks in the Sensor samples in WDK 7.0.0
Issue: There
are memory leaks in the Sensor samples (both Sensor Skeleton and Time Sensor).
These leaks occur once per driver process (WUDFHost.exe) on startup.
To fix these leaks, update
the driver sample code as described in the workaround section.
Note:
1. The
Sensor Skeleton Sample needs all below mentioned workarounds
2. The
Time Sensor Sample needs only workarounds 1 & 2.
Workaround:
1. 1.
In Device.cpp, SAFE_RELEASE pMyDevice before CMyDevice::CreateInstance returns.
CComPtr<IWDFDevice>
spIWDFDevice;
if (SUCCEEDED(hr))
{
// Create the IWDFDevice object
hr = pDriver->CreateDevice(pDeviceInit, spCallback, &spIWDFDevice);
}
// Release the pMyDevice pointer when done. Note: UMDF holds a reference to it
above
SAFE_RELEASE(pMyDevice);
2. 2.
In Queue.cpp, SAFE_RELEASE pMyQueue before CMyQueue::CreateInstance returns.
//
Create the framework queue
CComPtr<IWDFIoQueue> spDefaultQueue;
hr = pWdfDevice->CreateIoQueue( spIUnknown,
TRUE, // DefaultQueue
WdfIoQueueDispatchParallel, // Parallel queue handling
FALSE, // PowerManaged
TRUE, // AllowZeroLengthRequests
&spDefaultQueue
);
// Release the pMyQueue pointer when done. Note: UMDF holds a reference to it
above
SAFE_RELEASE(pMyQueue);
3. 3.
In Device.cpp, SAFE_RELEASE pSensorDdi before CMyDevice::OnPrepareHardware
returns.
if
(SUCCEEDED(hr))
{
hr = m_pClassExtension->Initialize(pWdfDevice, spUnknown);
}
// Release the pSensorDdi pointer when done. Note: Sensor Class Extension holds
a reference to it above
SAFE_RELEASE(pSensorDdi);
Tool
Changes and Issues
This section
contains information on the changes to the Tools since the WDK
for Server 2008 (6001.18002).
Tools added and removed
The following tools were
included in the WDK for Server 2008 (6001.18002), but are not
included in this release:
·
Rpat.exe
·
AMCap2.exe
·
MCStream.exe
·
Nxdemo.exe
The following tools have
been added to the WDK:
·
Biometrics
– biotest.exe, WBDIDriverTest.exe
·
Bluetooth
– sdpverify.exe
·
Driver
Coverage – drvcov.exe
·
Enhanced
Storage – EhStorCertMgrCmd.exe
·
Test
Tools – IOSpyCmd.exe, IOAttack.exe
·
Networking
– WwanDriverTestApp.exe
·
General
– ComputerHardwareIds.exe
·
Print
– XpsAnalyzer.exe
Additional information
about the use of these tools is available in the WDK Documentation.
Improvements to PFD
Improvements to PFD
include the following:
·
PFD
now supports a broader range of expressions for analysis. For example: Const,
Member names, ‘Side-effect-free’ C expressions.
·
Better
annotation error checking.
·
Improved
defect detection including “Banned API” checking.
·
PFD
now generates warnings that help you prepare to analyze a driver with Static
Driver Verifier. SDV requires drivers to have declarations that define the role
of the driver-supplied callback functions. PFD will indicate when you need to
add these Role type declarations to the driver code.
Improvements to Static
Driver Verifier
Improvements to Static
Driver Verifier include the following:
·
DV
support for NDIS Miniport Drivers
·
An
expanded set of rules for WDM and KMDF.
·
Role-type
declarations
·
Driver
Property Rules
·
Per
Entry Verification
·
Improved
performance, scalability, and accuracy
Permission denied
exception during verification resulting in a Tool Error
Issue: When
antivirus is running and driver source code directory is not excluded from
runtime scanning then there are rare chances that SDV may abort verification
with the "Sys_error("slam.bp: Permission denied") "
exception.
Workaround: Disable
the simultaneous access of the driver source code source tree like adding driver
verification path in antivirus exclude directories list.
Static Driver Verifier:
Recommendations for troubleshooting
Issue: When
you run Static Driver Verifier (SDV) on your driver source code and SDV reports
Timeouts, GiveUps, or Spaceouts.
Workaround: If
Static Driver Verifier (SDV) reports Timeouts, GiveUps, or Spaceouts, try the
following actions:
1. Run
SDV using the /refine command option. For example: staticdv /refine /rule:*
Note if SDV finds a NUR results during a run it will emit the exact command
line to be used on the console in cyan. This command line includes a reference
to a configuration file named refine.sdv which lists all rules that reported
NURs. The command line will look like this
Staticdv /config:"refine.sdv" /refine
The following two recommendations require changes to the options file,
sdv-defaults.xml. The default file is specific to the driver model and can be
found in the \tools\sdv\data\model\ directory, where model is WDM, WDF, or
NDIS.
2. If
your computer has a multi-core processor, reduce to 1 the number of threads
that are used during verification. In the SDV defaults file, change the value
for SDV_SlamConfig_NumberOfTheads to 1.
3. If
SDV reports Timeouts, increase the Timeout limit. For example, double the
value for SDV_SlamConfig_Timeout to 4000.
4. Use
all these techniques together, if none of them helps being applied alone
Note that these techniques increase the actual duration of a run, but they also
make easier for SDV to finish its job with a useful result (Pass or Defect).
Supplemental
Release Notes
Please
visit the WHDC website
to read any supplemental release notes not covered in this file.
Copyright
© 2001-2010 Microsoft Corporation. All rights reserved.
Version:
Thursday,
February 4, 2010