次の方法で共有


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 Media デバイス マネージャーエラー コード
考えられるエラー コードの詳細な一覧については、「 エラー コード」を参照してください。

注釈

すべてのデバイスでシリアル番号がサポートされているわけではありません。 デバイスがシリアル番号をサポートしているかどうかを判断するには、呼び出し元は常に、この関数を呼び出すときにリターン コードをチェックする必要があります。 メディア デバイスがシリアル番号をサポートしている場合、メディア デバイスのシリアル番号は、そのデバイスで一意であることが保証されます。

このメソッドを呼び出した後、アプリケーションは 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
Library Mssachlp.lib

こちらもご覧ください

IWMDMDevice インターフェイス

セキュリティで保護された認証済みチャネルの使用