論理センサーの使用
論理センサーのデバイス ノードをインスタンス化したり、既存の論理センサー デバイス ノードに再接続したりするには、アプリケーションまたはサービスで ILogicalSensorManager::Connect を呼び出す必要があります。 このメソッドの pPropertyStore パラメーターには、接続するセンサー ドライバーの ID を含む IPropertyStore インターフェイスへのポインターが必要です。 つまり、このメソッドを呼び出す前に、プロパティ ストアを作成し、このデータをストアに追加する必要があります。
論理センサーへの接続
論理センサーに接続するには、少なくとも、センサー ドライバーの .inf ファイルで定義されているハードウェア ID と、センサーを識別する論理 GUID を 指定する必要があります。 この GUID は、この GUID を 使用して、センサー デバイス ノードとの接続解除またはアンインストールを選択したときにセンサーを識別します。
次のコード例では、指定した論理センサーに接続するヘルパー メソッドを作成します。 メソッド パラメーターは、センサーのハードウェア ID と、センサーを識別するための一意の GUID を 受け取ります。
HRESULT ConnectToLogicalSensor(PCWSTR* wszHardwareID, GUID guidLogicalID)
{
HRESULT hr = S_OK;
ILogicalSensorManager* pLSM = NULL;
IPropertyStore* pStore = NULL;
PROPVARIANT pv = {};
// Create the property store.
hr = PSCreateMemoryPropertyStore(IID_PPV_ARGS(&pStore));
if(SUCCEEDED(hr))
{
// Create the logical sensor manager.
hr = CoCreateInstance(CLSID_LogicalSensorManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pLSM));
}
// Fill in the values.
if(SUCCEEDED(hr))
{
hr = InitPropVariantFromStringVector(wszHardwareID, 1, &pv);
}
if(SUCCEEDED(hr))
{
hr = pStore->SetValue(PKEY_Device_HardwareIds, pv);
}
if(SUCCEEDED(hr))
{
hr = pStore->SetValue(PKEY_Device_CompatibleIds, pv);
}
if(SUCCEEDED(hr))
{
// Connect to the logical sensor.
hr = pLSM->Connect(guidLogicalID, pStore);
}
SafeRelease(&pStore);
SafeRelease(&pLSM);
return hr;
}
論理センサーからの切断
論理センサーから切断するには、 Connect を呼び出したときに使用したのと同じ論理 ID を指定する必要があります。
次のコード例では、論理センサーから切断するヘルパー関数を作成します。
HRESULT DisconnectFromLogicalSensor(GUID guidLogicalID)
{
HRESULT hr = S_OK;
ILogicalSensorManager* pLSM = NULL;
if(SUCCEEDED(hr))
{
// Create the logical sensor manager.
hr = CoCreateInstance(CLSID_LogicalSensorManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pLSM));
}
if(SUCCEEDED(hr))
{
hr = pLSM->Disconnect(guidLogicalID);
}
SafeRelease(&pLSM);
return hr;
}
論理センサーのアンインストール
論理センサーをアンインストールするには、 Connect を呼び出したときに使用したのと同じ論理 ID を指定する必要があります。
次のコード例では、論理センサーをアンインストールするヘルパー関数を作成します。
HRESULT UninstallLogicalSensor(REFGUID guidLogicalID)
{
HRESULT hr = S_OK;
ILogicalSensorManager* pLSM;
// Create the logical sensor manager.
hr = CoCreateInstance(CLSID_LogicalSensorManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pLSM));
if(SUCCEEDED(hr))
{
hr = pLSM->Uninstall(guidLogicalID);
}
SafeRelease(&pLSM);
return hr;
}
関連トピック