Metodo IWMDMDevice::GetSerialNumber (mswmdm.h)
Il metodo GetSerialNumber recupera un numero di serie che identifica in modo univoco il dispositivo.
Sintassi
HRESULT GetSerialNumber(
[out] PWMDMID pSerialNumber,
[in, out] BYTE [8] abMac
);
Parametri
[out] pSerialNumber
Puntatore a una struttura WMDMID che specifica le informazioni sul numero di serie. La struttura WMDID viene allocata e rilasciata dall'applicazione.
[in, out] abMac
Matrice di byte che specifica il codice di autenticazione del messaggio per i dati dei parametri di questo metodo.
Valore restituito
Il metodo restituisce un valore HRESULT. Tutti i metodi di interfaccia in Windows Media Gestione dispositivi possono restituire una delle classi di codici di errore seguenti:
- Codici di errore COM standard
- Codici di errore di Windows convertiti in valori HRESULT
- Codici di errore di Windows Media Gestione dispositivi
Commenti
Non tutti i dispositivi supportano i numeri di serie. Per determinare se il dispositivo supporta i numeri di serie, il chiamante deve sempre controllare il codice restituito quando chiama questa funzione. Se un dispositivo multimediale supporta numeri di serie, è garantito che il numero di serie del dispositivo multimediale sia univoco per tale dispositivo.
Dopo aver chiamato questo metodo, un'applicazione può verificare che il seriale non sia stato modificato durante il trasporto usando il parametro abMAC . Per un esempio di codice, vedere Uso di canali autenticati sicuri.
Esempio
Il codice C++ seguente recupera il numero di serie del dispositivo e verifica il 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
}
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Intestazione | mswmdm.h |
Libreria | Mssachlp.lib |