Uygulamanın Kimliğini Doğrulama
Uygulamanızın gerçekleştirmesi gereken ilk adım kimlik doğrulamasıdır. Kimlik doğrulaması, uygulamanın kimliğini Windows Media Device Manager'a doğrular. Uygulamanızın kimliğini doğruladıktan sonra, kök IWMDeviceManager arabirimini almak için QueryInterface çağırabilirsiniz. Bu arabirim, diğer gerekli arabirimler için sorgulanabilir ve bu arabirimlerin kendileri de tüm diğer arabirimler için sorgulanabilir. Kimlik doğrulamasının başlangıçta yalnızca bir kez gerçekleşmesi gerekir.
Uygulamanızın kimliğini doğrulamak için şu adımları uygulayın:
- MediaDevMgr nesnesini (sınıf kimliği MediaDevMgr) oluşturun ve IComponentAuthenticate arabirimini talep edin.
- Kimlik doğrulamasını işlemek için bir CSecureChannelClient nesnesi oluşturun.
- Uygulama anahtarınızı geçirin ve sertifikayı güvenli kanal nesnesine aktarın. SDK işlevlerinden temel işlevleri almak için aşağıdaki örnek kodda gösterilen sahte anahtarı/sertifikayı kullanabilirsiniz. Ancak, tam işlevsellik elde etmek için (cihaza dosya geçirmek ve cihazdan dosya geçirmek için önemlidir), Geliştirme Araçlarıbölümünde açıklandığı gibi Microsoft'tan bir anahtar ve sertifika istemeniz gerekir.
- 1. adımda oluşturduğunuz IComponentAuthenticate arabirimini güvenli kanal nesnesine geçirin.
- Uygulamanızın kimliğini doğrulamak için CSecureChannelClient::Authenticateçağırabilirsiniz.
- IComponentAuthenticate sorgulaması IWMDeviceManager arayüzü için yapılacaktır.
Bu adımlar aşağıdaki C++ kodunda gösterilmiştir.
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;
}
İlgili konular