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 |
라이브러리 | Mssachlp.lib |