Método IWMDMDevice::GetSerialNumber (mswmdm.h)
O método GetSerialNumber recupera um número de série que identifica exclusivamente o dispositivo.
Sintaxe
HRESULT GetSerialNumber(
[out] PWMDMID pSerialNumber,
[in, out] BYTE [8] abMac
);
Parâmetros
[out] pSerialNumber
Ponteiro para uma estrutura WMDMID especificando as informações de número de série. A estrutura WMDID é alocada e liberada pelo aplicativo.
[in, out] abMac
Matriz de bytes que especificam o código de autenticação de mensagem para os dados de parâmetro desse método.
Retornar valor
O método retorna um HRESULT. Todos os métodos de interface no Windows Media Gerenciador de Dispositivos podem retornar qualquer uma das seguintes classes de códigos de erro:
- Códigos de erro COM padrão
- Códigos de erro do Windows convertidos em valores HRESULT
- Códigos de erro do Windows Media Gerenciador de Dispositivos
Comentários
Nem todos os dispositivos dão suporte a números de série. Para determinar se o dispositivo dá suporte a números de série, o chamador deve sempre marcar o código de retorno ao chamar essa função. Se um dispositivo de mídia der suporte a números de série, o número de série do dispositivo de mídia será garantido como exclusivo para esse dispositivo.
Depois de chamar esse método, um aplicativo pode verificar se a série não foi modificada durante o transporte usando o parâmetro abMAC . Para obter um código de exemplo sobre isso, consulte Usando canais autenticados seguros.
Exemplos
O código C++ a seguir recupera o número de série do dispositivo e verifica o 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 | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | mswmdm.h |
Biblioteca | Mssachlp.lib |