BOOL ConvertRealIdToStringIdW( const PNDAS_DEVICE_ID pDeviceId, LPWSTR lpszDeviceStringId) { _ASSERTE(!::IsBadStringPtrW(lpszDeviceStringId,NDAS_DEVICE_STRING_ID_LEN + 1)); _ASSERTE(!::IsBadWritePtr(pDeviceId, sizeof(NDAS_DEVICE_ID))); NDAS_ID_KEY_INFO info; ::ZeroMemory(&info, sizeof(NDAS_ID_KEY_INFO)); info.random = NDIDV1Random; info.vid = NDIDV1VID; ::CopyMemory(info.reserved, NDIDV1Reserved, sizeof(NDIDV1Reserved)); ::CopyMemory(info.address, pDeviceId, sizeof(BYTE) * 6); // fill required keys ::CopyMemory(info.key1, NDIDV1Key1, 8 * sizeof(CHAR)); ::CopyMemory(info.key2, NDIDV1Key2, 8 * sizeof(CHAR)); if (!NdasIdKey_Encrypt(&info)) { return FALSE; } // copy id for (DWORD i = 0; i < NDAS_DEVICE_STRING_ID_PARTS; ++i) { for (DWORD j = 0; j < NDAS_DEVICE_STRING_ID_PART_LEN; ++j) { lpszDeviceStringId[i * NDAS_DEVICE_STRING_ID_PART_LEN + j] = static_cast<WCHAR>(info.serialNo[i][j]); } } // terminate as null lpszDeviceStringId[NDAS_DEVICE_STRING_ID_LEN] = L'\0'; return TRUE; }
void CMainDialog::OnCmdOK(UINT wNotifyCode, int wID, HWND hWndCtl) { NDAS_ID_KEY_INFO info = {0}; for (int i = 0; i < RTL_NUMBER_OF(m_wndNdasId); ++i) { m_wndNdasId[i].SetWindowText(_T("")); } { m_wndWriteKey.SetWindowText(_T("")); } C_ASSERT(RTL_NUMBER_OF(m_wndAddresses) == RTL_NUMBER_OF(info.address)); for (int i = 0; i < RTL_NUMBER_OF(m_wndAddresses); ++i) { if (!pGetByteFromEdit(m_wndAddresses[i], info.address[i])) { return; } } if (!pGetByteFromEdit(m_wndVID, info.vid)) { return; } C_ASSERT(RTL_NUMBER_OF(m_wndReserved) == RTL_NUMBER_OF(info.reserved)); for (int i = 0; i < RTL_NUMBER_OF(m_wndReserved); ++i) { if (!pGetByteFromEdit(m_wndReserved[i], info.reserved[i])) { return; } } if (!pGetByteFromEdit(m_wndSeed, info.random)) { return; } C_ASSERT(RTL_NUMBER_OF(m_wndKeys1) == RTL_NUMBER_OF(info.key1)); for (int i = 0; i < RTL_NUMBER_OF(m_wndKeys1); ++i) { if (!pGetByteFromEdit(m_wndKeys1[i], info.key1[i])) { return; } } C_ASSERT(RTL_NUMBER_OF(m_wndKeys2) == RTL_NUMBER_OF(info.key2)); for (int i = 0; i < RTL_NUMBER_OF(m_wndKeys2); ++i) { if (!pGetByteFromEdit(m_wndKeys2[i], info.key2[i])) { return; } } if (!NdasIdKey_Encrypt(&info)) { return; } for (int i = 0; i < 4; ++i) { m_wndNdasId[i].SetWindowText(pNdasKeyCharsToString(info.serialNo[i])); } m_wndWriteKey.SetWindowText(pNdasKeyCharsToString(info.writeKey)); m_wndSerialNumberDigit.SetWindowText(pGetSNDigitString(info.address)); }