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:
- CoCreare l'oggetto MediaDevMgr (ID classe MediaDevMgr) e richiedere un'interfaccia IComponentAuthenticate .
- Creare un oggetto CSecureChannelClient per gestire l'autenticazione.
- 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.
- Passare l'interfaccia IComponentAuthenticate creata nel passaggio 1 all'oggetto canale protetto.
- Chiamare CSecureChannelClient::Authenticate per autenticare l'applicazione.
- 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;
}
Argomenti correlati