Windows Driver Kit (WDK) Version 7.1.0 リリース ノート

Windows Driver Kit (WDK) Version 7.1.0 は、WDK 7.0.0 リリースの更新プログラムであり、ドライバー開発者が Windows 7、Windows Vista、Windows XP、Windows Server 2008 R2、Windows Server 2008、および Windows Server 2003 向けドライバーの作成に使用できるツール、コード サンプル、ドキュメント、コンパイラ、ヘッダー、およびライブラリのセットが含まれています。

  • WDK Version 7.1.0 の変更点と問題
  • RTM のリリース ノート
  • [RTM Version 7.0.0] ライセンス情報
  • [RTM Version 7.0.0] インストール情報
  • [RTM Version 7.0.0] WDK ビルド環境の変更点と問題
  • [RTM Version 7.0.0] 再頒布可能な変更点と問題
  • [RTM Version 7.0.0] サンプルの変更点と問題
  • [RTM Version 7.0.0] ポータブル デバイス (WPD) ドライバー サンプルのメモリ リーク
  • [RTM Version 7.0.0] ツールの変更点と問題
  • 2009 年 8 月リリース ノート
  • [2009 年 8 月] 間違ったデバイス ID が WPDMultiTransportDriver のインストール手順で指定される
  • [2009 年 8 月] 64 ビットでの、整数から浮動小数点数への変換により、コンパイラに問題が発生する可能性がある
  • [2009 年 8 月] Unicode 書式設定関数および解析関数
  • [2009 年 8 月] WttLogCm.dll が WDTF の WDK インストールに含まれていない
  • 関連トピック

WDK Version 7.1.0 の変更点と問題

このセクションには、7.1.0 更新リリースでの WDK の変更点に関する情報が含まれています。

Windows XP x64 をインストール プラットフォームとしてサポート

デバッガーの変更点

WDK のこのリリースでは、Debugging Tools for Windows が更新されています。次のように変更されました。

  • デバッガーのバージョンが 6.12.2.633 に変更されました。詳細については、デバッガー パッケージのリリース ノートをご覧ください。
  • ndiskd.dll の更新
  • UMDF と KMDF のデバッガー拡張機能でのその他のバグ修正:
    • KMDF
      • キューで 50 個を超える要求を印刷可能
      • !wdfdevice が FileObjectClass 名を正しく表示
      • ドライバーの通知一覧にある場合は、要求が取り消されたかどうかを表示
    • UMDF
      • umirps の取り消しのコールバックを正しく表示
      • デバイスのクリーンアップ コールバックと閉じるコールバックをダンプ
      • 要求に関連付けられたファイル オブジェクトを表示

再頒布可能な変更: offreg.dll への更新

ビルド環境の変更

  • MSVCRT.lib の更新による、Vista での DLL または EXE のクラッシュの修正
  • ws2_32.lib の更新
  • ntddump.h の追加
  • NPIV.mof の追加
  • Vista 7ip のヘッダーの追加
  • I/O ルーチンの注釈の修正
  • すべての umdf トレース GUID を含む wudftrace.ctl の追加

サンプルの変更点と問題

  • NDIS:
    • Xframeii: バグの修正
    • NetVmini サンプルの追加
  • センサーのスケルトン サンプル: メモリ リークの問題の修正
  • KMDF Toaster サンプル: バグの修正
  • WDM イベントのサンプル: バグの修正
  • ポート I/O のサンプル ドライバー: ファイル …\src\general\portio\sys\genport.inx に構文の問題があり、Windows 7 より前のシステムにはドライバーが正常にインストールされません。"PORTIO_Device" のすべてのインスタンスを "PortIO_Inst" に置き換えると、この問題を回避できます。

センサー アダプター テスト スイートの更新

RTM のリリース ノート

[RTM Version 7.0.0] ライセンス情報

[RTM Version 7.0.0] ソフトウェア ライセンス条項

Windows Driver Kit (WDK) に含まれるコンテンツは、ライセンスがエンド ユーザーに供与されています。WDK の使用は、WDK に付随し、WDK のインストール ディレクトリにあるソフトウェア ライセンス条項 (EULA) に基づきます。ファイルの名前は License.rtf です。WDK にアクセスまたは使用する前に、EULA の条項を読み、同意する必要があります。EULA の条項に同意しない場合、WDK を使用することはできません。

[RTM Version 7.0.0] Active Perl

Windows Driver Kit (WDK) には、Active Perl が含まれます。ActiveState Corporation の Active Perl の詳細については、このリンク先は Microsoft.com 以外のサイトになります の Web サイトを参照してください。

[RTM Version 7.0.0] インストール情報

WDK のインストールに関するすべての情報についてはインストール ガイドをご覧ください。

[RTM Version 7.0.0] インストール情報

[RTM Version 7.0.0] IA64 はインストール プラットフォームとしてサポートされていない

[RTM Version 7.0.0] デバッガーのインストール

