Поделиться через


Метод 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
  • Коды ошибок Windows, преобразованные в значения HRESULT
  • Коды ошибок диспетчер устройств 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
Header mswmdm.h
Библиотека Mssachlp.lib

См. также раздел

Интерфейс IWMDMDevice

Использование защищенных каналов, прошедших проверку подлинности