共用方式為


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

另請參閱

IWMDMDevice 介面

使用安全驗證通道