使用逻辑传感器

若要实例化逻辑传感器的设备节点,或重新连接到现有逻辑传感器设备节点,应用程序或服务必须调用 ILogicalSensorManager::Connect。 此方法的 pPropertyStore 参数需要指向 IPropertyStore 接口的指针,该接口包含传感器驱动程序要连接到的 ID。 这意味着,在调用此方法之前,必须创建属性存储并将此数据添加到存储区。

连接到逻辑传感器

若要连接到逻辑传感器,必须至少提供传感器驱动程序的 .inf 文件中定义的硬件 ID,以及标识传感器的逻辑 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;
}

关于逻辑传感器