Как получить DATA SOURCE NAMES (DSN)

void GetDSN()
{
CWaitCursor Wait;
SQLHENV henv;
RETCODE RetCode;
short len1,len2;
CString strValue;
unsigned char *ucpDSN;
ucpDSN=(unsigned char*)malloc(256);
unsigned char *ucpDescription ; // Содержит описание ODBC драйвера для DSN
ucpDescription=(unsigned char*)malloc(256);
RetCode=::SQLAllocEnv(&henv); // выделаем дескриптор окружения

if(RetCode == SQL_SUCCESS || RetCode == SQL_SUCCESS_WITH_INFO) // Если распределение успешно
{
while(RetCode!=SQL_NO_DATA)
{
// Fetch available data sources
RetCode=::SQLDataSources(henv, SQL_FETCH_NEXT, ucpDSN, 256,
&len1, ucpDescription , 256, &len2);
if (RetCode!=SQL_NO_DATA) // Если данные существуют
{
strValue.Format("%s-%s",(LPCTSTR)ucpDSN,(LPCTSTR)ucpDescription);
if(!strValue.IsEmpty())
AfxMessageBox(strValue); // Отображаем DSN Имена

memset(ucpDSN,'\0',sizeof(ucpDSN)); // Очищаем буфер
}
}
}

delete ucpDescription;
delete ucpDSN;
::SQLFreeEnv(henv); // free environment handle
henv = NULL;
}