Kitsetup を使って Windows デバッガーをインストールした場合は、選んだインストール パスにある Debuggers という名前のフォルダーにデバッガー ツールがインストールされます。その他の WDK コンポーネントと共にデバッガー ツールをインストールした場合は、それらのルート インストール パスがすべて同じになります。その他の WDK コンポーネントとは別のルート パスにデバッガー ツールをインストールする場合は、次の操作のいずれかを行います。

  1. デバッガー MSI を直接、メディアで実行します。
  2. Kitsetup を実行し、デバッガーのみをインストールします。次に、デバッガーのインストール パスを選びます。その他の WDK コンポーネントをインストールするために Kitsetup をもう一度実行し、その他の WDK コンポーネント用に別のインストール パスを選びます。

[RTM Version 7.0.0] Mc.exe ツールを実行するために MSXML 6.0 が必要

メッセージ コンパイラ (Mc.exe) ツールが正しく動作するためには、Microsoft Core XML Services (MSXML) 6.0 が必要です。Windows XP Service Pack 3 以降のバージョンの Windows に Windows Driver Kit (WDK) がインストールされている場合は、MSXML 6.0 が既にインストールされています。それより前のバージョンの Windows オペレーティング システムに Windows Driver Kit (WDK) がインストールされている場合は、MSXML 6.0 をダウンロードしてください。MSXML 6.0 サービスをダウンロードするには、Microsoft ダウンロード センター Web サイトにアクセスします。

[RTM Version 7.0.0] キット コンテンツのレイアウト

既定では、WDK が、ローカル ディスクの次の場所にインストールされます。この WDK の既定のインストール パスは C:\WinDDK\7600.0.0 です。

ディレクトリ コンテンツ
\Bin WDK ビルド ツール
\Debug デバッグ時に使用するファイル
\Help WDK ドキュメント
\Inc WDK ヘッダー
\Lib インポート ライブラリ
\OACR Microsoft Auto Code Review
\Redist 再頒布可能ファイル
\Src WDK サンプル
\Tools 開発、デバッグ、およびテスト用の各ツール
\Debuggers Windows デバッガー

 

[RTM Version 7.0.0] Vista RTM で考えられる WinUSB のインストールの問題

問題: サービス パックがインストールされていない Windows Vista でインストールが失敗する場合があり、WinUSB2 のインストール時にデバイスが機能しません。

回避策: この問題を回避するには、Microsoft サポート技術情報の修正プログラム 949939 および 937287 をインストールするか、Vista Service Pack 1 (SP1) または Vista SP2 にシステムを更新します。

[RTM Version 7.0.0] WDK ビルド環境の変更点と問題

このセクションには、WDK for Server 2008 (6001.18002) 以降にビルド環境に加えられた変更に関する情報が含まれています。

[RTM Version 7.0.0] Windows 2000 ビルド環境のサポート停止

Microsoft Windows 2000 のライブラリが WDK から削除されました。_NT_Target_Version=$ (NT_TARGET_VERSION_WIN2K) の場合はエラーになります。_NT_Target_Version は、Windows XP 以降のバージョンの Windows である必要があります。

[RTM Version 7.0.0] KMDF バージョンと UMDF バージョンのマクロの変更

KMDF バージョンと UMDF バージョンを示すマクロの構文が変更されました。Windows 7 では、以前の構文を使うと警告が表示されます。

  • KMDF_VERSION_ は KMDF_VERSION に変更
  • UMDF_VERSION_ は UMDF_VERSION_MAJOR に変更
  • KMDF_MINOR_VERSION_ は KMDF_VERSION_MINOR に変更
  • UMDF_MINOR_VERSION_ は UMDF_VERSION_MINOR に変更

[RTM Version 7.0.0] Microsoft Auto Code Review (OACR) の追加

Microsoft Auto Code Review (OACR) ツールが WDK ビルド環境に追加されました。WDK ビルド環境ウィンドウを開くと、自動的に OACR が起動します。これは、バックグラウンドで実行され、ビルドが終了するたびに PreFast for Drivers (PFD) を実行します。タスク バーのアイコンで、ビルドに PFD のエラーと警告が含まれているかどうかが示されます。OACR について詳しくは、WDK ドキュメントをご覧ください。

[RTM Version 7.0.0] コード署名ツールの変更 Signtool は、次の変更で更新されました。

  • CAPICOM に依存しなくなった
  • SHA-2 ダイジェスト アルゴリズムの署名での使用をサポート
  • Windows 7 で使った場合の RFC 3161 タイムスタンプをサポート
  • /ac スイッチと /kp スイッチを修正

[RTM Version 7.0.0] ATL 2.1 ヘッダーと ATL 3.0 ヘッダーを削除

