Exemple #1
0
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));

}