Udostępnij przez


Uwierzytelnianie aplikacji

Pierwszym krokiem, który musi wykonać aplikacja, jest uwierzytelnianie. Uwierzytelnianie weryfikuje tożsamość aplikacji w Menedżerze urządzeń z systemem Windows Media. Po uwierzytelnieniu aplikacji można wywołać QueryInterface, aby uzyskać główny interfejs IWMDeviceManager, który można zapytać o inne wymagane interfejsy, które same mogą być odpytywane o wszystkie inne interfejsy. Uwierzytelnianie musi odbywać się tylko raz podczas uruchamiania.

Aby uwierzytelnić aplikację, wykonaj następujące kroki:

  1. Utwórz obiekt MediaDevMgr (identyfikator klasy MediaDevMgr) i zażądaj interfejsu IComponentAuthenticate.
  2. Utwórz obiekt CSecureChannelClient w celu obsługi uwierzytelniania.
  3. Przekaż klucz aplikacji oraz certyfikat do obiektu bezpiecznego kanału. Aby uzyskać podstawowe funkcje z funkcji zestawu SDK, możesz użyć fikcyjnego klucza/certyfikatu pokazanego w poniższym przykładowym kodzie. Jednak aby uzyskać pełną funkcjonalność (ważne w przypadku przekazywania plików do i z urządzenia), należy zażądać klucza i certyfikatu od firmy Microsoft zgodnie z opisem w Tools for Development.
  4. Przekaż interfejs IComponentAuthenticate utworzony w kroku 1 do bezpiecznego obiektu kanału.
  5. Wywołaj CSecureChannelClient::Uwierzytelnij w celu uwierzytelnienia aplikacji.
  6. Wykonaj zapytanie IComponentAuthenticate dla interfejsu IWMDeviceManager.

Te kroki przedstawiono w poniższym kodzie języka 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;
}

tworzenie aplikacji Menedżera urządzeń z systemem Windows Media