ATL 2.1 ヘッダーと ATL 3.0 ヘッダーが削除されました。ATL 7.1 ヘッダーを、…\inc\crt\atl71 から …\inc\atl71 に移動しました。ビルド環境が変更されて、新しい位置で ATL 7.1 ヘッダー ファイルが使われるようになりました。Sources ファイルに ATL_VER が含まれている場合は、値が 70 または 71 となります。

[RTM Version 7.0.0] ヘッダー ファイルの追加と削除

次のヘッダーは、WDK for Server 2008 (6001.18002) に含まれていましたが、このリリースには含まれていません。

DDK:

  • Fsctlbuf.h
  • Hvgdk.h
  • Rdbss.h
  • Rxassert.h
  • Rxcommon.h
  • Rxdebug.h
  • Rxpooltg.h
  • Smbus.h

API:

  • Dmmdiag.h
  • Specstrings_adt.h
  • Wincred.h

Wincred.h 次の DDK ヘッダー ファイルが WDK に追加されました。

DDK:

  • Anchorsyncdeviceservice.h
  • Bridgedeviceservice.h
  • Calendardeviceservice.h
  • Cifs.h
  • Contactdeviceservice.h
  • Deviceservices.h
  • Dsm.h
  • Fullenumsyncdeviceservice.h
  • Hintsdeviceservice.h
  • Messagedeviceservice.h
  • Metadatadeviceservice.h
  • Mpiodisk.h
  • Mpiowmi.h
  • Ndischimney.h
  • Ndiswwan.h
  • Notesdeviceservice.h
  • Offreg.h
  • Procgrp.h
  • Ringtonedeviceservice.h
  • Sensorsclassextension.h
  • Statusdeviceservice.h
  • Syncdeviceservice.h
  • Taskdeviceservice.h
  • Usbstorioctl.h
  • Wwan.h
  • Xpsrassvc.h

API:

  • Audioapotypes.h
  • Audioendpoints.h
  • Audioendpoints.idl
  • D3d11tokenizedprogramformat.hpp
  • Dxgiformat.h
  • Functiondiscoveryerror.h
  • Functiondiscoveryprovider.h
  • Functiondiscoveryprovider.idl
  • Functiondiscoveryproviderhelper.h
  • Fwpvi.h
  • Hvgdk.h
  • Ime_cmodes.h
  • Kernelspecs.h
  • Lsalookup.h
  • Lsalookupi.h
  • Mmc.h
  • Mshtmhst.h
  • Mshtml.h
  • Msopc.h
  • Mxdc.h
  • Objectarray.h
  • Objectarray.idl
  • Pbdaerrors.h
  • Pmi.h
  • Qosobjs.h
  • Sal_supp.h
  • Sdv_driverspecs.h
  • Sensors.h
  • Specstrings_supp.h
  • Structuredquerycondition.h
  • Structuredquerycondition.idl
  • Usbrpmif.h
  • Verrsrc.h
  • Winbio.h
  • Winbio_adapter.h
  • Winbio_err.h
  • Winbio_ioctl.h
  • Winbio_types.h
  • Wnnc.h
  • Xpsobjectmodel.h

[RTM Version 7.0.0] KMDF/UMDF Version 1.9

KMDF と UMDF が、バージョン 1.9 に更新されました。次の変更点があります。

  • KMDF ドライバーの進捗を保証
  • KMDF でのパフォーマンスの向上
  • UMDF ホスト プロセスのセキュリティの強化
  • UMDF プラグ アンド プレイ (PnP) モデルの機能強化
  • ユーザー モード スタックでカーネル モード ドライバーが使用可能

KMDF では、Windows 2000 以降のシステムでの動作も、引き続きサポートされています。UMDF では、Windows XP 以降のシステムでの動作がサポートされています。詳細については、WDK ドキュメントを参照してください。

[RTM Version 7.0.0] HID デバイス用 KMDF フィルター ドライバーが I/O を送信できない場合がある

問題: フィルター ドライバーで、WDFIOTARGET オブジェクトで使われ、デバイスの起動前に作成される I/O の種類の情報が、iotarget オブジェクトで表されるターゲット デバイス オブジェクトの I/O の種類の情報と一致しない場合があります。その結果、フィルター ドライバーが要求をフォーマットするときに、ベースとなる IRP が正しくフォーマットされない場合があります。現時点では、問題が発生するのは、フィルター ドライバーが HID デバイス用に使用されている場合のみです。これは、IRP_MN_START_DEVICE 処理中に、HIDClass のデバイス (PDO) の I/O の種類が変更されるためです。この問題は、既定の I/O のターゲットと、EvtDriverDeviceAdd コールバックのドライバーによって作成される他の WDFIOTARGET のオブジェクトに影響します。

回避策: この問題を回避するには、より下位のデバイス オブジェクトへの EvtDriverDeviceAdd() コールバックの代わりに、EvtDeviceSelfManagedIoInit() コールバックに I/O のターゲットを作成し、使用します。 次のサンプル コードが用意されています。

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);

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);

