/******************************************************************************
* This is a part of the Microsoft Source Code Samples.
* Copyright 1992 - 1998 Microsoft Corporation.
* All rights reserved.
* This source code is only intended as a supplement to
* MprAdmin API usage and is meant to help users with
* MprAdmin API calling conventions. Use this code at your own risk.
* Microsoft disclaims any implied warranty. This sample code can
* be copied and distributed.
*
******************************************************************************/
/********************************************************************
* admindll.c -- Sample program demonstrating the use of MprAdmin
* CallOut API's
*
*****************************************************************************/
/***************************************************************************
* Functions:
* Init(void);
* Init2(void);
* Debug_Print_RasConnection(
* IN RAS_CONNECTION_0 * pRasConnection0,
* IN RAS_CONNECTION_1 * pRasConnection1)
*
* File_Print_RasConnection(
* IN RAS_CONNECTION_0 * pRasConnection0,
* IN RAS_CONNECTION_1 * pRasConnection1)
*
* Debug_Print_RasPort(
* IN RAS_PORT_0 * pRasPort0,
* IN RAS_PORT_1 * pRasPort1)
*
* File_Print_RasPort(
* IN RAS_PORT_0 * pRasPort0,
* IN RAS_PORT_1 * pRasPort1)
*****************************************************************************/
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <lm.h>
#include <stdio.h>
#include <time.h>
#include <mprapi.h>
#include <memory.h>
//Functions
VOID
Debug_Print_RasConnection(
IN RAS_CONNECTION_0 * pRasConnection0,
IN RAS_CONNECTION_1 * pRasConnection1
);
VOID
File_Print_RasConnection(IN RAS_CONNECTION_0 * pRasConnection0,
IN RAS_CONNECTION_1 * pRasConnection1
);
VOID
Debug_Print_RasPort(
IN RAS_PORT_0 * pRasPort0,
IN RAS_PORT_1 * pRasPort1
);
VOID
File_Print_RasPort(
IN RAS_PORT_0 * pRasPort0,
IN RAS_PORT_1 * pRasPort1
);
VOID Init(void);
VOID Init2(void);
//Global Variables
#define Number_Of_Flags 6
#define Num_Ip_Address 254
DWORD TempIpAddress = 0x010A0F0E;
HANDLE IPFile = NULL;
HANDLE ConDisFile = NULL;
HANDLE ErrLogFile = NULL;
HANDLE ErrLogFileIP = NULL;
BOOL IPFileInValid = FALSE;
BOOL ConnectDisconnectInValid = FALSE;
BOOL ErrorLogInValid = FALSE;
BOOL ErrLogIPInValid = FALSE;
BOOL First_Call = TRUE;
WCHAR*
StrDupWFromA(
CHAR* psz );
static DWORD Multilink_Count = 0;
HANDLE Connection_Handle;
/* the above two variables are to control the number of ports a connection */
/* can use for multilink. Multilink_Count can be set via regedit.exe to */
/* make it little more portable */
typedef struct Static_Info_Database
{
BOOL bTaken;
HANDLE hConnection;
RAS_CONNECTION_0 pRasConnection0;
RAS_CONNECTION_1 pRasConnection1;
} Static_Info_Database;
Static_Info_Database Static_Connection_Info[Num_Ip_Address];
typedef struct Static_Statistic
{
WCHAR wszUserName[UNLEN+1];
WCHAR wszPortName[MAX_PORT_NAME];
DWORD IpAddress;
BOOL bTaken;
} Static_Statistic;
Static_Statistic Static_Check_Stats[Num_Ip_Address];
WCHAR*
StrDupWFromA(
CHAR* psz )
/* Returns heap block containing a copy of 0-terminated string 'psz' or
** NULL on error or if 'psz' is NULL. The output string is converted to
** UNICODE. It is caller's responsibility to Free the returned string.
*/
{
WCHAR* pszNew = NULL;
if (psz)
{
DWORD cb;
cb = MultiByteToWideChar( CP_ACP, 0, psz, -1, NULL, 0 );
pszNew = malloc( cb * sizeof(TCHAR) );
if (!pszNew)
{
return NULL;
}
cb = MultiByteToWideChar( CP_ACP, 0, psz, -1, pszNew, cb );
if (cb == 0)
{
free( pszNew );
return NULL;
}
}
return pszNew;
}
//
// Format and write debug information to OutputDebugString
//
ULONG
_cdecl
DbgPrint(
PCH Format,
...
)
{
CHAR szbuffer[255];
WCHAR buffer[255];
WCHAR *temp=NULL;
LPINT lpResult=0;
va_list marker;
va_start (marker,Format);
if (IsTextUnicode(marker, sizeof(marker),lpResult))
{
temp=StrDupWFromA(Format);
wvsprintfW (buffer,temp, marker);
OutputDebugString (buffer);
free(temp);
}
else
{
wvsprintfA (szbuffer,Format, marker);
temp=StrDupWFromA(szbuffer);
OutputDebugString (temp);
free(temp);
}
return TRUE;
}
//
// Called from MprAdminGetIpAddressForUser, which itself gets called by RasMan
//
VOID Init(void)
{
INT i=0;
IPFile = CreateFile(TEXT("IpAddress.log"),
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
(LPSECURITY_ATTRIBUTES) NULL,
CREATE_ALWAYS,
0,
(HANDLE) NULL);
if (IPFile== INVALID_HANDLE_VALUE)
{
IPFileInValid = TRUE;
}
ErrLogFileIP = CreateFile(TEXT("IpAddError.log"),
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
(LPSECURITY_ATTRIBUTES) NULL,
CREATE_ALWAYS,
0,
(HANDLE) NULL);
if (ErrLogFileIP== INVALID_HANDLE_VALUE)
{
ErrLogIPInValid = TRUE;
}
}
//
// Called by MprAdminAcceptNewConnection, itself gets called by RAS Server
//
VOID Init2(void)
{
INT i=0;
ConDisFile = CreateFile(TEXT("ConDis.log"),
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_ALWAYS,
0,
(HANDLE) NULL);
if (ConDisFile== INVALID_HANDLE_VALUE)
{
ConnectDisconnectInValid = TRUE;
}
ErrLogFile = CreateFile(TEXT("AdminErr.log"),
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_ALWAYS,
0,
(HANDLE) NULL);
if (ErrLogFile == INVALID_HANDLE_VALUE)
{
ErrorLogInValid = TRUE;
}
for (i=0;i < Num_Ip_Address; i++)
{
Static_Check_Stats[i].bTaken=FALSE;
TempIpAddress += 0x01000000;
if ((TempIpAddress | 0x0ff000000) == 0x0ff000000)
TempIpAddress = 0x010A0F0E;
Static_Check_Stats[i].IpAddress = TempIpAddress;
Static_Connection_Info[i].bTaken = FALSE;
}
}
BOOL DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpReserved ) // reserved
{
// Perform actions based on the reason for calling.
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
// Initialize once for each new process.
// Return FALSE to fail DLL load.
break;
case DLL_THREAD_ATTACH:
// Do thread-specific initialization.
break;
case DLL_THREAD_DETACH:
// Do thread-specific cleanup.
break;
case DLL_PROCESS_DETACH:
// Perform any necessary cleanup.
break;
}
return TRUE; // Successful DLL_PROCESS_ATTACH.
}
DWORD APIENTRY
MprAdminGetIpAddressForUser(
IN WCHAR * lpszUserName,
IN WCHAR * lpszPortName,
IN OUT DWORD * pipAddress,
OUT BOOL * pfNotifyDLL
)
{
DWORD i=0;
DWORD dwBytesWritten=0;
CHAR buf[120];
//to check if the call is first rasman call out. If yes, call Initialize routine
if (First_Call)
{
Init();
Init2();
First_Call=FALSE;
}
DbgPrint("First_Call %d\n",First_Call);
DbgPrint("\nGetIpAddressForUser called UserName=%ws,Port=%ws,IpAddress=%d\n",
lpszUserName,lpszPortName,(DWORD)*pipAddress );
for (i=0;i < Num_Ip_Address;i++)
{
if (Static_Check_Stats[i].bTaken == FALSE)
{
wcscpy(Static_Check_Stats[i].wszUserName, lpszUserName);
wcscpy(Static_Check_Stats[i].wszPortName, lpszPortName);
*pipAddress = Static_Check_Stats[i].IpAddress;
DbgPrint("Trying to get the IP Address %d",(DWORD) *pipAddress);
Static_Check_Stats[i].bTaken=TRUE;
break;
}
}
DbgPrint("GetIpAddressForUser setting IpAddress=%d\n",(DWORD)*pipAddress );
sprintf(buf,"GetIpAddressForUser setting IpAddress=%d\n",(DWORD)*pipAddress );
WriteFile(IPFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
*pfNotifyDLL = TRUE;
return( NO_ERROR );
}
VOID APIENTRY
MprAdminReleaseIpAddress(
IN WCHAR * lpszUserName,
IN WCHAR * lpszPortName,
IN OUT DWORD * pipAddress
)
{
DWORD dwBytesWritten=0;
CHAR buf[120];
int i=0;
DbgPrint( "\nReleaseIpAddressr called UserName=%ws,Port=%ws,IpAddress=%d\n",
lpszUserName,lpszPortName,(DWORD)*pipAddress );
for (i=0;i < Num_Ip_Address;i++)
{
if (Static_Check_Stats[i].IpAddress == (DWORD) *pipAddress)
{
if (Static_Check_Stats[i].bTaken == TRUE)
{
if (wcscmp(Static_Check_Stats[i].wszUserName,lpszUserName) == 0)
{
if (wcscmp(Static_Check_Stats[i].wszPortName,lpszPortName) == 0)
{
Static_Check_Stats[i].bTaken = FALSE;break;
}
else
{
DbgPrint("ERROR ReleaseIP PortName, Cannot free IP Address %ws\n",
Static_Check_Stats[i].wszPortName);
if (!(ErrLogIPInValid))
{
sprintf(buf,"ERROR ReleaseIP PortName, Cannot free IP Address %ws\n",
Static_Check_Stats[i].wszPortName);
WriteFile(ErrLogFileIP, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
break;
}
}
}
else
{
DbgPrint("ERROR ReleaseIP UserName Incorrect, Cannot free IP Address %ws\n",
Static_Check_Stats[i].wszUserName);
if (!(ErrLogIPInValid))
{
sprintf(buf,"ERROR ReleaseIP UserName Incorrect, Cannot free IP Address %ws\n",
Static_Check_Stats[i].wszUserName);
WriteFile(ErrLogFileIP, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
}
break;
}
}
else
{
DbgPrint("ERROR ReleaseIP Wrong IP address, doesn't exist, Cannot free IP Address %d\n",
Static_Check_Stats[i].IpAddress);
if (!(ErrLogIPInValid))
{
sprintf(buf,"ERROR ReleaseIP Wrong IP Address, doesn't exist Cannot free IP Address %d\n",
Static_Check_Stats[i].IpAddress);
WriteFile(ErrLogFileIP, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
}
break;
}
}
}
}
BOOL APIENTRY
MprAdminAcceptNewConnection(
IN RAS_CONNECTION_0 * pRasConnection0,
IN RAS_CONNECTION_1 * pRasConnection1
)
{
INT i=0;
CHAR buf[512];
DWORD dwBytesWritten=0;
DbgPrint("MprAdminAcceptNewConnection Called\n");
Debug_Print_RasConnection(pRasConnection0,pRasConnection1);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"MprAdminAcceptNewConnection Called::dumping pRasConnection0\n\n");
File_Print_RasConnection(pRasConnection0,pRasConnection1);
if (( lstrcmp( pRasConnection0->wszUserName, TEXT("aDministrator") ) ) == 0)
{
DbgPrint("Do not Accept Connection\n");
FlushFileBuffers(ErrLogFile);
FlushFileBuffers(ConDisFile);
return( FALSE );
}
else
{
for (i=0;i < Num_Ip_Address; i++)
if (!(Static_Connection_Info[i].bTaken))
{
Static_Connection_Info[i].bTaken = TRUE;
Static_Connection_Info[i].hConnection=pRasConnection0->hConnection;
memcpy(&Static_Connection_Info[i].pRasConnection0,pRasConnection0, sizeof(RAS_CONNECTION_0));
memcpy(&Static_Connection_Info[i].pRasConnection1,pRasConnection1, sizeof(RAS_CONNECTION_1));
break;
}
DbgPrint("Accept Connection\n");
FlushFileBuffers(ErrLogFile);
FlushFileBuffers(ConDisFile);
return( TRUE );
}
return( TRUE );
}
BOOL APIENTRY
MprAdminAcceptNewLink(
IN RAS_PORT_0 * pRasPort0,
IN RAS_PORT_1 * pRasPort1
)
{
CHAR buf[512];
DWORD dwBytesWritten = 0;
Multilink_Count++;
/* Multilink_Count can be set through regedit.exe to make it little more portable */
/* Currently it is hard coded in this sample, so that no connection can have more than 2 ports */
if (Multilink_Count == 1)
Connection_Handle = pRasPort0->hConnection;/* this is the first port */
//to check if the call is first rassrv call out. If yes, call Initialize routine
DbgPrint("MprAdminAcceptNewLink Called, times %d\n",Multilink_Count);
Debug_Print_RasPort(pRasPort0,pRasPort1);
//dumping pRasPort0 to a file
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"MprAdminAcceptNewLink Called time %d::dumping pRasPort0 to file\n",Multilink_Count);
File_Print_RasPort(pRasPort0,pRasPort1);
/* if the Connection_Handle is not same then it is a new call, reset the counter to 1 */
if (Connection_Handle != pRasPort0->hConnection)
{
if (Multilink_Count > 1)
{
Connection_Handle = pRasPort0->hConnection;
Multilink_Count = 1;
return TRUE;
}
else
return FALSE;
}
/* Connection_Handle same as previous port then restrict the number of ports. */
/* Just return FALSE */
if (Multilink_Count > 2)
{
DbgPrint("MprAdminAcceptNewLink(): Multilink_Count=%d > 2 so return FALSE\n", Multilink_Count);
return FALSE;
}
return TRUE;
}
VOID APIENTRY
MprAdminLinkHangupNotification(
IN RAS_PORT_0 * pRasPort0,
IN RAS_PORT_1 * pRasPort1
)
{
char buf[512];
DWORD dwBytesWritten = 0;
DbgPrint("MprAdminLinkHangupNotification Called\n");
Debug_Print_RasPort(pRasPort0,pRasPort1);
//dumping pRasPort0 to a file
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"MprAdminLinkHangupNotification Called::dumping pRasPort0 to file\n");
File_Print_RasPort(pRasPort0,pRasPort1);
}
VOID APIENTRY
MprAdminConnectionHangupNotification(
IN RAS_CONNECTION_0 * pRasConnection0,
IN RAS_CONNECTION_1 * pRasConnection1
)
{
INT i = 0;
DWORD dwBytesWritten = 0;
CHAR buf[120];
DbgPrint( "\nMprAdminConnectionHangupNotification called \n" );
Debug_Print_RasConnection(pRasConnection0,pRasConnection1);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"MprAdminConnectionHangupNotification called::dumping pRasConnection0\n\n");
File_Print_RasConnection(pRasConnection0,pRasConnection1);
//Sanity checks
for (i=0; i < Num_Ip_Address; i++)
{
if ((Static_Connection_Info[i].bTaken) && (Static_Connection_Info[i].hConnection == pRasConnection0->hConnection))
{
Static_Connection_Info[i].bTaken = FALSE;
if (ErrorLogInValid)
{
if (Static_Connection_Info[i].pRasConnection0.hConnection != pRasConnection0->hConnection)
DbgPrint("ERROR Connection Handle differs %d-> Stored, %d->Passed\n",
Static_Connection_Info[i].pRasConnection0.hConnection, pRasConnection0->hConnection);
if (Static_Connection_Info[i].pRasConnection0.hInterface != pRasConnection0->hInterface)
DbgPrint("ERROR Interface Handle differs %d-> Stored, %d->Passed\n",
Static_Connection_Info[i].pRasConnection0.hInterface, pRasConnection0->hInterface);
if (Static_Connection_Info[i].pRasConnection0.dwConnectDuration > pRasConnection0->dwConnectDuration)
DbgPrint("ERROR Duration time is less the %d-> Stored, %d->Passed\n",
Static_Connection_Info[i].pRasConnection0.dwConnectDuration, pRasConnection0->dwConnectDuration);
if (Static_Connection_Info[i].pRasConnection0.dwInterfaceType != pRasConnection0->dwInterfaceType)
DbgPrint("ERROR Interface Type differs %d-> Stored, %d->Passed\n",
Static_Connection_Info[i].pRasConnection0.dwInterfaceType != pRasConnection0->dwInterfaceType);
if (Static_Connection_Info[i].pRasConnection0.dwConnectionFlags != pRasConnection0->dwConnectionFlags)
DbgPrint("ERROR Connection Flags differs %d-> Stored, %d->Passed\n",
Static_Connection_Info[i].pRasConnection0.dwConnectionFlags, pRasConnection0->dwConnectionFlags);
if (wcscmp(Static_Connection_Info[i].pRasConnection0.wszInterfaceName,pRasConnection0->wszInterfaceName) == 0)
DbgPrint("ERROR Interface Name Differs %ws ->Stored, %ws ->Passed\n",
Static_Connection_Info[i].pRasConnection0.wszInterfaceName,pRasConnection0->wszInterfaceName);
if (wcscmp(Static_Connection_Info[i].pRasConnection0.wszUserName,pRasConnection0->wszUserName) != 0)
DbgPrint("ERROR User Name Differs %ws ->Stored, %ws ->Passed\n",
Static_Connection_Info[i].pRasConnection0.wszUserName,pRasConnection0->wszUserName);
if (wcscmp(Static_Connection_Info[i].pRasConnection0.wszLogonDomain,pRasConnection0->wszLogonDomain) != 0)
DbgPrint("ERROR Logon Name Differs %ws ->Stored, %ws ->Passed\n",
Static_Connection_Info[i].pRasConnection0.wszLogonDomain,pRasConnection0->wszLogonDomain);
if (wcscmp(Static_Connection_Info[i].pRasConnection0.wszRemoteComputer,pRasConnection0->wszRemoteComputer) != 0)
DbgPrint("ERROR Remote Name Differs %ws ->Stored, %ws ->Passed\n",
Static_Connection_Info[i].pRasConnection0.wszRemoteComputer,pRasConnection0->wszRemoteComputer);
}
else
{
WriteFile(ErrLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
if (Static_Connection_Info[i].pRasConnection0.hConnection != pRasConnection0->hConnection)
sprintf(buf,"ERROR Connection Handle differs %d-> Stored, %d->Passed\n",
Static_Connection_Info[i].pRasConnection0.hConnection, pRasConnection0->hConnection);
WriteFile(ErrLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
if (Static_Connection_Info[i].pRasConnection0.hInterface != pRasConnection0->hInterface)
sprintf(buf,"ERROR Interface Handle differs %d-> Stored, %d->Passed\n",
Static_Connection_Info[i].pRasConnection0.hInterface, pRasConnection0->hInterface);
WriteFile(ErrLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
if (Static_Connection_Info[i].pRasConnection0.dwConnectDuration <= pRasConnection0->dwConnectDuration)
sprintf(buf,"ERROR Duration time is less the %d-> Stored, %d->Passed\n",
Static_Connection_Info[i].pRasConnection0.dwConnectDuration, pRasConnection0->dwConnectDuration);
WriteFile(ErrLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
if (Static_Connection_Info[i].pRasConnection0.dwInterfaceType != pRasConnection0->dwInterfaceType)
sprintf(buf,"ERROR Interface Type differs %d-> Stored, %d->Passed\n",
Static_Connection_Info[i].pRasConnection0.dwInterfaceType != pRasConnection0->dwInterfaceType);
WriteFile(ErrLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
if (Static_Connection_Info[i].pRasConnection0.dwConnectionFlags != pRasConnection0->dwConnectionFlags)
sprintf(buf,"ERROR Connection Flags differs %d-> Stored, %d->Passed\n",
Static_Connection_Info[i].pRasConnection0.dwConnectionFlags, pRasConnection0->dwConnectionFlags);
WriteFile(ErrLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
if (wcscmp(Static_Connection_Info[i].pRasConnection0.wszInterfaceName,pRasConnection0->wszInterfaceName) == 0)
sprintf(buf,"ERROR Interface Name Differs %ws ->Stored, %ws ->Passed\n",
Static_Connection_Info[i].pRasConnection0.wszInterfaceName,pRasConnection0->wszInterfaceName);
WriteFile(ErrLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
if (wcscmp(Static_Connection_Info[i].pRasConnection0.wszUserName,pRasConnection0->wszUserName) != 0)
sprintf(buf,"ERROR User Name Differs %ws ->Stored, %ws ->Passed\n",
Static_Connection_Info[i].pRasConnection0.wszUserName,pRasConnection0->wszUserName);
WriteFile(ErrLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
if (wcscmp(Static_Connection_Info[i].pRasConnection0.wszLogonDomain,pRasConnection0->wszLogonDomain) != 0)
sprintf(buf,"ERROR Logon Name Differs %ws ->Stored, %ws ->Passed\n",
Static_Connection_Info[i].pRasConnection0.wszLogonDomain,pRasConnection0->wszLogonDomain);
WriteFile(ErrLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
if (wcscmp(Static_Connection_Info[i].pRasConnection0.wszRemoteComputer,pRasConnection0->wszRemoteComputer) != 0)
sprintf(buf,"ERROR Remote Name Differs %ws ->Stored, %ws ->Passed\n",
Static_Connection_Info[i].pRasConnection0.wszRemoteComputer,pRasConnection0->wszRemoteComputer);
}
}
FlushFileBuffers(ErrLogFile);
FlushFileBuffers(ConDisFile);
}
}
VOID Debug_Print_RasConnection(
IN RAS_CONNECTION_0 * pRasConnection0,
IN RAS_CONNECTION_1 * pRasConnection1
)
{
WCHAR *Interface_Type[] =
{
TEXT("ROUTER_IF_TYPE_CLIENT"),
TEXT("ROUTER_IF_TYPE_HOME_ROUTER"),
TEXT("ROUTER_IF_TYPE_FULL_ROUTER"),
TEXT("ROUTER_IF_TYPE_DEDICATED"),
TEXT("ROUTER_IF_TYPE_INTERNAL"),
TEXT("ROUTER_IF_TYPE_INTERNAL")
};
INT i = 0;
DWORD dwBytesWritten = 0;
//dumping pRasConnection0
DbgPrint("pRasConnection0->hConnection %d\n",pRasConnection0->hConnection);
DbgPrint("pRasConnection0->hInterface %d\n",pRasConnection0->hInterface);
DbgPrint("pRasConnection0->dwConnectDuration %d\n",pRasConnection0->dwConnectDuration);
DbgPrint("pRasConnection0->dwInterfaceType %ws\n",Interface_Type[pRasConnection0->dwInterfaceType]);
DbgPrint("pRasConnection0->dwConnectionFlags %d\n",pRasConnection0->dwConnectionFlags);
DbgPrint("pRasConnection0->wszInterfaceName %ws\n",pRasConnection0->wszInterfaceName);
DbgPrint("pRasConnection0->wszUserName %ws\n",pRasConnection0->wszUserName);
DbgPrint("pRasConnection0->wszLogonDomain %ws\n",pRasConnection0->wszLogonDomain);
DbgPrint("pRasConnection0->wszRemoteComputer %ws\n",pRasConnection0->wszRemoteComputer);
//dumping pRasConnection1
DbgPrint( "\n\npRasConnection1->hConnection %d\n",pRasConnection1->hConnection);
DbgPrint( "pRasConnection1->hInterface %d\n",pRasConnection1->hInterface);
DbgPrint( "pRasConnection1->PppInfo.nbf.dwError %d\n",pRasConnection1->PppInfo.nbf.dwError);
DbgPrint( "pRasConnection1->PppInfo.nbf.wszWksta %ws\n",pRasConnection1->PppInfo.nbf.wszWksta);
DbgPrint( "pRasConnection1->PppInfo.ip.dwError %d\n",pRasConnection1->PppInfo.ip.dwError);
DbgPrint( "pRasConnection1->PppInfo.ip.wszAddress %ws\n",pRasConnection1->PppInfo.ip.wszAddress);
DbgPrint( "pRasConnection1->PppInfo.ip.wszRemoteAddress %ws\n",pRasConnection1->PppInfo.ip.wszRemoteAddress);
DbgPrint( "pRasConnection1->PppInfo.ipx.dwError %d\n",pRasConnection1->PppInfo.ipx.dwError);
DbgPrint( "pRasConnection1->PppInfo.ipx.wszAddress %ws\n",pRasConnection1->PppInfo.ipx.wszAddress);
DbgPrint( "pRasConnection1->PppInfo.at.dwError %d\n",pRasConnection1->PppInfo.at.dwError );
DbgPrint( "pRasConnection1->PppInfo.at.wszAddress %ws\n",pRasConnection1->PppInfo.at.wszAddress);
//connection stats
DbgPrint( "pRasConnection1->dwBytesXmited=%d\n", pRasConnection1->dwBytesXmited );
DbgPrint( "pRasConnection1->dwBytesRcved=%d\n", pRasConnection1->dwBytesRcved );
DbgPrint( "pRasConnection1->dwFramesXmited=%d\n", pRasConnection1->dwFramesXmited );
DbgPrint( "pRasConnection1->dwFramesRcved=%d\n", pRasConnection1->dwFramesRcved);
DbgPrint( "pRasConnection1->dwCrcErr=%d\n", pRasConnection1->dwCrcErr);
DbgPrint( "pRasConnection1->dwTimeoutErr=%d\n", pRasConnection1->dwTimeoutErr);
DbgPrint( "pRasConnection1->dwAlignmentErr=%d\n", pRasConnection1->dwAlignmentErr);
DbgPrint( "pRasConnection1->dwHardwareOverrunErr=%d\n", pRasConnection1->dwHardwareOverrunErr);
DbgPrint( "pRasConnection1->dwFramingErr=%d\n", pRasConnection1->dwFramingErr);
DbgPrint( "pRasConnection1->dwBufferOverrunErr=%d\n", pRasConnection1->dwBufferOverrunErr);
}
VOID File_Print_RasConnection(IN RAS_CONNECTION_0 * pRasConnection0,
IN RAS_CONNECTION_1 * pRasConnection1
)
{
WCHAR *Interface_Type[] =
{
TEXT("ROUTER_IF_TYPE_CLIENT"),
TEXT("ROUTER_IF_TYPE_HOME_ROUTER"),
TEXT("ROUTER_IF_TYPE_FULL_ROUTER"),
TEXT("ROUTER_IF_TYPE_DEDICATED"),
TEXT("ROUTER_IF_TYPE_INTERNAL"),
TEXT("ROUTER_IF_TYPE_INTERNAL")
};
INT i = 0;
CHAR buf[512];
DWORD dwBytesWritten = 0;
//write to file
//dumping pRasConnection0
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasConnection0->hConnection %d\n",pRasConnection0->hConnection);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasConnection0->hInterface %d\n",pRasConnection0->hInterface);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasConnection0->dwConnectDuration %d\n",pRasConnection0->dwConnectDuration);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasConnection0->dwInterfaceType %ws\n",Interface_Type[pRasConnection0->dwInterfaceType]);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasConnection0->dwConnectionFlags %d\n",pRasConnection0->dwConnectionFlags);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasConnection0->wszInterfaceName %ws\n",pRasConnection0->wszInterfaceName);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasConnection0->wszUserName %ws\n",pRasConnection0->wszUserName);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasConnection0->wszLogonDomain %ws\n",pRasConnection0->wszLogonDomain);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasConnection0->wszRemoteComputer %ws\n",pRasConnection0->wszRemoteComputer);
//dumping pRasConnection1
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"dumping pRasConnection1\n");
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "\n\npRasConnection1->hConnection %d\n",pRasConnection1->hConnection);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->hInterface %d\n",pRasConnection1->hInterface);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->PppInfo.nbf.dwError %d\n",pRasConnection1->PppInfo.nbf.dwError);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->PppInfo.nbf.wszWksta %ws\n",pRasConnection1->PppInfo.nbf.wszWksta);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->PppInfo.ip.dwError %d\n",pRasConnection1->PppInfo.ip.dwError);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->PppInfo.ip.wszAddress %ws\n",pRasConnection1->PppInfo.ip.wszAddress);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->PppInfo.ip.wszRemoteAddress %ws\n",pRasConnection1->PppInfo.ip.wszRemoteAddress);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->PppInfo.ipx.dwError %d\n",pRasConnection1->PppInfo.ipx.dwError);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->PppInfo.ipx.wszAddress %ws\n",pRasConnection1->PppInfo.ipx.wszAddress);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->PppInfo.at.dwError %d\n",pRasConnection1->PppInfo.at.dwError );
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->PppInfo.at.wszAddress %ws\n",pRasConnection1->PppInfo.at.wszAddress);
//connection stats
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->dwBytesXmited=%d\n", pRasConnection1->dwBytesXmited );
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->dwBytesRcved=%d\n", pRasConnection1->dwBytesRcved );
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->dwFramesXmited=%d\n", pRasConnection1->dwFramesXmited );
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->dwFramesRcved=%d\n", pRasConnection1->dwFramesRcved);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->dwCrcErr=%d\n", pRasConnection1->dwCrcErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->dwTimeoutErr=%d\n", pRasConnection1->dwTimeoutErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->dwAlignmentErr=%d\n", pRasConnection1->dwAlignmentErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->dwHardwareOverrunErr=%d\n", pRasConnection1->dwHardwareOverrunErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->dwFramingErr=%d\n", pRasConnection1->dwFramingErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasConnection1->dwBufferOverrunErr=%d\n", pRasConnection1->dwBufferOverrunErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
}
VOID Debug_Print_RasPort(
IN RAS_PORT_0 * pRasPort0,
IN RAS_PORT_1 * pRasPort1
)
{
WCHAR *Line_Condition[] =
{
TEXT("RAS_PORT_NON_OPERATIONAL"),
TEXT("RAS_PORT_DISCONNECTED"),
TEXT("RAS_PORT_CALLING_BACK"),
TEXT("RAS_PORT_LISTENING"),
TEXT("RAS_PORT_AUTHENTICATING"),
TEXT("RAS_PORT_AUTHENTICATED"),
TEXT("RAS_PORT_INITIALIZING")
};
WCHAR *Hdw_Error[] =
{
TEXT("RAS_HARDWARE_OPERATIONAL"),
TEXT("RAS_HARDWARE_FAILURE")
};
DWORD dwBytesWritten = 0;
//dumping pRasPort0
DbgPrint("pRasPort0->hPort %d\n",pRasPort0->hPort);
DbgPrint("pRasPort0->hConnection %d\n",pRasPort0->hConnection);
DbgPrint("pRasPort0->dwPortCondition %ws\n",Line_Condition[pRasPort0->dwPortCondition-1]);
DbgPrint("pRasPort0->dwTotalNumberOfCalls %d\n",pRasPort0->dwTotalNumberOfCalls);
DbgPrint("pRasPort0->dwConnectDuration %d\n",pRasPort0->dwConnectDuration);
DbgPrint("pRasPort0->wszPortName %ws\n",pRasPort0->wszPortName);
DbgPrint("pRasPort0->wszMediaName %ws\n",pRasPort0->wszMediaName);
DbgPrint("pRasPort0->wszDeviceName %ws\n",pRasPort0->wszDeviceName);
DbgPrint("pRasPort0->wszDeviceType %ws\n",pRasPort0->wszDeviceType);
//dumping pRasPort1
DbgPrint("pRasPort1->hPort %d\n",pRasPort1->hPort);
DbgPrint("pRasPort1->hConnection %d\n",pRasPort1->hConnection);
DbgPrint("pRasPort1->dwHardwareCondition %ws\n",Hdw_Error[pRasPort1->dwHardwareCondition]);
//connection stats
DbgPrint( "pRasPort1->dwLineSpeed=%d\n", pRasPort1->dwLineSpeed );
DbgPrint( "pRasPort1->dwBytesXmited=%d\n", pRasPort1->dwBytesXmited );
DbgPrint( "pRasPort1->dwBytesRcved=%d\n", pRasPort1->dwBytesRcved );
DbgPrint( "pRasPort1->dwFramesXmited=%d\n", pRasPort1->dwFramesXmited );
DbgPrint( "pRasPort1->dwFramesRcved=%d\n", pRasPort1->dwFramesRcved);
DbgPrint( "pRasPort1->dwCrcErr=%d\n", pRasPort1->dwCrcErr);
DbgPrint( "pRasPort1->dwTimeoutErr=%d\n", pRasPort1->dwTimeoutErr);
DbgPrint( "pRasPort1->dwAlignmentErr=%d\n", pRasPort1->dwAlignmentErr);
DbgPrint( "pRasPort1->dwHardwareOverrunErr=%d\n", pRasPort1->dwHardwareOverrunErr);
DbgPrint( "pRasPort1->dwFramingErr=%d\n", pRasPort1->dwFramingErr);
DbgPrint( "pRasPort1->dwBufferOverrunErr=%d\n", pRasPort1->dwBufferOverrunErr);
}
VOID File_Print_RasPort(
IN RAS_PORT_0 * pRasPort0,
IN RAS_PORT_1 * pRasPort1
)
{
WCHAR *Line_Condition[] =
{
TEXT("RAS_PORT_NON_OPERATIONAL"),
TEXT("RAS_PORT_DISCONNECTED"),
TEXT("RAS_PORT_CALLING_BACK"),
TEXT("RAS_PORT_LISTENING"),
TEXT("RAS_PORT_AUTHENTICATING"),
TEXT("RAS_PORT_AUTHENTICATED"),
TEXT("RAS_PORT_INITIALIZING")
};
WCHAR *Hdw_Error[] =
{
TEXT("RAS_HARDWARE_OPERATIONAL"),
TEXT("RAS_HARDWARE_FAILURE")
};
CHAR buf[512];
DWORD dwBytesWritten = 0;
//dumping pRasPort0 to a file
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort0->hPort %d\n",pRasPort0->hPort);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort0->hConnection %d\n",pRasPort0->hConnection);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort0->dwPortCondition %ws\n",Line_Condition[pRasPort0->dwPortCondition-1]);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort0->dwTotalNumberOfCalls %d\n",pRasPort0->dwTotalNumberOfCalls);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort0->dwConnectDuration %d\n",pRasPort0->dwConnectDuration);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort0->wszPortName %ws\n",pRasPort0->wszPortName);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort0->wszMediaName %ws\n",pRasPort0->wszMediaName);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort0->wszDeviceName %ws\n",pRasPort0->wszDeviceName);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort0->wszDeviceType %ws\n",pRasPort0->wszDeviceType);
//dumping pRasPort1
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"\n dumping pRasPort1\n");
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort1->hPort %d\n",pRasPort1->hPort);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort1->hConnection %d\n",pRasPort1->hConnection);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf,"pRasPort1->dwHardwareCondition %ws\n",Hdw_Error[pRasPort1->dwHardwareCondition]);
//connection stats
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwLineSpeed=%d\n", pRasPort1->dwLineSpeed );
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwBytesXmited=%d\n", pRasPort1->dwBytesXmited );
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwBytesRcved=%d\n", pRasPort1->dwBytesRcved );
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwFramesXmited=%d\n", pRasPort1->dwFramesXmited );
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwFramesRcved=%d\n", pRasPort1->dwFramesRcved);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwCrcErr=%d\n", pRasPort1->dwCrcErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwTimeoutErr=%d\n", pRasPort1->dwTimeoutErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwAlignmentErr=%d\n", pRasPort1->dwAlignmentErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwHardwareOverrunErr=%d\n", pRasPort1->dwHardwareOverrunErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwFramingErr=%d\n", pRasPort1->dwFramingErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
sprintf(buf, "pRasPort1->dwBufferOverrunErr=%d\n", pRasPort1->dwBufferOverrunErr);
WriteFile(ConDisFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
}