iWMDMStorage::GetRights 方法 (mswmdm.h)
GetRights 方法會擷取授權記憶體的許可權資訊。
語法
HRESULT GetRights(
[out] PWMDMRIGHTS *ppRights,
[out] UINT *pnRightsCount,
[in, out] BYTE [8] abMac
);
參數
[out] ppRights
包含儲存許可權之 WMDMRIGHTS 結構的陣列指標。 這個參數包含在訊息驗證碼中。 Windows Media 裝置管理員 配置此記憶體,而且應用程式必須使用 CoTaskMemFree 加以釋放。
[out] pnRightsCount
ppRights 陣列中 WMDMRIGHTS 結構的指標。 這個參數包含在訊息驗證碼中。
[in, out] abMac
包含這個方法參數數據之訊息驗證碼的位元組陣列 (MAC) 。
傳回值
方法會傳回 HRESULT。 Windows Media 中的所有介面方法 裝置管理員 都可以傳回下列任何錯誤碼類別:
- 標準 COM 錯誤碼
- 轉換成 HRESULT 值的 Windows 錯誤碼
- Windows Media 裝置管理員 錯誤碼
備註
物件許可權描述數位媒體內容的使用許可權。 例如, WMDMRIGHTS 結構可以包含可播放檔案次數和誰可以播放它的資訊。 如果這不是授權檔案,這個方法將會失敗。
ppRights 陣列是由這個方法所配置,而且必須由應用程式使用 CoTaskMemFree 來釋放,這是標準 Win32 函式。
若要接收此呼叫的進度事件,請使用 IWMDMStorage4::GetRightsWithProgress。
呼叫此方法之後,應用程式可以計算訊息驗證碼 (MAC) 參數的值,並將其與輸出 MAC 值進行比較,以確保參數未遭到竄改。 下列範例程式代碼示範執行這項操作的其中一種方式。
範例
CSecureChannelClient *pSCClient;
IWMDMStorage *pStorgae;
HMAC hMAC;
BYTE abMAC[WMDM_MAC_LENGTH];
BYTE abMACVerify[WMDM_MAC_LENGTH];
hr = pStorage->GetRights(&pRights, &nRightsCount, abMAC);
if (SUCCEEDED(hr))
{
//
// First verify the integrity of the retrieved rights.
//
pSCClient->MACInit(&hMAC);
pSCClient->MACUpdate(hMAC, (BYTE*)(pRights),
sizeof(WMDMRIGHTS) * nRightsCount);
pSCClient->MACUpdate(hMAC, (BYTE*)(&nRightsCount),
sizeof(nRightsCount));
pSCClient->MACFinal(hMAC, (BYTE*)abMACVerify);
if (memcmp(abMACVerify, abMAC, sizeof(abMAC)) != 0)
{
hr = WMDM_E_MAC_CHECK_FAILED;
}
}
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | mswmdm.h |
程式庫 | Mssachlp.lib |