[RTM Version 7.0.0] 再頒布可能な変更点と問題

このセクションには、WDK for Server 2008 (6001.18002) 以降に再頒布可能ファイルに加えられた変更に関する情報が含まれています。

[RTM Version 7.0.0 WDF] 共同インストーラー

WDF Version 1.9 の共同インストーラーが含まれます。WDF Version 1.7 の共同インストーラーは削除されました。WDF 1.9 共同インストーラーは、WDF の以前のバージョンとの下位互換性があります。

[RTM Version 7.0.0] WinUSB 共同インストーラー

WinUSB v2 の共同インストーラーがキットに追加されました。

[RTM Version 7.0.0] DIFx

DIFx 再頒布可能ファイルが更新されました。

[RTM Version 7.0.0] Offreg

Offreg DLL が追加されました。

[RTM Version 7.0.0] サンプルの変更点と問題

このセクションには、WDK for Server 2008 (6001.18002) 以降にサンプルに加えられた変更に関する情報が含まれています。

[RTM Version 7.0.0] フォルダーの再編成のサンプル

サンプルが再編成されました。KMDF と UMDF のサンプルを、適切なデバイス領域のフォルダーに移動しました。WDM サンプルの一部が削除されました。WDK に残されているものは、同じ場所にあります。

[RTM Version 7.0.0] 署名のサンプル

署名のサンプル、Selfsign_example.cmd を、…\bin\selfsign から …\src\general\build\driversigning に移動しました。

[RTM Version 7.0.0] サンプルの追加と削除

次のサンプルは、WDK for Server 2008 (6001.18002) に含まれていましたが、このリリースには含まれていません。

  • HID: 仮想 HID (Vhidmini.sys)
  • ファイル システム:
    • Filespy フィルター
    • Mulnrx
    • Smbmrx
  • PnPI8042
  • Mouser
  • カーネル サンプル:
    • AGP440
    • AGPlib
    • GAGP30KX
    • Radeon 8500
    • サンプル ドライバー
    • UAGP35
  • MCA 管理アプリケーション
  • ネットワーク:
    • COISDN
    • IRDA
    • E100BEX
    • NDIS コネクションレス プロトコル ドライバー
  • ストレージ:
    • チェンジャー INF のサンプル
    • テープのサンプル
    • I2O ミニポート
  • ビデオ: R200 のサンプル

次のサンプルが WDK に追加されました。

  • 1394: ハイブリッド (UMDF/KMDF) 1394VDEV ドライバー
  • オーディオ: Mic 配列
  • 生体認証のサンプル
  • Build.exe のサンプル
  • バス:
    • UMDF の仮想シリアル ドライバー
    • 連続的なリーダーと電源ポリシー所有者を示すように、UMDF USB Fx2 のサンプルを更新
  • ファイル システム: Simrep ミニフィルター
  • 全般:
    • パフォーマンス カウンター
    • RegFltr
    • KMDF に変換された PortIO サンプル
    • Toastmon ドライバーの UMDF バージョン
    • トースター関数ドライバーの UMDF バージョン
  • HID: EloMT
  • 入力: KMDF に変換された Moufilter ドライバー
  • ネットワーク: Xframe II
  • 印刷: XPS ラスター フィルター
  • センサーのサンプル
  • ストレージ: Storport ミニポート
  • WMI のサンプル
  • WPD:
    • WPD 基本ハードウェア ドライバー
    • WPD MultiTransport ドライバー
    • WPD サービス サンプル ドライバー

これらのサンプルに関する追加情報は、WDK ドキュメント、またはサンプルに付属するディレクトリのファイルにあります。

[RTM Version 7.0.0] SWTuner のサンプル

SWTuner のサンプルでは、次の種類のデジタル通信網がサポートされています。

  • ATSC
  • QAM
  • DVB-T
  • DVB-S
  • DVB-C
  • ISDB-T
  • ISDB-S
  • Netop

主な相違点は復調器ノードの種類です。これで、現在使用している標準が特定されます。フレームワークでは、KS プロキシの必要な BDA 定義をすべて公開して、チューナーと復調器のパラメーターを制御します。ただし、SWTuner は、周波数だけを内部的に処理して、HDD からストリーミングされるトランスポート ストリームを選択します。PAL/Secam チューナーの機能強化により、アナログ テレビの包括的なスキャンの実装方法が示されます。チューナー ハードウェア ベースのスキャンを有効にするために、レジストリ キー HardwareScanning=1 を設定する必要があります。サンプルは、低い周波数から高い周波数へと 250khz ごとにスキャンするスキャン スレッドを設定する方法を示しています。アナログ フレームワークは、フィルター チューナー、オーディオ、クロスバー、キャプチャ、エンコーダーを公開します。DVB-S の機能強化により、チューニングに DiSEqC を実装する方法が示されます。

