Поделиться через


Проверка подлинности приложения

Первым шагом, которое должно выполнить приложение, является проверка подлинности. Проверка подлинности проверяет удостоверение приложения на диспетчер устройств Windows Media. После проверки подлинности приложения можно вызвать QueryInterface , чтобы получить корневой интерфейс IWMDeviceManager , который можно запрашивать для других необходимых интерфейсов, которые можно запрашивать для всех остальных интерфейсов. При запуске проверка подлинности должна выполняться только один раз.

Чтобы проверить подлинность приложения, выполните следующие действия.

  1. Создайте объект MediaDevMgr (идентификатор класса MediaDevMgr) и запросите интерфейс IComponentAuthenticate .
  2. Создайте объект CSecureChannelClient для обработки проверки подлинности.
  3. Передайте ключ приложения и передайте сертификат в объект защищенного канала. Вы можете использовать фиктивный ключ или сертификат, показанный в следующем примере кода, чтобы получить основные функциональные возможности из функций ПАКЕТА SDK. Однако для получения полной функциональности (важной для передачи файлов на устройство и с него), необходимо запросить ключ и сертификат у корпорации Майкрософт, как описано в разделе Средства разработки.
  4. Передайте интерфейс IComponentAuthenticate , созданный на шаге 1, в объект защищенного канала.
  5. Вызовите CSecureChannelClient::Authenticate для проверки подлинности приложения.
  6. Запрос IComponentAuthenticate для интерфейса IWMDeviceManager .

Эти шаги показаны в следующем коде C++.

HRESULT CWMDMController::Authenticate()
{
    // Use a dummy key/certificate pair to allow basic functionality.
    // An authentic keypair is required for full SDK functionality.
    BYTE abPVK[] = {0x00};
    BYTE abCert[] = {0x00};
    HRESULT hr;
    CComPtr<IComponentAuthenticate> pAuth;

    // Create the WMDM object and acquire 
    // its authentication interface.
    hr = CoCreateInstance(
        __uuidof(MediaDevMgr),
        NULL,
        CLSCTX_INPROC_SERVER,
        __uuidof(IComponentAuthenticate),
        (void**)&pAuth);

    if (FAILED(hr)) return hr;

    // Create the secure channel client class needed to authenticate the application.
    // We'll use a global member variable to hold the secure channel client
    // in case we need to handle encryption, decryption, or MAC verification
    // during this session.
    m_pSAC = new CSecureChannelClient;
    if (m_pSAC == NULL) return E_FAIL;

    // Send the application's transfer certificate and the associated 
    // private key to the secure channel client.
    hr = m_pSAC->SetCertificate(
        SAC_CERT_V1,
        (BYTE *)abCert, sizeof(abCert),
        (BYTE *)abPVK,  sizeof(abPVK));
    if (FAILED(hr)) return hr;
            
    // Send the authentication interface we created to the secure channel 
    // client and authenticate the application with the V1 protocol.
    // (This is the only protocol currently supported.)
    m_pSAC->SetInterface(pAuth);
    hr = m_pSAC->Authenticate(SAC_PROTOCOL_V1);
    if (FAILED(hr)) return hr;

    // Authentication succeeded, so we can use WMDM.
    // Query for the root WMDM interface.
    hr = pAuth->QueryInterface( __uuidof(IWMDeviceManager), (void**)&m_IWMDMDeviceMgr);

    return hr;
}

Создание приложения диспетчер устройств Windows Media