Проверка подлинности приложения
Первым шагом, которое должно выполнить приложение, является проверка подлинности. Проверка подлинности проверяет удостоверение приложения на диспетчер устройств Windows Media. После проверки подлинности приложения можно вызвать QueryInterface , чтобы получить корневой интерфейс IWMDeviceManager , который можно запрашивать для других необходимых интерфейсов, которые можно запрашивать для всех остальных интерфейсов. При запуске проверка подлинности должна выполняться только один раз.
Чтобы проверить подлинность приложения, выполните следующие действия.
- Создайте объект MediaDevMgr (идентификатор класса MediaDevMgr) и запросите интерфейс IComponentAuthenticate .
- Создайте объект CSecureChannelClient для обработки проверки подлинности.
- Передайте ключ приложения и передайте сертификат в объект защищенного канала. Вы можете использовать фиктивный ключ или сертификат, показанный в следующем примере кода, чтобы получить основные функциональные возможности из функций ПАКЕТА SDK. Однако для получения полной функциональности (важной для передачи файлов на устройство и с него), необходимо запросить ключ и сертификат у корпорации Майкрософт, как описано в разделе Средства разработки.
- Передайте интерфейс IComponentAuthenticate , созданный на шаге 1, в объект защищенного канала.
- Вызовите CSecureChannelClient::Authenticate для проверки подлинности приложения.
- Запрос IComponentAuthenticate для интерфейса IWMDeviceManager .
Эти шаги показаны в следующем коде C++.
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;
}
Связанные темы