PBDA インターフェイスは、DVB-S のサンプル用に組み込まれています。これは、イベント処理や MMI など、PBDA インターフェイスで BDA チューナーを強化する方法を説明しています。

また、Netop という種類のチューナーは PBDA スキーマ全体を使用し、次のサービスなど、使用可能なすべての PBDA インターフェイスを実装します。Netop チューナーは、GPNV 値 Source Types の DVB-T ネットワークという種類として調整されます。

イベント処理サービス:

PBDA ユーザー モード ESEvents へのキューに入れられたイベントの転送を処理するイベント処理マネージャー。

デバッグ サービス:

ユーザー モードへのデバッグ メッセージのキューの管理。

GPNV サービス:

操作、セットアップ、MMI の基本的な使用方法を示す必要な Name 値の実装。実際のチューナーでは、変数 Device ID と Tuner ID が設定されず、代わりに、チューナーの固定値が保存されます。

CAS サービス:

実装では、診断とセットアップのページでの MMI の使用方法が示されます。ブロードキャスト MMI が、チャネルの変更で示されます。

MUX サービス:

サービス転送 PID マッピング情報。これにより、トランスポート ストリーム マッピングを制御し、現在選択されているサービスを識別することができます。PBDA チューナーは、それ自体のデマルチプレクサーを制御し、すべての PID を出力トランスポート ストリームにマップすることができます (ハードウェアが完全な mpeg2 トランスポート ストリームを配信できない場合)。

DRM サービス:

すべての DRM 関連関数のエントリ ポイント。

スキャン/チューニング:

周波数の範囲のスキャンと、xml チューニング パラメーターによるチューニング パラメーターの設定/取得。チューナーは、低い周波数から高い周波数へのスキャンを使って変調パラメーターを決定できます。これらのパラメーターは、チューナーが PBDA_Tuning_GetTunerState を使って信号を検出するたびに読み取られます。

GDDS:

PBDA サービスと、そのチューニング パラメーター、インターフェイスを読み込んで、ガイド データを読み込みます。データ型が PBDA_GUIDE_DATATYPE の場合にのみ、サービスとガイド データが GDDS を使って読み込まれることに注意してください。それ以外の場合はすべて、帯域内トランスポート ストリーム データによって、サービスとガイド データが決まります。

UserActivity:

この PBDA サービスのインターフェイス

[RTM Version 7.0.0] ポータブル デバイス (WPD) ドライバー サンプルのメモリ リーク

問題: 次のアプリケーション シナリオでは、ドライバーでメモリ リークが発生します。その結果、ドライバーのシャットダウンまで、メモリの使用量が WUDFHost.exe プロセスで蓄積されます。

このようなリークを修正するには、回避策のセクションの説明に従って、ドライバー サンプル コードを更新してください。

  1. オブジェクトの列挙時に、列挙子のコンテキストが WpdObjectEnumerator::OnFindNext で解放されません。影響: WpdHelloWorldDriver、WpdMultiTransportDriver、WpdBasicHardwareDriver、WpdServicesSampleDriver
  2. オブジェクトの削除時に、ダミーのコンテンツ オブジェクトのデストラクターが、m_Content 配列からの参照を削除する前に呼び出されません。影響: WpdWudfSampleDriver
  3. WpdObjectResources::OnClose で、リソース コンテキストへの追加の参照が解放されません。影響: WpdWudfSampleDriver

回避策:

  1. WpdObjectEnum.cpp では、WpdObjectEnumerator::OnFindNext() の前の SAFE_RELEASE pEnumeratorContext が返されます。

    例:

    SAFE_RELEASE(pEnumeratorContext); 
    return hr;
    
  2. WpdWudfSampleDriver\FakeDevice.h、RemoveObjectsMarkedForDeletion() では、m_Content 配列からの参照を削除する前に FakeContent オブジェクトを削除します。

    例:

    if (m_Content[Index - 1]->MarkedForDeletion == TRUE) 
    { 
        // Delete this object 
        FakeContent* pContent = m_Content[Index - 1]; 
        m_Content.RemoveAt(Index - 1); 
        delete pContent;
    }
    
  3. WpdWudfSampleDriver\WpdObjectResources.cpp では、WpdObjectResources::OnClose() の前の SAFE_RELEASE pContext が返されます。

    例:

    //Free the context 
    SAFE_RELEASE(pContext); 
    if (hr == S_OK) 
    { 
        hr = DestroyResourceContext(pContextMap, pszContext);
        ...
    }
    

[RTM Version 7.0.0] DSF: ループバックのサンプルのバルク エンドポイントが正しく構成されていない

問題: USB 2.0 仕様により、バルク エンドポイントには、512 バイトの最大パケット サイズを設定できます。DSF ループバック サンプルのバルク エンドポイントのエンドポイント記述子が、誤って 1024 バイトに構成されています。

