センサー ドライバーのスケルトン サンプル
センサー ドライバーのスケルトン サンプルは、最小限のセンサー ドライバーの記述方法とベスト プラクティス (センサー クラス拡張の使用方法など) を示しています。このドライバーをテンプレートとして使用して、独自のセンサー ドライバー プロジェクトを始めることができます。このスケルトン サンプルは、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 要求のセンサー クラス拡張への転送を管理します。 |
サンプルのカスタマイズ
センサーのスケルトン サンプルを基にして新しいドライバーを作成するには、次の操作を行います。
すべてのプロジェクト ファイルを新しいディレクトリにコピーします。
SensorSkeleton.rc、SensorSkeleton.ctl、SensorSkeleton.idl、SensorSkelton.def、および SensorSkeleton.inx の名前を、ドライバーに適した名前に変更します。
次の手順でソース ファイルを更新します。
- TARGETNAME を新しいドライバーの名前に変更します。
- SOURCES 変数で、SensorSkeleton.rc を新しい RC ファイルの名前に変更し、SensorSkeleton.idl を新しい IDL ファイルの名前に変更します。
- NTTARGETFILES 変数で、INF ファイルの名前を新しい名前に変更します。
- DLLDEF の値を新しい DEF ファイルの名前に変更します。
RC ファイル内の文字列を新しいドライバー名に変更します。
DEF ファイルで、LIBRARY の値を新しいドライバー ライブラリの名前に変更します。この名前は、TARGETNAME で指定した値と一致している必要があります。
Internal.h で、次の操作を行います。
- WPP_DEFINE_CONTROL_GUID で WPP トレース制御の GUID を更新します。Microsoft Windows SDK の uuidgen ツールまたは guidgen ツールを使用して、新しい GUID を生成できます。新しい GUID は、既存の GUID の形式に従って作成してください。
- 文字列 SensorsSkeletonDriverTraceControl を、ドライバーの名前を使用して変更します。
- MYDRIVER_TRACING_ID でドライバーのトレース IDを変更します (ドライバー固有の文字列を選択します)。
次の手順で IDL ファイルを更新します。
- 新しい GUID を生成し、タイプ ライブラリの GUID を変更します。
- 新しい GUID を作成し、ドライバー クラスの ID を変更します。このクラス ID は、後の操作で再度 (レジストリ形式で) 使用する必要があります。
- ライブラリ名を変更します。
- コクラス名を変更します。
- ヘルプ文字列を変更します。
SensorSkeleton.ctl で、WPP トレース制御の GUID とトレース ID を、手順 6. で変更したものに変更します。
Defines.h 内の定数定義を、デバイスに適した値に変更します。SensorDdi.cpp 内のコードを、デバイスに該当する値を処理するように更新します。
次の手順で INX ファイルを更新します。
- [Microsoft.NT$ARCH$] セクション内のデバイスのハードウェア ID を変更します。
- ファイル内に出現するすべてのバイナリ名を、SensorSkeleton.dll からドライバーの名前に変更します。
- UMDFSensorSkeleton_Install セクションで設定されている DriverCLSID 値を、新しいドライバーのクラス ID に変更します。
- ファイル末尾の文字列を新しいドライバーの説明に変更します。
- [Version] セクションのプロバイダー名を自身の会社名に変更し、デバイスのクラス ID をデバイスのインストール クラスに変更します。
- (省略可能) INF のセクション名および文字列名に含まれる SensorSkeleton という文字列を、すべてドライバーの名前に置き換えます。たとえば、SensorSkeletonDeviceName を MySensorDriverDeviceName に置き換えます。
DllMain.cpp 内のドライバー モジュール名を変更します。
次の手順で Driver.h を更新します。
public CComCoClass<CMyDriver, &CLSID_SensorsSkeletonDriver>
を変更して、ドライバーのクラスの対応する定数を指定します。この定数は、IDL ファイルで指定されたコクラス名を基にして MIDL コンパイラが生成します。- OBJECT_ENTRY_AUTO の最初のパラメーターを、新しいドライバーのクラス名に変更します。
Driver.cpp を更新して、SensorSkeleton.h の代わりに IDL が生成した新しいヘッダー ファイル名を参照するようにします。
実装と設計
このサンプルは、新しいセンサー ドライバーの基盤として使用できます。
サンプルのビルド
コマンド プロンプトで、デバイスのソース コードが含まれるディレクトリに移動します。
build -ceZ を実行するか、BLD マクロを使用します。
ビルドが正常に完了すると、プロジェクト ディレクトリのサブディレクトリにドライバーの DLL ファイルと INF ファイルが作成されます。たとえば、x86fre ビルドを使用してビルドした場合、DLL ファイルと INF ファイルは プロジェクト ディレクトリ\.objfre_win7_x86\i386 に作成されます。
ビルドが失敗すると、ログ ファイル (前の例では buildfre_win7_x86.log) にエラーと警告が記録されます。
インストール
センサーのスケルトン サンプルをテスト用にインストールするには、UMDF のスケルトン サンプル ドライバーと同じ手順を実行します。詳細については、「Installing UMDF Drivers」を参照してください。
センサーのスケルトン サンプル ドライバーをインストールするには、次の操作を行います。
ドライバーがエラーなしでビルドされることを確認します。
DLL ファイルと INF ファイルを個別のフォルダーにコピーします。
WDK をインストールしたディレクトリの redist/wdf/プロセッサの種類フォルダーで、共同インストーラーの DLL ファイル (チェックまたはフリーのいずれか) を探します。このファイルを、手順 2. で作成したフォルダーにコピーします。たとえば、WDK を C: ドライブにインストールした場合は、C:\WinDDK\build#\redist\wdf\x86 から WUDFUpdate_01009.dll をコピーします。
devcon.exe を実行します。このプログラムは、WDK をインストールしたディレクトリの tools\devcon フォルダーにあります。コマンド ウィンドウに次のコマンドを入力します。
devcon.exe install SensorSkeleton.inf "Sensors\SensorSkeleton"
コントロール パネルの [位置センサーとその他のセンサー] でドライバーを有効にします。