IWMDMDevice::GetSerialNumber 方法 (mswmdm.h)
GetSerialNumber 方法會擷取可唯一識別裝置的序號。
語法
HRESULT GetSerialNumber(
[out] PWMDMID pSerialNumber,
[in, out] BYTE [8] abMac
);
參數
[out] pSerialNumber
指定序號資訊的 WMDMID 結構的指標。 WMDID 結構是由應用程式配置和釋放。
[in, out] abMac
指定這個方法之參數數據的訊息驗證碼的位元組數位。
傳回值
方法會傳回 HRESULT。 Windows Media 裝置管理員 中的所有介面方法都可以傳回下列任何一種錯誤碼類別:
- 標準 COM 錯誤碼
- 轉換成 HRESULT 值的 Windows 錯誤碼
- Windows 媒體 裝置管理員 錯誤碼
備註
並非所有裝置都支持序號。 若要判斷裝置是否支援序號,呼叫端一律必須在呼叫此函式時檢查傳回碼。 如果媒體裝置支援序號,則媒體裝置的序號保證該裝置是唯一的。
呼叫這個方法之後,應用程式可以使用 abMAC 參數來確認在傳輸期間尚未修改序列。 如需此程式碼的範例,請參閱 使用安全驗證通道。
範例
下列 C++ 程式代碼會擷取裝置序號並驗證 MAC。
//
// Get and verify the serial number.
//
WMDMID serialNumber;
BYTE receivedMAC[WMDM_MAC_LENGTH];
hr = pIWMDMDevice->GetSerialNumber(&serialNumber, receivedMAC);
// Check the MAC to guarantee the serial number has not been tampered with.
if (hr == S_OK)
{
// Initialize a MAC handle,
// next add all parameters to the MAC,
// and finally retrieve the calculated MAC value.
HMAC hMAC;
BYTE calculatedMAC[WMDM_MAC_LENGTH];
hr = m_pSAC->MACInit(&hMAC);
hr = m_pSAC->MACUpdate(hMAC, (BYTE*)(&serialNumber), sizeof(serialNumber));
hr = m_pSAC->MACFinal(hMAC, (BYTE*)calculatedMAC);
if (memcmp(calculatedMAC, receivedMAC, sizeof(calculatedMAC)) == 0)
{
// MAC is authentic. Print the serial number.
CHAR* serialNumberBuffer = new CHAR[serialNumber.SerialNumberLength + 1];
ZeroMemory(serialNumberBuffer, (serialNumber.SerialNumberLength + 1) * sizeof(CHAR));
memcpy(serialNumberBuffer, serialNumber.pID, serialNumber.SerialNumberLength * sizeof(CHAR));
// TODO: Display the serial number.
delete serialNumberBuffer;
}
else
// TODO: Display a message indicating that the serial number MAC does not match in EnumDevices
}
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | mswmdm.h |
程式庫 | Mssachlp.lib |