Autenticando o aplicativo
A primeira etapa que seu aplicativo deve executar é a autenticação. A autenticação verifica a identidade do aplicativo no Windows Media Gerenciador de Dispositivos. Depois de autenticar seu aplicativo, você pode chamar QueryInterface para obter a interface IWMDeviceManager raiz, que pode ser consultada para outras interfaces necessárias, que podem ser consultadas para todas as outras interfaces. A autenticação só precisa ocorrer uma vez, na inicialização.
Para autenticar seu aplicativo, execute estas etapas:
- CoCrie o objeto MediaDevMgr (ID de classe MediaDevMgr) e solicite uma interface IComponentAuthenticate .
- Crie um objeto CSecureChannelClient para manipular a autenticação.
- Passe a chave do aplicativo e transfira o certificado para o objeto de canal seguro. Você pode usar a chave/certificado fictício mostrado no código de exemplo a seguir para obter a funcionalidade básica das funções do SDK. No entanto, para obter a funcionalidade completa (importante para passar arquivos de e para o dispositivo), você deve solicitar uma chave e um certificado da Microsoft, conforme descrito em Ferramentas para Desenvolvimento.
- Passe a interface IComponentAuthenticate que você criou na etapa 1 para o objeto de canal seguro.
- Chame CSecureChannelClient::Authenticate para autenticar seu aplicativo.
- Consulte IComponentAuthenticate para a interface IWMDeviceManager .
Essas etapas são mostradas no código C++ a seguir.
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;
}
Tópicos relacionados