Всем доброе время суток. Есть код и вопрос
Код
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#include<conio.h>
#include<windows.h>
#include<iostream.h>
#include<ras.h>
#include "rasdlg.h"
#include "raserror.h"
RASENTRYNAME rasentry[10];
RASDIALPARAMS params[10];
RASDIALDLG tt[10];
RASCONN ff[10];
LPRASCONN lpRasConn = NULL;
RAS_STATS RASCONSTAT;
int ListConection(){
DWORD dSize,dNumber,i;
dSize = sizeof(rasentry);
rasentry[0].dwSize = sizeof(RASENTRYNAME);
cout<<"\tВсе соединения на этом компьютере:"<<endl;
if(RasEnumEntries(NULL,NULL,rasentry,&dSize,&dNumber)==0)
for (i=0; i < dNumber;i++)
{
cout<<rasentry[i].szEntryName<<endl;
}
return i;
}
BOOL ConectRAS(colConetction){
int i;
DWORD dwErr = NO_ERROR;
BOOL nRet = FALSE;
HANDLE hHeap = NULL;
LPRASDIALDLG lpInfo = NULL;
cout<<colConetction;
cout<<"\n\tВыполняется подключение через одно из доступных соединений"<<endl;
cout<<"\n\tИмя соединения\t\t\t\tСостояние"<<endl;
hHeap = GetProcessHeap();
if( NULL == hHeap )
{
dwErr = GetLastError();
printf("GetProcessHeap() failed: Error = %d\n", dwErr);
return dwErr;
}
lpInfo = (LPRASDIALDLG) HeapAlloc( hHeap, HEAP_ZERO_MEMORY, sizeof(RASDIALDLG));
if( NULL == lpInfo )
{
dwErr = ERROR_OUTOFMEMORY;
printf("HeapAlloc() failed\n");
return dwErr;
}
lpInfo->dwSize = sizeof(RASDIALDLG);
for (i = 0; i <3 ; i++) {
printf("%s",rasentry[i].szEntryName);
// Calling RasDialDlg()
nRet = RasDialDlg(NULL,rasentry[i].szEntryName, NULL, lpInfo);
if ( FALSE == nRet)
{
dwErr = lpInfo->dwError;
cout<<"\t\tНе подключено ошибка:";
cout<<dwErr<<endl;
}
else
cout<<"\t\t\tПодключено";
if (TRUE == nRet)
{if( NULL != lpInfo )
{
HeapFree( hHeap, 0, lpInfo);
}
break;
}
}}
BOOL ListCONECTED()
{
DWORD dwCb = 0;
DWORD dwRet = ERROR_SUCCESS;
DWORD dwConnections = 0;
//Deallocate memory for the connection buffer
HeapFree(GetProcessHeap(), 0, lpRasConn);
lpRasConn = NULL;
// Call RasEnumConnections with lpRasConn = NULL. dwCb is returned with the required buffer size and
// a return code of ERROR_BUFFER_TOO_SMALL
dwRet = RasEnumConnections(lpRasConn, &dwCb, &dwConnections);
if (dwRet == ERROR_BUFFER_TOO_SMALL){
// Allocate the memory needed for the array of RAS structure(s).
lpRasConn = (LPRASCONN) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwCb);
if (lpRasConn == NULL){
wprintf(L"HeapAlloc failed!\n");
return 0;
}
// The first RASCONN structure in the array must contain the RASCONN structure size
lpRasConn[0].dwSize = sizeof(RASCONN);
// Call RasEnumConnections to enumerate active connections
dwRet = RasEnumConnections(lpRasConn, &dwCb, &dwConnections);
// If successful, print the names of the active connections.
if (ERROR_SUCCESS == dwRet){
cout<<"\n\nСписок активных подключений:\n";
for (DWORD i = 0; i < dwConnections; i++){
cout<<lpRasConn[i].szEntryName;
}
} cout<<sizeof(lpRasConn);
return dwConnections;
}
// There was either a problem with RAS or there are no connections to enumerate
if(dwConnections >= 1){
cout<<"\n\nОперация прервана, не удалось определить розмер буфера для структур.\n";
}else{
cout<<"\n\nАктивных подключений нет.\n";
}
return 0;
}
BOOL Disconect(i)
{
DWORD erors,p;
i=0;
cout<<"\nРазединение "<<lpRasConn[i].szEntryName<<"...";
erors=RasHangUp(lpRasConn[i].hrasconn);
Sleep(3000);
if (erors!=ERROR_SUCCESS) {
cout<<"Ошибка\n";
cout<<"Номер ошибки "<<erors;
} else cout<<"Ok";
}
void main()
{SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int colConetction,idConnection,dwConectionActive,i;
DWORD todaybytes,limbytes;
colConetction=ListConection();
ConectRAS(colConetction);
dwConectionActive=ListCONECTED();
Sleep(4000);
Disconect(dwConectionActive);
getch();
}
:
1.Так вот. Почему если подключение уже подключено и в диалоговом окне еще раз подключить, то потом при разъединении вродебы разъединено, но на самом деле нет?
2.Функцию по получении активных подключений взял с библиотеки MSDN, но на ХП эта функция не работает, а возвращает ошибку 632-некоректный размер структуры.Там коментах об этом писалось, но я так ничего и не понял?Почему она не работает?Если взять просто масив с ведомым количеством элементов, и убрать все с операции с выделением памяти.
Не судите строго, я только начинаю.Зарание спасибо!!!!!!!!!!
P.S. Буду завтра
14.06.11 12:43: Перенесено из 'C/C++'