回避策: src/test/dsf/usb/softusbloopback/LoopbackDevice.cpp の CLoopbackDevice::ConfigureINEndpoint と ConfigureOUTEndpoint で、最大パケット サイズが 512 バイトのバルク エンドポイントとしてエンドポイント記述子を設定し、サンプルを再コンパイルします。

[RTM Version 7.0.0] センサー ドライバー サンプルのメモリ リーク

問題: センサーのサンプル (センサーのスケルトンと時間センサーの両方) でメモリ リークが発生します。このリークは、コンピューターの起動時に、ドライバー プロセス (WUDFHost.exe) ごとに 1 回発生します。このようなリークを修正するには、回避策のセクションの説明に従って、ドライバー サンプル コードを更新してください。

注:

  1. センサーのスケルトンのサンプルでは、次の回避策をすべて実行する必要があります。
  2. 時間センサーのサンプルに必要なのは、最初の 2 つの回避策だけです。

回避策:

  1. Device.cpp では、CMyDevice::CreateInstance の前の SAFE_RELEASE pMyDevice が返されます。

    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. Queue.cpp では、CMyQueue::CreateInstance の前の SAFE_RELEASE pMyQueue が返されます。

    // 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. Device.cpp では、CMyDevice::OnPrepareHardware の前の SAFE_RELEASE pSensorDdi が返されます。

    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);
    

[RTM Version 7.0.0] ツールの変更点と問題

このセクションには、WDK for Server 2008 (6001.18002) 以降にツールに加えられた変更に関する情報が含まれています。

[RTM Version 7.0.0] ツールの追加と削除

次のツールは、WDK for Server 2008 (6001.18002) に含まれていましたが、このリリースには含まれていません。

  • Rpat.exe
  • AMCap2.exe
  • MCStream.exe
  • Nxdemo.exe

WDK には次のツールが追加されました。

  • 生体認証 – Biotest.exe、WBDIDriverTest.exe
  • Bluetooth – Sdpverify.exe
  • Driver Coverage – Drvcov.exe
  • 拡張ストレージ – EhStorCertMgrCmd.exe
  • テスト ツール – IOSpyCmd.exe、IOAttack.exe
  • ネットワーク – WwanDriverTestApp.exe
  • 汎用 – ComputerHardwareIds.exe
  • 印刷 – XpsAnalyzer.exe

これらのツールの使用方法に関する追加情報は、WDK ドキュメントで確認できます。

[RTM Version 7.0.0] PFD の機能強化

PFD は、次のように機能強化されました。

  • PFD では、より広い範囲の式の分析がサポートされています。例: Const、メンバー名、"副作用のない" C 式。
  • 注釈エラー チェック機能の向上。
  • "禁止された API" を含む欠陥検出機能の向上。
  • PFD で警告が生成されるようになり、静的ドライバー検証ツールによるドライバーの分析に役立ちます。SDV には、ドライバーの宣言が必要です。この宣言で、ドライバーが提供するコールバック関数の役割が定義されます。PFD は、これらの役割型の宣言をドライバー コードに追加することが必要になるタイミングを示します。

[RTM Version 7.0.0] 静的ドライバー検証ツールの機能強化

静的ドライバー検証ツールは、次のように機能が強化されています。

  • NDIS ミニポート ドライバーの DV サポート。
  • WDM および KMDF の拡張された規則セット。
  • 役割型の宣言。
  • ドライバー プロパティの規則。
  • エントリごとの検証。
  • パフォーマンス、スケーラビリティ、精度の向上。

[RTM Version 7.0.0] 検証中のアクセス許可拒否の例外によりツール エラーが発生する

問題: ウイルス対策プログラムが実行中で、ドライバーのソース コード ディレクトリが実行時のスキャンから除外されていない場合は、SDV で "Sys_error (slam.bp: Permission denied)" 例外により検証が中止されることが稀にあります。

回避策: ドライバーのソース コードのソース ツリーの同時アクセスを無効にします。たとえば、ウイルス対策プログラムの除外ディレクトリの一覧にドライバー検証パスを追加します。

[RTM Version 7.0.0] 静的ドライバー検証: トラブルシューティングに関する推奨事項

問題: 静的ドライバー検証ツール (SDV) をドライバー ソース コードで実行しているときに SDV で Timeout、GiveUp、Spaceout が報告されます。

