Share via


センサー ドライバーのスケルトン サンプル

センサー ドライバーのスケルトン サンプルは、最小限のセンサー ドライバーの記述方法とベスト プラクティス (センサー クラス拡張の使用方法など) を示しています。このドライバーをテンプレートとして使用して、独自のセンサー ドライバー プロジェクトを始めることができます。このスケルトン サンプルは、SensorsAndLocation\SensorSkeleton という名前のフォルダーにあります。

動作の理論

センサーのスケルトン ドライバーは、UMDF のスケルトン ドライバー サンプルを基に作成されています。このサンプルでは、Active Template Library (ATL) を使用して COM 機能を提供しています。スケルトン ドライバーでは、次のクラスが定義され使用されています。

クラス ファイル 説明

CMyDriver

Driver.h

Driver.cpp

IDriverEntry の実装を可能にします。OnDeviceAdd メソッドは、CMyDevice クラスのインスタンスを作成します。

CMyDevice

Device.h

Device.cpp

IPnPCallbackHardware の実装を可能にします。OnPrepareHardware メソッドは、センサー クラス拡張を作成、初期化し、CSensorDdi クラスのインスタンスを作成します。OnReleaseHardware メソッドは、クラス拡張オブジェクトを初期化解除して解放します。

デバイスのファイル ハンドルが閉じられたときにセンサー クラス拡張に通知する IFileCallbackCleanup::OnCleanupFile を実装します。

CSensorDdi

SensorDdi.h

Defines.h

SensorDdi.cpp

センサー ドライバーのコールバック インターフェイスである ISensorDriver の実装を可能にします。このクラスは、温度センサーや GPS センサーなどのデバイスに対するアクセスをエミュレートします。

ヘッダー ファイル Defines.h には、デバイスのプロパティ値 (コントロール パネルに表示されるフレンドリ名の文字列など) に対応する定義済みの定数が含まれています。これらの値は、実際に使用する値に変更する必要があります。また、.cpp ファイル内の実装も、デバイスの値を処理するように変更する必要があります。

CMyQueue

Queue.h

Queue.cpp

IQueueCallbackDeviceIoControl の実装を可能にします。Initialize メソッドは、デバイスの I/O キューのインスタンスを作成します。OnDeviceIoControl メソッドは、WPD I/O 要求のセンサー クラス拡張への転送を管理します。

 

サンプルのカスタマイズ

