Condividi tramite


Autenticazione dell'applicazione

Il primo passaggio che l'applicazione deve eseguire è l'autenticazione. L'autenticazione verifica l'identità dell'applicazione in Windows Media Gestione dispositivi. Dopo aver autenticato l'applicazione, è possibile chiamare QueryInterface per ottenere l'interfaccia IWMDeviceManager radice, su cui è possibile eseguire query per altre interfacce necessarie, che possono essere sottoposte a query per tutte le altre interfacce. L'autenticazione deve essere eseguita una sola volta all'avvio.

Per autenticare l'applicazione, seguire questa procedura:

  1. CoCreare l'oggetto MediaDevMgr (ID classe MediaDevMgr) e richiedere un'interfaccia IComponentAuthenticate .
  2. Creare un oggetto CSecureChannelClient per gestire l'autenticazione.
  3. Passare la chiave dell'applicazione e trasferire il certificato all'oggetto canale sicuro. È possibile usare la chiave/il certificato fittizio illustrato nel codice di esempio seguente per ottenere funzionalità di base dalle funzioni SDK. Tuttavia, per ottenere funzionalità complete (importante per il passaggio di file da e verso il dispositivo), è necessario richiedere una chiave e un certificato da Microsoft, come descritto in Strumenti per lo sviluppo.
  4. Passare l'interfaccia IComponentAuthenticate creata nel passaggio 1 all'oggetto canale protetto.
  5. Chiamare CSecureChannelClient::Authenticate per autenticare l'applicazione.
  6. Eseguire una query IComponentAuthenticate per l'interfaccia IWMDeviceManager .

Questi passaggi sono illustrati nel codice C++ seguente.

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;
}

Creazione di un'applicazione windows Media Gestione dispositivi