回避策: 静的ドライバー検証ツール (SDV) で Timeout、GiveUp、または Spaceout が報告される場合は、次の操作を実行します。

  1. /refine コマンド オプションを使って SDV を実行します。たとえば、「staticdv /refine /rule:*」と入力します。SDV で実行中に NUR の結果が見つかった場合は、コンソールで使われる正確なコマンド ラインがシアン色で生成されることに注意してください。このコマンド ラインには、refine.sdv という名前の構成ファイルへの参照が含まれます。このファイルは、NUR を報告するすべての規則の一覧です。コマンド ラインは、"Staticdv /config:"refine.sdv" /refine" のようになります。次の 2 つの推奨事項では、オプション ファイル、sdv-defaults.xml の変更が必要です。既定のファイルはドライバー モデルに固有で、\tools\sdv\data\model\ ディレクトリにあります。ここで、model は、WDM、WDF、または NDIS です。
  2. コンピューターがマルチコア プロセッサを搭載している場合は、検証中に使うスレッドの数を 1 に減らしてください。SDV の既定のファイルで、SDV_SlamConfig_NumberOfTheads の値を 1 に変更します。
  3. SDV で Timeout が報告される場合は、タイムアウト制限の値を増やします。たとえば、SDV_SlamConfig_Timeout の値を 2 倍 (4000) に増やします。
  4. これらの方法を単独で適用しても効果がない場合は、すべてを組み合わせて使用してください。これらの方法により、実際の実行時間が長くなることに注意してください。ただし、SDV がジョブを完了しやすくなり、有用な結果 (Pass または Defect) が得られます。

2009 年 8 月リリース ノート

[2009 年 8 月] センサー ドライバーのデータ フィールドで間違ったデータ型が使われる

問題: センサーのスケルトンのサンプルで、次のプロパティに間違ったデータ型が使われます。 SENSOR_DATA_TYPE_ALTITUDE_SEALEVEL_METERS 正しいデータ型は、Float (VT_R4) ではなく、Double (VT_R8) です。

回避策: CSensorDDI::InitializeGpsSensor のコードを次のコードに置き換えます。

// Altitude Value 
var.vt = VT_R8; 
var.dblVal = ALTITUDE_VALUE_METERS; 
m_pGpsSensorDataFieldValues->SetValue(SENSOR_DATA_TYPE_ALTITUDE_SEALEVEL_METERS, &var);

[2009 年 8 月] ATL のベスト プラクティス - Visual Studio リリースの使用

ATL が WDK に含まれているのは、ドライバー用の Windows アプレットを作る必要があるドライバー開発者の利便性のためです。ATL は、この範囲を超えるソフトウェア開発に使うことはできません。Visual Studio で使用できる ATL には、より完全で最新のライブラリのセットが用意されていますが、これは、ソフトウェアや Web アプリケーションの開発に使うためです。 Visual C++ Express Edition は、MSDN から無料で入手できます。

[2009 年 8 月] Windows ポータブル デバイスのサンプルのビルド環境と対象オペレーティング システムの更新

ビルド環境と対象オペレーティング システムの設定は、Windows ポータブル デバイスのサンプルでは不完全です。完全な一覧については、次のセクションを参照してください。

サンプル名: 包括的な WPD サンプル ドライバー

ビルド環境:

  • Windows XP (x86)
  • Windows Vista (x86、amd64)
  • Windows 7 (x86、amd64)

対象オペレーティング システム:

  • Windows XP (x86)
  • Windows Vista (x86、amd64)
  • Windows 7 (x86、amd64)

サンプル名: Windows ポータブル デバイスの Hello World ドライバー

ビルド環境:

  • Windows XP (x86)
  • Windows Vista (x86、amd64)
  • Windows 7 (x86、amd64)

対象オペレーティング システム:

  • Windows XP (x86)
  • Windows Vista (x86、amd64)
  • Windows 7 (x86、amd64)

サンプル名: Windows ポータブル デバイスの基本ハードウェア ドライバー

ビルド環境:

  • Windows XP (x86)
  • Windows Vista (x86、amd64)
  • Windows 7 (x86、amd64)

対象オペレーティング システム:

  • Windows XP (x86)
  • Windows Vista (x86、amd64)
  • Windows 7 (x86、amd64)

サンプル名: Windows ポータブル デバイスのマルチトランスポート ドライバー

ビルド環境:

  • Windows 7 (x86、amd64)

対象オペレーティング システム:

  • Windows 7 (x86、amd64)

サンプル名: Windows ポータブル デバイスの基本サービス サンプル ドライバー

ビルド環境:

  • Windows 7 (x86、amd64)

対象オペレーティング システム:

  • Windows 7 (x86、amd64)

Windows XP の場合の追加要件: Windows ポータブル デバイスのバイナリは Windows XP に含まれていません。ドライバー (Windows XP 用にビルドされた) の読み込みを有効にするために、Windows Media Format SDK 11 ランタイムをインストールする必要があります。

[2009 年 8 月] 間違ったデバイス ID が WPDMultiTransportDriver のインストール手順で指定される

問題: Devcon.exe のコマンド ラインに指定されるデバイス ID が、Windows ポータブル デバイスのマルチトランスポート ドライバーに対しては間違っています。その結果、WpdMultiTransportDriver が正しくインストールされません。ドライバーを正しくインストールするには、更新された次の手順に従います。

回避策: インストール手順 (修正されたデバイス ID が強調表示されている) は次のとおりです。

  1. [スタート] メニューから目的のビルド環境を起動します。
  2. サンプル ("build –cZ") をビルドします。
  3. ドライバーの DLL を含むディレクトリに WUDFUpdate_0xxxx.dll をコピーします。
  4. ドライバーをインストールします ("devcon install Wpdmultitransportdriver.inf")。

