Método IWMDMDevice::GetSerialNumber (mswmdm.h)
El método GetSerialNumber recupera un número de serie que identifica de forma única el dispositivo.
Sintaxis
HRESULT GetSerialNumber(
[out] PWMDMID pSerialNumber,
[in, out] BYTE [8] abMac
);
Parámetros
[out] pSerialNumber
Puntero a una estructura WMDMID que especifica la información del número de serie. La aplicación asigna y libera la estructura WMDID .
[in, out] abMac
Matriz de bytes que especifican el código de autenticación de mensajes para los datos de parámetros de este método.
Valor devuelto
El método devuelve un valor HRESULT. Todos los métodos de interfaz de Windows Media Administrador de dispositivos pueden devolver cualquiera de las siguientes clases de códigos de error:
- Códigos de error COM estándar
- Códigos de error de Windows convertidos en valores HRESULT
- Códigos de error de windows Media Administrador de dispositivos
Comentarios
No todos los dispositivos admiten números de serie. Para determinar si el dispositivo admite números de serie, el autor de la llamada siempre debe comprobar el código de retorno al llamar a esta función. Si un dispositivo multimedia admite números de serie, se garantiza que el número de serie del dispositivo multimedia sea único para ese dispositivo.
Después de llamar a este método, una aplicación puede comprobar que la serie no se ha modificado durante el transporte mediante el parámetro abMAC . Para obtener código de ejemplo en este artículo, consulte Uso de canales autenticados seguros.
Ejemplos
El siguiente código de C++ recupera el número de serie del dispositivo y comprueba el 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
}
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | mswmdm.h |
Library | Mssachlp.lib |