時間センサー サンプル
時間センサー サンプルは、イベントを生成するセンサー ドライバーの作成方法を示しています。このコードを参照すると、接続されたクライアント アプリケーションの追跡、レポート間隔の管理、およびセンサー クラス拡張によるイベント通知の送信を実行する方法を習得できます。この時間センサー サンプルは、SensorsAndLocation\TimeSensor という名前のフォルダーにあります。
動作の理論
時間センサー サンプルは、Sensor Driver Skeleton Sampleを基に作成されています。このサンプルでは、Active Template Library (ATL) を使用して COM 機能を提供しています。スケルトン サンプルによって提供されるクラス以外に、時間センサー サンプルは次のクラスを使用します。
クラス | ファイル | 説明 |
---|---|---|
CSampleEvents |
CSampleEvents.h CSampleEvents.cpp |
センサー クラス拡張を使用してイベントを定期的に生成するワーカー スレッドを作成します。 |
サンプルのカスタマイズ
時間センサー サンプルを基にして新しいドライバーを作成するには、次の手順を実行します。
すべてのプロジェクト ファイルを新しいディレクトリにコピーします。
TimeSensor.rc、TimeSensor.ctl、TimeSensor idl、TimeSensor.def、および TimeSensor.inx の名前を、ドライバーに適した名前に変更します。
次の手順でソース ファイルを更新します。
- TARGETNAME を新しいドライバーの名前に変更します。
- SOURCES 変数で、TimeSensor.rc を新しい RC ファイルの名前に変更し、TimeSensor.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 の形式に従って作成してください。
- 文字列 TimeSensorDriverTraceControl を、ドライバーの名前を使用して変更します。
- MYDRIVER_TRACING_ID でドライバーのトレース IDを変更します (ドライバー固有の文字列を選択します)。
次の手順で IDL ファイルを更新します。
- 新しい GUID を生成し、タイプ ライブラリの GUID を変更します。
- 新しい GUID を作成し、ドライバー クラスの ID を変更します。このクラス ID は、後の操作で再度 (レジストリ形式で) 使用する必要があります。
- ライブラリ名を変更します。
- コクラス名を変更します。
- ヘルプ文字列を変更します。
TimeSensor.ctl で、WPP トレース制御の GUID とトレース ID を、手順 6. で変更したものに変更します。
DeviceConst.h 内の定数定義を、デバイスに適した値に変更します。SensorDdi.cpp 内のコードを、デバイスに該当する値を処理するように更新します。
次の手順で INX ファイルを更新します。
- [Microsoft.NT$ARCH$] セクション内のデバイスのハードウェア ID を変更します。
- ファイル内に出現するすべてのバイナリ名を、TimeSensor.dll からドライバーの名前に変更します。
- UMDFTimeSensor_Install セクションで設定されている DriverCLSID 値を、新しいドライバーのクラス ID に変更します。
- ファイル末尾の文字列を新しいドライバーの説明に変更します。
- [Version] セクションのプロバイダー名を自身の会社名に変更し、デバイスのクラス ID をデバイスのインストール クラスに変更します。
- (省略可能) INF ファイルのセクション名および文字列名に含まれる TimeSensor という文字列を、すべてドライバーの名前に置き換えます。
DllSup.cpp 内のドライバー モジュール名を変更します。
次の手順で Driver.h を更新します。
public CComCoClass<CMyDriver, &CLSID_TimeSensorSampleDriver>
を変更して、ドライバーのクラスの対応する定数を指定します。この定数は、IDL ファイルで指定されたコクラス名を基にして MIDL コンパイラが生成します。- OBJECT_ENTRY_AUTO の最初のパラメーターを、新しいドライバーのクラス名に変更します。
Driver.cpp を更新して、TimeSensor.h の代わりに IDL が生成した新しいヘッダー ファイル名を参照するようにします。
時間センサー サンプルにはカスタム アイコンがあります。このサンプルに基づいてドライバーを作成する場合は、サンプル アイコンを独自のアイコンまたはプラットフォーム定義のアイコンに置き換えます。センサー ドライバーのアイコンの詳細については、「Specifying an Icon」を参照してください。
サンプルのビルド
コマンド プロンプトで、デバイスのソース コードが含まれるディレクトリに移動します。
build -ceZ を実行するか、BLD マクロを使用します。
ビルドが正常に完了すると、プロジェクト ディレクトリのサブディレクトリにドライバーの DLL ファイルと INF ファイルが作成されます。たとえば、x86fre ビルドを使用する場合、DLL ファイルと INF ファイルは プロジェクト ディレクトリ\.objfre_win7_x86\i386 に作成されます。
ビルドが失敗すると、ログ ファイル (前の例では buildfre_win7_x86.log) にエラーと警告が記録されます。
インストール
時間センサー サンプルをテスト用にインストールするには、センサーのスケルトン サンプル ドライバーと同じ手順を実行します。
時間センサー サンプル ドライバーをインストールするには、次の操作を行います。
ドライバーがエラーなしでビルドされることを確認します。
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 TimeSensor.inf "Sensors\TimeSensor"
コントロール パネルの [位置センサーとその他のセンサー] でドライバーを有効にします。