[2009 年 8 月] 64 ビットでの、整数から浮動小数点数への変換により、コンパイラに問題が発生する可能性がある

問題: WDK に含まれている 64 ビット コンパイラは、浮動小数点数から整数への最適化された変換の実行時に、無効なアセンブリを生成する可能性があります。生成されたアセンブリには、この手順でサポートされていないソース登録を使う手順が含まれています。 この問題がコードに存在するかどうかを判断するには、次の手順を実行してください。

  1. ソース コードを /FAsc オプションでコンパイルしてコンパイラの一覧 (既定では .cod ファイル) を生成します。
  2. 一覧をフィルター処理して、CVTTSD2SI、CVTTSS2SI、VCVTTSD2SI、VCVTTSS2SI の各手順をすべて抽出します。
  3. DUMPBIN ツールを使って、DUMPBIN /DISASM バイナリ ファイルのようなバイナリを逆アセンブルします。
  4. この出力をフィルター処理して、CVTTSD2SI、CVTTSS2SI、VCVTTSD2SI、VCVTTSS2SI をすべて抽出します。
  5. コンパイラの一覧からの変換手順と、逆アセンブリからの変換手順を比較します。違いがある場合は、この変換のためにコンパイラが生成した手順は間違っています。

回避策: オプション 1: プラグマのペアを使って、影響を受ける関数の最適化をオフにします。

#pragma optimize(“”, off) 
// user’s function goes here. 
#pragma optimize(“”, on)

オプション 2: 変換に使われるソース変数を "揮発性" として宣言します。これによって、問題のある変換をコンパイラで回避できる場合があります。ただし、必ず回避できるとは限りません。

[2009 年 8 月] Unicode 書式設定関数および解析関数

問題: Windows 7 WDK には、Unicode バージョンの書式設定関数と解析関数に既知の問題があります。これらは、CRT のセキュリティ強化を構成する関数です。 Windows 7 用にビルドされたコードが Windows Vista または Windows Server 2008 で実行された場合、これらのセキュリティ強化により、間違った結果または AV となります。たとえば、Windows 7 のプリンター ドライバーでポイント アンド プリントを使うと、ドライバーが、Windows Vista または Windows Server 2008 で正しく動作しなくなります。

回避策: この AV を回避するには、Unicode 関数が使われ、対象オペレーティング システムが Windows 7 より前のバージョンである場合は必ず、このバージョン WDK で "_S なしのバージョン" (たとえば、swscanf_s ではなく、swscanf) を使います。

[2009 年 8 月] WttLogCm.dll が WDTF の WDK インストールに含まれていない

問題: WDK を使って WDTF をインストールすると、WttLogCm.dll のプラットフォーム固有のバージョンが含まれません。この .dll は、Common_Scenario_Stress_With_IO.wsf などの WDTF スクリプトの実行時に必要です。これらのスクリプトは、Cscript.exe を使って実行すると失敗し、次のエラー メッセージが表示されます。 [WTT ロガーが存在しません。WDTF を再インストールしてください。]

回避策: この問題を回避するには、次の手順を実行します。

  1. Windows Server 2008 用 WDK をインストールしていない場合は、この WDK のコピーを入手し、ローカル コンピューターにインストールします。このバージョンの WDK は、WDK Connect Web サイトからダウンロードできます。
    1. WDK Connect Web サイトにサインインします。
    2. [My Connect Dashboard] (接続ダッシュボード) で [Windows Driver Kit] をクリックします。
    3. Windows Driver Kit (WDK) のサイトで、左にある [ダウンロード] をクリックします。
    4. [ダウンロード] で、[WDK と DDK のアーカイブ] をクリックします。
    5. Windows Server 2008 (6.1..6001.18002) iso イメージを選び、[ダウンロード] をクリックします。
    6. WDK iso イメージを DVD に書き込みます。
    7. WDK をインストールします。
  2. Windows Server 2008 WDK から、インストールした WDTF の SampleScripts ディレクトリに、WttLogCm.dll のプラットフォーム固有のバージョンをコピーします。WttLogCm.dll のプラットフォーム固有のバージョンは、Server2008WDKPath\tools\WDTF\%PROCESSOR_ARCHITECTURE%fre\redist\Extras ディレクトリにあります。ここで、Server2008WDKPath は Windows Server 2008 WDK をインストールしたディレクトリのパス (C:\WINDDK\6601.18002 など) を表します。
  3. 管理者特権のコマンド プロンプトを開き、インストールした WDTF の SampleScripts ディレクトリに移動します。その後、コマンド プロンプトで次のように入力し、Enter キーを押します。 Regsvr32 WttLogCM.dll

関連トピック

Windows Driver Kit (WDK) について