共用方式為


驗證應用程式

應用程式必須執行的第一個步驟是驗證。 驗證會向 Windows Media 裝置管理員驗證應用程式的身分識別。 驗證應用程式之後,您可以呼叫 QueryInterface 來取得根 IWMDeviceManager 介面,此介面可以查詢其他必要介面,而該介面本身可以查詢所有其他介面。 在啟動時,驗證只需要進行一次。

若要驗證您的應用程式,請執行下列步驟:

  1. CoCreate mediaDevMgr 物件 (類別識別碼 MediaDevMgr) ,並要求 IComponentAuthenticate 介面。
  2. 建立 CSecureChannelClient 物件來處理驗證。
  3. 將您的應用程式金鑰和傳輸憑證傳遞至安全通道物件。 您可以使用下列範例程式碼所示的虛擬金鑰/憑證,從 SDK 函式取得基本功能。 不過,若要取得完整功能 (將檔案傳遞至裝置) 很重要,您必須要求 Microsoft 的金鑰和憑證,如 開發工具中所述。
  4. 將您在步驟 1 中建立的 IComponentAuthenticate 介面傳遞至安全通道物件。
  5. 呼叫 CSecureChannelClient::Authenticate 來驗證您的應用程式。
  6. 查詢 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;
}

建立 Windows 媒體裝置管理員應用程式