センサーのスケルトン サンプルを基にして新しいドライバーを作成するには、次の操作を行います。

  1. すべてのプロジェクト ファイルを新しいディレクトリにコピーします。

  2. SensorSkeleton.rcSensorSkeleton.ctlSensorSkeleton.idlSensorSkelton.def、および SensorSkeleton.inx の名前を、ドライバーに適した名前に変更します。

  3. 次の手順でソース ファイルを更新します。

    1. TARGETNAME を新しいドライバーの名前に変更します。
    2. SOURCES 変数で、SensorSkeleton.rc を新しい RC ファイルの名前に変更し、SensorSkeleton.idl を新しい IDL ファイルの名前に変更します。
    3. NTTARGETFILES 変数で、INF ファイルの名前を新しい名前に変更します。
    4. DLLDEF の値を新しい DEF ファイルの名前に変更します。
  4. RC ファイル内の文字列を新しいドライバー名に変更します。

  5. DEF ファイルで、LIBRARY の値を新しいドライバー ライブラリの名前に変更します。この名前は、TARGETNAME で指定した値と一致している必要があります。

  6. Internal.h で、次の操作を行います。

    1. WPP_DEFINE_CONTROL_GUID で WPP トレース制御の GUID を更新します。Microsoft Windows SDK の uuidgen ツールまたは guidgen ツールを使用して、新しい GUID を生成できます。新しい GUID は、既存の GUID の形式に従って作成してください。
    2. 文字列 SensorsSkeletonDriverTraceControl を、ドライバーの名前を使用して変更します。
    3. MYDRIVER_TRACING_ID でドライバーのトレース IDを変更します (ドライバー固有の文字列を選択します)。
  7. 次の手順で IDL ファイルを更新します。

    1. 新しい GUID を生成し、タイプ ライブラリの GUID を変更します。
    2. 新しい GUID を作成し、ドライバー クラスの ID を変更します。このクラス ID は、後の操作で再度 (レジストリ形式で) 使用する必要があります。
    3. ライブラリ名を変更します。
    4. コクラス名を変更します。
    5. ヘルプ文字列を変更します。
  8. SensorSkeleton.ctl で、WPP トレース制御の GUID とトレース ID を、手順 6. で変更したものに変更します。

  9. Defines.h 内の定数定義を、デバイスに適した値に変更します。SensorDdi.cpp 内のコードを、デバイスに該当する値を処理するように更新します。

  10. 次の手順で INX ファイルを更新します。

    1. [Microsoft.NT$ARCH$] セクション内のデバイスのハードウェア ID を変更します。
    2. ファイル内に出現するすべてのバイナリ名を、SensorSkeleton.dll からドライバーの名前に変更します。
    3. UMDFSensorSkeleton_Install セクションで設定されている DriverCLSID 値を、新しいドライバーのクラス ID に変更します。
    4. ファイル末尾の文字列を新しいドライバーの説明に変更します。
    5. [Version] セクションのプロバイダー名を自身の会社名に変更し、デバイスのクラス ID をデバイスのインストール クラスに変更します。
    6. (省略可能) INF のセクション名および文字列名に含まれる SensorSkeleton という文字列を、すべてドライバーの名前に置き換えます。たとえば、SensorSkeletonDeviceNameMySensorDriverDeviceName に置き換えます。
  11. DllMain.cpp 内のドライバー モジュール名を変更します。

  12. 次の手順で Driver.h を更新します。

    1. public CComCoClass<CMyDriver, &CLSID_SensorsSkeletonDriver> を変更して、ドライバーのクラスの対応する定数を指定します。この定数は、IDL ファイルで指定されたコクラス名を基にして MIDL コンパイラが生成します。
    2. OBJECT_ENTRY_AUTO の最初のパラメーターを、新しいドライバーのクラス名に変更します。
  13. Driver.cpp を更新して、SensorSkeleton.h の代わりに IDL が生成した新しいヘッダー ファイル名を参照するようにします。

実装と設計

このサンプルは、新しいセンサー ドライバーの基盤として使用できます。

サンプルのビルド

  1. コマンド プロンプトで、デバイスのソース コードが含まれるディレクトリに移動します。

  2. build -ceZ を実行するか、BLD マクロを使用します。

ビルドが正常に完了すると、プロジェクト ディレクトリのサブディレクトリにドライバーの DLL ファイルと INF ファイルが作成されます。たとえば、x86fre ビルドを使用してビルドした場合、DLL ファイルと INF ファイルは プロジェクト ディレクトリ\.objfre_win7_x86\i386 に作成されます。

ビルドが失敗すると、ログ ファイル (前の例では buildfre_win7_x86.log) にエラーと警告が記録されます。

インストール

センサーのスケルトン サンプルをテスト用にインストールするには、UMDF のスケルトン サンプル ドライバーと同じ手順を実行します。詳細については、「Installing UMDF Drivers」を参照してください。

センサーのスケルトン サンプル ドライバーをインストールするには、次の操作を行います。

  1. ドライバーがエラーなしでビルドされることを確認します。

  2. DLL ファイルと INF ファイルを個別のフォルダーにコピーします。

  3. WDK をインストールしたディレクトリの redist/wdf/プロセッサの種類フォルダーで、共同インストーラーの DLL ファイル (チェックまたはフリーのいずれか) を探します。このファイルを、手順 2. で作成したフォルダーにコピーします。たとえば、WDK を C: ドライブにインストールした場合は、C:\WinDDK\build#\redist\wdf\x86 から WUDFUpdate_01009.dll をコピーします。

  4. devcon.exe を実行します。このプログラムは、WDK をインストールしたディレクトリの tools\devcon フォルダーにあります。コマンド ウィンドウに次のコマンドを入力します。

    devcon.exe install SensorSkeleton.inf "Sensors\SensorSkeleton"

  5. コントロール パネルの [位置センサーとその他のセンサー] でドライバーを有効にします。

参照

Writing a Sensor Device Driver