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 |