ADMINDLL.C
/****************************************************************************** 
*       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); 
 
}