Authentification de l’application
La première étape que votre application doit effectuer est l’authentification. L’authentification vérifie l’identité de l’application auprès de Windows Media Gestionnaire de périphériques. Une fois que vous avez authentifié votre application, vous pouvez appeler QueryInterface pour obtenir l’interface IWMDeviceManager racine, qui peut être interrogée pour d’autres interfaces requises, qui peuvent elles-mêmes être interrogées pour toutes les autres interfaces. L’authentification ne doit avoir lieu qu’une seule fois, au démarrage.
Pour authentifier votre application, procédez comme suit :
- Cocréez l’objet MediaDevMgr (ID de classe MediaDevMgr) et demandez une interface IComponentAuthenticate .
- Créez un objet CSecureChannelClient pour gérer l’authentification.
- Passez votre clé d’application et transférez le certificat vers l’objet de canal sécurisé. Vous pouvez utiliser la clé/le certificat factice indiqué dans l’exemple de code suivant pour obtenir des fonctionnalités de base à partir des fonctions du SDK. Toutefois, pour obtenir toutes les fonctionnalités (importantes pour le passage de fichiers vers et depuis l’appareil), vous devez demander une clé et un certificat à Microsoft, comme décrit dans Outils de développement.
- Passez l’interface IComponentAuthenticate que vous avez créée à l’étape 1 à l’objet de canal sécurisé.
- Appelez CSecureChannelClient::Authenticate pour authentifier votre application.
- Interrogez IComponentAuthenticate pour l’interface IWMDeviceManager .
Ces étapes sont illustrées dans le code C++ suivant.
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;
}
Rubriques connexes