ADMAPI.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:42k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /******************************************************************************
  2. *       This is a part of the Microsoft Source Code Samples. 
  3. *       Copyright (C) 1992-1997 Microsoft Corporation.
  4. *       All rights reserved. 
  5. *       This sample source code is only intended as a supplement to 
  6. *       RasAdmin API usage and is meant to help user with
  7. *       RasAdmin API Calling convention. Use this code at your own risk. 
  8. *       Microsoft disclaims any implied warranty. This sample code can
  9. *       be copied and distributed.
  10.  
  11. ******************************************************************************/
  12. /********************************************************************
  13. *  admapit.c -- Sample program demonstrating the use of different
  14. *                     RasAdmin API
  15. *                                                                    
  16. *  Comments:                                                 
  17. *                   RasAdmin expects \Servername  as it's arguments.
  18. * RasAdminGetErrorString API returns error string. However 
  19. * this API may return an Error 87 (Invalid Parameter) for the Non 
  20. * RAS Error codes. This API is design for  only Ras related error codes. 
  21. * For more Info. check the documentation. I am using this API to for all the 
  22. * errors but I print the error codes before calling this API 
  23. *****************************************************************************/
  24. /***************************************************************************
  25. *  Functions:
  26. *      Init2(void);
  27. *      Init1(void);
  28. *      PrintGetStringError(DWORD dwResult);
  29. *      ServerGetInfo(WCHAR *RasSrv);
  30. *      PrintPriv(void);
  31. *      UserPrivilege(void);
  32. *      PrintClearStats(WCHAR * RasSrv, WCHAR *wszPortName);
  33. *      RasAdminClearDisc(LPVOID param);
  34. *****************************************************************************/
  35. #define sleeptime 60000
  36. #include <windows.h>
  37. #include <stdlib.h>
  38. #include <string.h>
  39. #include <stdlib.h>
  40. #include <lm.h>
  41. #include <stdio.h>
  42. #include <time.h>
  43. #include <ctype.h>
  44. #include <conio.h>
  45. #include <rassapi.h>
  46. #include <memory.h>
  47. WCHAR*
  48. StrDupWFromA(
  49.     CHAR* psz );
  50. #define Number_Of_Flags 6
  51. HANDLE LogFile = NULL;
  52. HANDLE cLogFile = NULL;
  53. HANDLE ErrLogFile = NULL;
  54. VOID File_Print(RAS_PORT_1 *            pRasPort1,
  55.     RAS_PORT_STATISTICS *   pRasStats,
  56.     RAS_PARAMETERS *        pRasParams
  57. );
  58. VOID Debug_Print(RAS_PORT_1 *            pRasPort1,
  59.     RAS_PORT_STATISTICS *   pRasStats,
  60.     RAS_PARAMETERS *        pRasParams
  61. );
  62. VOID Init2(void);
  63. VOID Init1(void);
  64. VOID PrintGetStringError(DWORD dwResult);
  65. INT ServerGetInfo(WCHAR *RasSrv);
  66. VOID PrintPriv(void);
  67. VOID UserPrivilege(void);
  68. VOID PrintClearStats(WCHAR * RasSrv, WCHAR *wszPortName);
  69. DWORD WINAPI RasAdminClearDisc(LPVOID param);
  70. PRAS_PORT_1             pRasPort1;
  71. PRAS_PORT_STATISTICS    pRasStats;
  72. RAS_PARAMETERS *        pRasParams;
  73. PRAS_SERVER_0           pRasServer0;
  74. PRAS_PORT_0             pRasPort0;
  75. RAS_PORT_1             RasPort1;
  76. RAS_PORT_STATISTICS    RasStats;
  77. RAS_SERVER_0           RasServer0;
  78. BOOL First_Call = TRUE;
  79. DWORD Status =0;
  80. DWORD dwResult = 0;
  81. DWORD dwBytesWritten=0;
  82. CHAR szBuf[120];
  83. BOOL ErrLogInValid = FALSE;
  84. BOOL cErrLogInValid = FALSE;
  85. BOOL LogInValid = TRUE;
  86. WCHAR szUserAccountServer[UNLEN+1];
  87. PRAS_USER_0 ppRasUser0;
  88. RAS_USER_0 RasUser0;
  89. WCHAR lpszServerName[50];
  90. WCHAR RasSrv[64];
  91. BOOL Quit=FALSE;
  92. /*************************************************************************/
  93. /***************** Start Main ********************************************/
  94. /*************************************************************************/
  95. WCHAR*
  96. StrDupWFromA(
  97.     CHAR* psz )
  98.     /* Returns heap block containing a copy of 0-terminated string 'psz' or
  99.     ** NULL on error or if 'psz' is NULL.  The output string is converted to
  100.     ** UNICODE.  It is caller's responsibility to Free the returned string.
  101.     */
  102. {
  103.     WCHAR* pszNew = NULL;
  104.     if (psz)
  105.     {
  106. DWORD cb;
  107. cb = MultiByteToWideChar( CP_ACP, 0, psz, -1, NULL, 0 );
  108. pszNew = malloc( cb * sizeof(TCHAR) );
  109. if (!pszNew)
  110. {
  111.     return NULL;
  112. }
  113. cb = MultiByteToWideChar( CP_ACP, 0, psz, -1, pszNew, cb );
  114. if (cb == 0)
  115. {
  116.     free( pszNew );
  117.     return NULL;
  118. }
  119.     }
  120.     return pszNew;
  121. }
  122. // Format and write debug information to OutputDebugString
  123. ULONG
  124. _cdecl
  125. DbgPrint(
  126.     PCH Format,
  127.     ...
  128.     )
  129. {   
  130.     CHAR szbuffer[255];
  131.     WCHAR buffer[255];
  132.     WCHAR *temp=NULL;
  133.     LPINT lpResult=0;
  134.     va_list marker;
  135.     va_start (marker,Format);
  136.     if (IsTextUnicode(Format, sizeof(Format),lpResult))
  137. {
  138. temp=StrDupWFromA(Format);
  139.      wvsprintfW (buffer,temp, marker);
  140.      OutputDebugString (buffer);
  141.       free(temp);
  142. }
  143.     else
  144. {
  145.      wvsprintfA (szbuffer,Format, marker);
  146.      temp=StrDupWFromA(szbuffer);
  147.      OutputDebugString (temp);
  148.      free(temp);
  149.      }
  150.     return TRUE;
  151. }
  152. // Init Functions
  153. VOID Init1(void)
  154. {
  155. //Stores port  information in this file
  156. LogInValid = FALSE;
  157.      LogFile = CreateFile(TEXT("Admin.log"),
  158. GENERIC_READ|GENERIC_WRITE,
  159. FILE_SHARE_READ,
  160. (LPSECURITY_ATTRIBUTES) NULL,
  161. CREATE_ALWAYS,
  162. 0,
  163.        (HANDLE) NULL);
  164.      if (LogFile== INVALID_HANDLE_VALUE) {
  165. LogInValid = TRUE;
  166.     }
  167. }
  168. VOID Init2(void)
  169. {
  170. cErrLogInValid = FALSE;
  171. ErrLogInValid = FALSE;
  172. //Stores Statistics and port disconnect information in this file
  173.      cLogFile = CreateFile(TEXT("AdminStats.log"),
  174. GENERIC_READ|GENERIC_WRITE,
  175. FILE_SHARE_READ,
  176. (LPSECURITY_ATTRIBUTES) NULL,
  177. CREATE_ALWAYS,
  178. 0,
  179.        (HANDLE) NULL);
  180.      if (cLogFile== INVALID_HANDLE_VALUE) {
  181. cErrLogInValid = TRUE;
  182.     }
  183. //Stores Privlege changes information of a user in this file
  184.      ErrLogFile = CreateFile(TEXT("AdminUser.log"),
  185. GENERIC_READ|GENERIC_WRITE,
  186. FILE_SHARE_READ,
  187. (LPSECURITY_ATTRIBUTES) NULL,
  188. CREATE_ALWAYS,
  189. 0,
  190.        (HANDLE) NULL);
  191.      if (ErrLogFile== INVALID_HANDLE_VALUE) {
  192. ErrLogInValid = TRUE;
  193.     }
  194.     
  195. }
  196. //Function to Print Error Strings
  197. VOID PrintGetStringError(DWORD dwResult)
  198. {
  199. CHAR szBuf[120];
  200. DWORD dwBytesWritten=0;
  201.      DbgPrint("ERROR  RasAdminGetErrorString      %dn",dwResult);
  202.      sprintf(szBuf, "ERROR  RasAdminGetErrorString      %dn",dwResult);     
  203.      WriteFile(LogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  204. }
  205. // Function to get Server  Info.
  206. INT ServerGetInfo(WCHAR *RasSrv)
  207. {
  208. DWORD Status;
  209. DWORD dwResult;
  210. CHAR szBuf[120];
  211. DWORD dwBytesWritten=0;
  212. WCHAR Buf[512];
  213. WCHAR *lpszString;
  214. lpszString=&Buf[0];
  215. // Calling RasAdminServerGetInfo 
  216. // Paramters:
  217. // IN   WCHAR * lpszServerName              //name of the RAS Server
  218. // OUT PRAS_SERVER_0 pRasServer0    // Pointer to server inf.
  219. Status=RasAdminServerGetInfo(RasSrv, pRasServer0);
  220. if (Status != ERROR_SUCCESS)
  221.    {
  222. sprintf(szBuf, "ERROR RasAdminServerGetInfo   %dn",Status);
  223. dwResult = RasAdminGetErrorString((UINT) Status, lpszString, 512);
  224. if (dwResult == ERROR_SUCCESS)
  225.     {
  226.     DbgPrint("ERROR  RasAdminServerGetInfo      %wsn",lpszString);
  227.      sprintf(szBuf, "ERROR  RasAdminServerGetInfo      %wsn",lpszString);     
  228.   WriteFile(LogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  229.     }
  230.  else
  231.     PrintGetStringError(dwResult);
  232.       return(1);
  233.    }
  234. else
  235.    {
  236.     sprintf(szBuf, "TotalPorts =  %d   PortsInUse = %d   RasVersion = %d  n",
  237.        pRasServer0->TotalPorts, pRasServer0->PortsInUse, pRasServer0->RasVersion);     
  238.     WriteFile(LogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  239.    }
  240. return(0);
  241. }
  242. // Function to print Privileges of a user
  243. VOID PrintPriv(void)
  244. {
  245. DWORD Permission;
  246. DWORD dwBytesWritten=0;
  247. CHAR szBuf[120];
  248.      sprintf(szBuf,"n User Privilegesn");
  249.      WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  250.      sprintf(szBuf,"Account Server Name= %ws     UserName= %wsn",szUserAccountServer, pRasPort1->rasport0.wszUserName);
  251.      WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  252.      sprintf(szBuf," Priviledge   %dn",ppRasUser0->bfPrivilege);
  253.      WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  254.      Permission = ppRasUser0->bfPrivilege - (ppRasUser0->bfPrivilege & RASPRIV_DialinPrivilege);
  255.      sprintf(szBuf,"CallBack Permission %dn",Permission);
  256.      WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  257. }
  258. //Function to get and change User Dialin Privileges. It goes through all the Dialin Privileges for a user.
  259. VOID UserPrivilege(void)
  260. {
  261. DWORD dwResult;
  262. CHAR szBuf[120];
  263. DWORD dwBytesWritten=0;
  264. WCHAR Buf[512];
  265. WCHAR *lpszString;
  266. static DWORD LoopPriv=0;
  267. static BYTE Dialin=1;
  268. lpszString=&Buf[0];
  269. // API Called:     RasAdminGetUserAccountServer
  270. // Parameters:
  271. //  IN WCHAR * lpszDomainName
  272. // IN WCHAR * lpszServerName
  273. // OUT WCHAR * lpszUserAccountServer
  274.    if (pRasPort1->rasport0.fAdvancedServer > 0)
  275.      {
  276.       dwResult = RasAdminGetUserAccountServer(pRasPort1->rasport0.wszLogonDomain, 
  277.  NULL, &szUserAccountServer[0]);
  278.      }
  279.   else 
  280.       {  
  281.       wcscpy(lpszServerName, RasSrv);
  282.       dwResult = RasAdminGetUserAccountServer(NULL, &lpszServerName[0], &szUserAccountServer[0]);
  283.       }
  284. // API Called:     RasAdmimUserGetInfo
  285. // Parameters:
  286. //  IN WCHAR * lpszUserAccountServer
  287. // IN WCHAR * lpszUserName
  288. // OUT RAS_USER_0 * ppRasUser0
  289.   if (dwResult == ERROR_SUCCESS)
  290.      {
  291.      dwResult = RasAdminUserGetInfo(szUserAccountServer, pRasPort1->rasport0.wszUserName, ppRasUser0);
  292.      if (dwResult == ERROR_SUCCESS)
  293.  {
  294.   PrintPriv();
  295.  }
  296.      else
  297. {
  298. sprintf(szBuf,"RasAdminUserGetInfo     %dn",dwResult);
  299. WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  300. dwResult = RasAdminGetErrorString((UINT) dwResult, lpszString, 512);
  301. if (dwResult == ERROR_SUCCESS)
  302.     {
  303.     sprintf(szBuf, "ERROR  RasAdminUserGetInfo      %wsn",lpszString);     
  304.     WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  305.     }
  306. else
  307.     PrintGetStringError(dwResult);
  308. }
  309.       if (LoopPriv > 3) 
  310. {LoopPriv =0; Dialin = 1;}
  311.       if (LoopPriv < 4)
  312.  {
  313.   if (LoopPriv == 3) wcscpy(ppRasUser0->szPhoneNumber, TEXT("99999999"));
  314.   if (LoopPriv == 0) {ppRasUser0->bfPrivilege =  Dialin;Dialin = Dialin * 2;LoopPriv++;}
  315.   else {ppRasUser0->bfPrivilege = (RASPRIV_DialinPrivilege | Dialin  );
  316. Dialin = Dialin * 2 ;
  317. LoopPriv++;}
  318.  }
  319. // API Called:     RasAdmimUserSetInfo
  320. // Parameters:
  321. //  IN WCHAR * lpszUserAccountServer
  322. // IN WCHAR * lpszUserName
  323. // IN RAS_USER_0 * ppRasUser0
  324.   
  325.      dwResult = RasAdminUserSetInfo(szUserAccountServer, pRasPort1->rasport0.wszUserName,ppRasUser0);
  326.      if (dwResult != ERROR_SUCCESS)
  327. {
  328. sprintf(szBuf,"ERROR: RasAdminUserSetInfo     %dn",dwResult);
  329. WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  330. dwResult = RasAdminGetErrorString((UINT) dwResult, lpszString, 512);
  331. if (dwResult == ERROR_SUCCESS)
  332.     {
  333.      sprintf(szBuf, "ERROR  RasAdminUserSetInfo      %wsn",lpszString);     
  334.      WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  335.     }
  336.  else
  337.     PrintGetStringError(dwResult);
  338.  }
  339. // API Called:     RasAdmimUserSetInfo
  340. // Parameters:
  341. //  IN WCHAR * lpszUserAccountServer
  342. // IN WCHAR * lpszUserName
  343. // IN RAS_USER_0 * ppRasUser0
  344.      if (LoopPriv == 0) 
  345.      {
  346.       ppRasUser0->bfPrivilege = (ppRasUser0->bfPrivilege | RASPRIV_DialinPrivilege);
  347.       dwResult = RasAdminUserSetInfo(szUserAccountServer, pRasPort1->rasport0.wszUserName, ppRasUser0);
  348. if (dwResult == ERROR_SUCCESS)
  349.    {
  350.    PrintPriv();
  351.    }
  352. else
  353.    {
  354.    sprintf(szBuf,"RasAdminUserSetInfo     %dn",dwResult);
  355.    WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  356.    dwResult = RasAdminGetErrorString((UINT) dwResult, lpszString, 512);
  357.    if (dwResult == ERROR_SUCCESS)
  358.       {
  359.       sprintf(szBuf, "ERROR  RasAdminUserSetInfo      %wsn",lpszString);     
  360.       WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  361.       }
  362.    else
  363.       PrintGetStringError(dwResult);
  364.    }
  365.      }
  366. // API Called:     RasAdmimUserGetInfo
  367. // Parameters:
  368. //  IN WCHAR * lpszUserAccountServer
  369. // IN WCHAR * lpszUserName
  370. // OUT RAS_USER_0 * ppRasUser0
  371.  dwResult = RasAdminUserGetInfo(szUserAccountServer, pRasPort1->rasport0.wszUserName, ppRasUser0);
  372.  if (dwResult != ERROR_SUCCESS)
  373.      {
  374.     sprintf(szBuf,"ERROR: RasAdminUserGetInfo     %dn",dwResult);
  375.     WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  376.     dwResult = RasAdminGetErrorString((UINT) dwResult, lpszString, 512);
  377.     if (dwResult == ERROR_SUCCESS)
  378.        {
  379.        sprintf(szBuf, "ERROR  RasAdminUserGetInfo      %wsn",lpszString);     
  380.        WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  381.        }
  382.     else
  383.       PrintGetStringError(dwResult);
  384.     }
  385.      }
  386.   else
  387.     {
  388.     DbgPrint("RasAdminGetUserAccountServer     %dn",dwResult);
  389.     dwResult = RasAdminGetErrorString((UINT)dwResult, lpszString, 512);
  390.      if (dwResult == ERROR_SUCCESS)
  391.   {
  392.   sprintf(szBuf, "ERROR  RasAdminUserAccountServer      %wsn",lpszString);     
  393.   WriteFile(ErrLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  394.   }
  395.       else
  396.  PrintGetStringError(dwResult);
  397.     }
  398. }
  399. //To print port information, statistics and rasparams on debugger.
  400. VOID Debug_Print(RAS_PORT_1 *            pRasPort1,
  401.     RAS_PORT_STATISTICS *   pRasStats,
  402.     RAS_PARAMETERS *        pRasParams
  403. )
  404. {
  405. TCHAR *Media_Name[] = {TEXT("MEDIA_UNKNOWN"),TEXT( "MEDIA_SERIAL"),
  406.   TEXT("MEDIA_RAS10_SERIAL"),TEXT( "MEDIA_ISDN")};
  407. TCHAR *Flag_Name[] = {TEXT("USER_AUTHENTICATED"),TEXT( "MESSENGER_PRESENT"),
  408.  TEXT("PPP_CLIENT"),TEXT("GATEWAY_ACTIVE"),TEXT("REMOTE_LISTEN"),TEXT("PORT_MULTILINKED")};
  409. TCHAR *Line_Condition[]={TEXT("RAS_PORT_NON_OPERATIONAL"),TEXT("RAS_PORT_DISCONNECTED"),
  410.   TEXT("RAS_PORT_CALLING_BACK"),TEXT("RAS_PORT_LISTENING"),TEXT("RAS_PORT_AUTHENTICATING"),
  411.   TEXT("RAS_PORT_AUTHENTICATED"),TEXT("RAS_PORT_INITIALIZING")};
  412. TCHAR *Hdw_Error[]={TEXT("RAS_MODEM_OPERATIONAL"),TEXT("RAS_MODEM_NOT_RESPONDING"),TEXT("RAS_MODEM_HARDWARE_FAILURE"),
  413.   TEXT("RAS_MODEM_INCORRECT_RESPONSE"),TEXT("RAS_MODEM_UNKNOWN")};
  414. INT  i=0;
  415. INT temp = 0;
  416. INT temp1 =0;
  417. DWORD dwsize=0;
  418. CHAR szBuf[100];
  419. DWORD dwBytesWritten=0;
  420.     DbgPrint( "pRasPort1->rasport0.wszPortName=%wsn",
  421. pRasPort1->rasport0.wszPortName );
  422.     DbgPrint( "pRasPort1->rasport0.wszDeviceType=%wsn",
  423.     pRasPort1->rasport0.wszDeviceType );
  424.     DbgPrint( "pRasPort1->rasport0.wszDeviceName=%wsn",
  425.     pRasPort1->rasport0.wszDeviceName );
  426.     DbgPrint( "pRasPort1->rasport0.wszMediaName=%wsn",
  427. pRasPort1->rasport0.wszMediaName );
  428.     DbgPrint( "pRasPort1->rasport0.reserved=%dn",
  429.     pRasPort1->rasport0.reserved );
  430.     DbgPrint("                 %sn",Media_Name[pRasPort1->rasport0.reserved]);
  431.     DbgPrint( "pRasPort1->rasport0.Flags=%dn",
  432. pRasPort1->rasport0.Flags );
  433. //printing Flags
  434.     temp1 = 1;
  435.     for (i=0; i <= Number_Of_Flags; i++)
  436.  {
  437.  temp = (pRasPort1->rasport0.Flags & temp1);
  438.  if (temp)
  439.      {
  440.        DbgPrint("Flag       %s   n",Flag_Name[i]);
  441.      }
  442.   temp1 = temp1*2;
  443.  }
  444.     DbgPrint( "pRasPort1->rasport0.wszUserName=%wsn",
  445. pRasPort1->rasport0.wszUserName );
  446.     DbgPrint( "pRasPort1->rasport0.wszComputer=%wsn",
  447. pRasPort1->rasport0.wszComputer );
  448.     DbgPrint( "pRasPort1->rasport0.dwStartSessionTime;=%dn",
  449.     pRasPort1->rasport0.dwStartSessionTime );
  450.     sprintf(szBuf,"Formatted session start time/date :  %sn",ctime(&pRasPort1->rasport0.dwStartSessionTime));
  451.     DbgPrint("%s",szBuf);
  452.     DbgPrint( "pRasPort1->rasport0.wszLogonDomain=%wsn",
  453.     pRasPort1->rasport0.wszLogonDomain );
  454.     DbgPrint( "pRasPort1->rasport0.fAdvancedServer=%dn",
  455.     pRasPort1->rasport0.fAdvancedServer );
  456.     DbgPrint( "pRasPort1->LineCondition=%dn", pRasPort1->LineCondition );
  457.     DbgPrint("                     %sn",Line_Condition[pRasPort1->LineCondition-1]);
  458.     DbgPrint( "pRasPort1->HardwareCondition=%dn",pRasPort1->HardwareCondition);
  459.     DbgPrint("                     %sn",Hdw_Error[pRasPort1->HardwareCondition-1]);
  460.     DbgPrint( "pRasPort1->LineSpeed=%d   bits/secn",pRasPort1->LineSpeed);
  461.     DbgPrint( "pRasPort1->NumStatistics=%dn",pRasPort1->NumStatistics);
  462.     DbgPrint( "pRasPort1->NumMediaParms=%dn",pRasPort1->NumMediaParms);
  463.     DbgPrint( "pRasPort1->SizeMediaParms=%dn",pRasPort1->SizeMediaParms);
  464.     DbgPrint( "npRasPort1->ProjResult.nbf.dwError=%dn",
  465. pRasPort1->ProjResult.nbf.dwError );
  466.     if (pRasPort1->ProjResult.nbf.dwError == NO_ERROR)
  467.        {
  468. DbgPrint( "pRasPort1->ProjResult.nbf.dwNetBiosError=%dn",
  469.     pRasPort1->ProjResult.nbf.dwNetBiosError );
  470. DbgPrint( "pRasPort1->ProjResult.nbf.szName=%sn", 
  471.     pRasPort1->ProjResult.nbf.szName );
  472. DbgPrint( "pRasPort1->ProjResult.nbf.wszWksta=%wsn",
  473.     pRasPort1->ProjResult.nbf.wszWksta );
  474.       }
  475.    DbgPrint( "pRasPort1->ProjResult.ip.dwError=%dn", 
  476. pRasPort1->ProjResult.ip.dwError );
  477.    if (pRasPort1->ProjResult.ip.dwError == NO_ERROR)
  478.       { 
  479. DbgPrint( "pRasPort1->ProjResult.ip.wszAddress=%wsn",
  480. pRasPort1->ProjResult.ip.wszAddress );
  481.        }
  482.     DbgPrint( "pRasPort1->ProjResult.ipx.dwError=%dn",
  483. pRasPort1->ProjResult.ipx.dwError );
  484.     if (pRasPort1->ProjResult.ipx.dwError == NO_ERROR)
  485.       {
  486.      DbgPrint( "pRasPort1->ProjResult.ipx.wszAddress=%wsn",
  487. pRasPort1->ProjResult.ipx.wszAddress );
  488.       }
  489.     DbgPrint( "pRasPort1->ProjResult.at.dwError=%dn",
  490. pRasPort1->ProjResult.at.dwError );
  491.     if (pRasPort1->ProjResult.at.dwError == NO_ERROR)
  492.       {
  493.       DbgPrint( "pRasPort1->ProjResult.at.wszAddress=%wsn",
  494. pRasPort1->ProjResult.at.wszAddress );
  495.        }
  496.     DbgPrint( "ndwBytesXmited=%dn", pRasStats->dwBytesXmited );
  497.     DbgPrint( "dwBytesRcved=%dn", pRasStats->dwBytesRcved );
  498.     DbgPrint( "dwFramesXmited=%dn", pRasStats->dwFramesXmited );
  499.     DbgPrint( "dwFramesRcved=%dn", pRasStats->dwFramesRcved);
  500.     DbgPrint( "dwCrcErr=%dn", pRasStats->dwCrcErr);
  501.     DbgPrint( "dwTimeoutErr=%dn", pRasStats->dwTimeoutErr);
  502.     DbgPrint( "dwAlignmentErr=%dn", pRasStats->dwAlignmentErr);
  503.     DbgPrint( "dwHardwareOverrunErr=%dn", pRasStats->dwHardwareOverrunErr);
  504.     DbgPrint( "dwFramingErr=%dn", pRasStats->dwFramingErr);
  505.     DbgPrint( "dwBufferOverrunErr=%dn", pRasStats->dwBufferOverrunErr);
  506.     DbgPrint( "dwBytesXmitedUncompressed=%dn", 
  507.     pRasStats->dwBytesXmitedUncompressed);
  508.     DbgPrint( "dwBytesRcvedUncompressed=%dn", 
  509.     pRasStats->dwBytesRcvedUncompressed);
  510.     DbgPrint( "dwBytesXmitedCompressed=%dn", 
  511.     pRasStats->dwBytesXmitedCompressed);
  512.     DbgPrint( "dwBytesRcvedCompressed=%dn", 
  513.     pRasStats->dwBytesRcvedCompressed);
  514.     for (i=0; i<pRasPort1->NumMediaParms;i++)
  515.       {
  516.       DbgPrint( "pRasParams->P_Key= %sn",pRasParams[i].P_Key);
  517.       DbgPrint( "pRasParams->P_Type= %dn",pRasParams[i].P_Type);
  518.       if (pRasParams[i].P_Type == 1)
  519.   {
  520.   DbgPrint("pRasParams->P_Value.Length=%dn",pRasParams[i].P_Value.String.Length);
  521.   sprintf(szBuf,"                                                                n");
  522.   strncpy(szBuf, pRasParams[i].P_Value.String.Data, pRasParams[i].P_Value.String.Length);
  523.   DbgPrint("pRasParams->P_Value.Data= %sn",szBuf);
  524.   }
  525.       if (pRasParams[i].P_Type == 0)
  526.  {
  527.  DbgPrint("pRasParams->P_Value.Number=%dn", pRasParams[i].P_Value.Number);
  528.  }
  529.       DbgPrint( "pRasParams->P_Attributes= %dn",pRasParams[i].P_Attributes);
  530.       }
  531. }
  532. //Function to print Port Info, statistics and rasparam to a file
  533. VOID File_Print(RAS_PORT_1 *            pRasPort1,
  534.     RAS_PORT_STATISTICS *   pRasStats,
  535.     RAS_PARAMETERS *        pRasParams
  536. )
  537. {
  538. char *Media_Name[] = {"MEDIA_UNKNOWN", "MEDIA_SERIAL",
  539.   "MEDIA_RAS10_SERIAL", "MEDIA_ISDN"};
  540. char *Flag_Name[] = {"USER_AUTHENTICATED", "MESSENGER_PRESENT",
  541.  "PPP_CLIENT","GATEWAY_ACTIVE","REMOTE_LISTEN","PORT_MULTILINKED"};
  542. char *Line_Condition[]={"RAS_PORT_NON_OPERATIONAL","RAS_PORT_DISCONNECTED",
  543.   "RAS_PORT_CALLING_BACK","RAS_PORT_LISTENING","RAS_PORT_AUTHENTICATING",
  544.   "RAS_PORT_AUTHENTICATED","RAS_PORT_INITIALIZING"};
  545. char *Hdw_Error[]={"RAS_MODEM_OPERATIONAL","RAS_MODEM_NOT_RESPONDING","RAS_MODEM_HARDWARE_FAILURE",
  546.   "RAS_MODEM_INCORRECT_RESPONSE","RAS_MODEM_UNKNOWN"};
  547. INT  i=0;
  548. INT temp = 0;
  549. INT temp1 =0;
  550. DWORD dwsize=0;
  551. CHAR szBuf[50];
  552. CHAR buf[120];
  553. DWORD dwBytesWritten=0;
  554.     sprintf(buf, "pRasPort1->rasport0.wszPortName=%wsn",
  555. pRasPort1->rasport0.wszPortName );
  556.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  557.     sprintf(buf,"pRasPort1->rasport0.wszDeviceType=%wsn",
  558.     pRasPort1->rasport0.wszDeviceType );
  559.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  560.     sprintf(buf,"pRasPort1->rasport0.wszDeviceName=%wsn",
  561.     pRasPort1->rasport0.wszDeviceName );
  562.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  563.     sprintf(buf, "pRasPort1->rasport0.wszMediaName=%wsn",
  564. pRasPort1->rasport0.wszMediaName );
  565.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  566.     sprintf(buf,"pRasPort1->rasport0.reserved=%dn",
  567.     pRasPort1->rasport0.reserved );
  568.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  569.     sprintf(buf,"                 %sn",Media_Name[pRasPort1->rasport0.reserved]);
  570.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  571.     sprintf(buf, "pRasPort1->rasport0.Flags=%dn",
  572. pRasPort1->rasport0.Flags );
  573.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  574. //printing Flags
  575.     temp1 = 1;
  576.     for (i=0; i <= Number_Of_Flags; i++)
  577.  {
  578.  temp = (pRasPort1->rasport0.Flags & temp1);
  579.  if (temp)
  580.      {
  581.        sprintf(buf,"Flag       %s   n",Flag_Name[i]);
  582.      WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  583.      }
  584.   temp1 = temp1*2;
  585.  }
  586.     sprintf(buf, "pRasPort1->rasport0.wszUserName=%wsn",
  587. pRasPort1->rasport0.wszUserName );
  588.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  589.     sprintf(buf, "pRasPort1->rasport0.wszComputer=%wsn",
  590. pRasPort1->rasport0.wszComputer );
  591.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  592.     sprintf(buf, "pRasPort1->rasport0.dwStartSessionTime;=%dn",
  593.     pRasPort1->rasport0.dwStartSessionTime );
  594.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  595.     sprintf(buf,"Formatted session start time/date :  %sn",ctime(&pRasPort1->rasport0.dwStartSessionTime));
  596.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  597.     sprintf(buf, "pRasPort1->rasport0.wszLogonDomain=%wsn",
  598.     pRasPort1->rasport0.wszLogonDomain );
  599.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  600.     sprintf(buf, "pRasPort1->rasport0.fAdvancedServer=%dn",
  601.     pRasPort1->rasport0.fAdvancedServer );
  602.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  603.     sprintf(buf, "pRasPort1->LineCondition=%dn", pRasPort1->LineCondition );
  604.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  605.     sprintf(buf,"                     %sn",Line_Condition[pRasPort1->LineCondition-1]);
  606.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  607.     sprintf(buf, "pRasPort1->HardwareCondition=%dn",pRasPort1->HardwareCondition);
  608.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  609.     sprintf(buf,"                     %sn",Hdw_Error[pRasPort1->HardwareCondition-1]);
  610.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  611.     sprintf(buf, "pRasPort1->LineSpeed=%d   bits/secn",pRasPort1->LineSpeed);
  612.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  613.     sprintf(buf, "pRasPort1->NumStatistics=%dn",pRasPort1->NumStatistics);
  614.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  615.     sprintf(buf, "pRasPort1->NumMediaParms=%dn",pRasPort1->NumMediaParms);
  616.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  617.     sprintf(buf, "pRasPort1->SizeMediaParms=%dn",pRasPort1->SizeMediaParms);
  618.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  619.     sprintf(buf, "npRasPort1->ProjResult.nbf.dwError=%dn",
  620. pRasPort1->ProjResult.nbf.dwError );
  621.     if (pRasPort1->ProjResult.nbf.dwError == NO_ERROR)
  622.        {
  623. sprintf(buf, "pRasPort1->ProjResult.nbf.dwNetBiosError=%dn",
  624.     pRasPort1->ProjResult.nbf.dwNetBiosError );
  625.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  626. sprintf(buf, "pRasPort1->ProjResult.nbf.szName=%sn", 
  627.     pRasPort1->ProjResult.nbf.szName );
  628.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  629. sprintf(buf, "pRasPort1->ProjResult.nbf.wszWksta=%wsn",
  630.     pRasPort1->ProjResult.nbf.wszWksta );
  631.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  632.       }
  633.    sprintf(buf, "pRasPort1->ProjResult.ip.dwError=%dn", 
  634. pRasPort1->ProjResult.ip.dwError );
  635.    WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  636.    if (pRasPort1->ProjResult.ip.dwError == NO_ERROR)
  637.       { 
  638. sprintf(buf, "pRasPort1->ProjResult.ip.wszAddress=%wsn",
  639. pRasPort1->ProjResult.ip.wszAddress );
  640.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  641.        }
  642.     sprintf(buf, "pRasPort1->ProjResult.ipx.dwError=%dn",
  643. pRasPort1->ProjResult.ipx.dwError );
  644.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  645.     if (pRasPort1->ProjResult.ipx.dwError == NO_ERROR)
  646.       {
  647.      sprintf(buf, "pRasPort1->ProjResult.ipx.wszAddress=%wsn",
  648. pRasPort1->ProjResult.ipx.wszAddress );
  649.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  650.       }
  651.     sprintf(buf, "pRasPort1->ProjResult.at.dwError=%dn",
  652. pRasPort1->ProjResult.at.dwError );
  653.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  654.     if (pRasPort1->ProjResult.at.dwError == NO_ERROR)
  655.       {
  656.       sprintf(buf, "pRasPort1->ProjResult.at.wszAddress=%wsn",
  657. pRasPort1->ProjResult.at.wszAddress );
  658.        }
  659.     sprintf(buf, "ndwBytesXmited=%dn", pRasStats->dwBytesXmited );
  660.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  661.     sprintf(buf, "dwBytesRcved=%dn", pRasStats->dwBytesRcved );
  662.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  663.     sprintf(buf, "dwFramesXmited=%dn", pRasStats->dwFramesXmited );
  664.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  665.     sprintf(buf, "dwFramesRcved=%dn", pRasStats->dwFramesRcved);
  666.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  667.     sprintf(buf, "dwCrcErr=%dn", pRasStats->dwCrcErr);
  668.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  669.     sprintf(buf, "dwTimeoutErr=%dn", pRasStats->dwTimeoutErr);
  670.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  671.     sprintf(buf, "dwAlignmentErr=%dn", pRasStats->dwAlignmentErr);
  672.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  673.     sprintf(buf, "dwHardwareOverrunErr=%dn", pRasStats->dwHardwareOverrunErr);
  674.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  675.     sprintf(buf, "dwFramingErr=%dn", pRasStats->dwFramingErr);
  676.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  677.     sprintf(buf, "dwBufferOverrunErr=%dn", pRasStats->dwBufferOverrunErr);
  678.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  679.     sprintf(buf, "dwBytesXmitedUncompressed=%dn", 
  680.     pRasStats->dwBytesXmitedUncompressed);
  681.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  682.     sprintf(buf, "dwBytesRcvedUncompressed=%dn", 
  683.     pRasStats->dwBytesRcvedUncompressed);
  684.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  685.     sprintf(buf, "dwBytesXmitedCompressed=%dn", 
  686.     pRasStats->dwBytesXmitedCompressed);
  687.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  688.     sprintf(buf, "dwBytesRcvedCompressed=%dn", 
  689.     pRasStats->dwBytesRcvedCompressed);
  690.     WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  691.     for (i=0; i<pRasPort1->NumMediaParms;i++)
  692.       {
  693.       sprintf(buf, "pRasParams->P_Key= %sn",pRasParams[i].P_Key);
  694.       WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  695.       sprintf(buf, "pRasParams->P_Type= %dn",pRasParams[i].P_Type);
  696.       WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  697.       if (pRasParams[i].P_Type == 1)
  698.   {
  699.   sprintf(buf,"pRasParams->P_Value.Length=%dn",pRasParams[i].P_Value.String.Length);
  700. WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  701.   sprintf(szBuf,"                                                                n");
  702.   strncpy(szBuf, pRasParams[i].P_Value.String.Data, pRasParams[i].P_Value.String.Length);
  703.   sprintf(buf,"pRasParams->P_Value.Data= %sn",szBuf);
  704.        WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  705.   }
  706.       if (pRasParams[i].P_Type == 0)
  707.  {
  708.  sprintf(buf,"pRasParams->P_Value.Number=%dn", pRasParams[i].P_Value.Number);
  709.       WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  710.  }
  711.       sprintf(buf, "pRasParams->P_Attributes= %dn",pRasParams[i].P_Attributes);
  712.       WriteFile(LogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  713.       }
  714. }
  715. //Function to  clear port statistics.
  716. VOID PrintClearStats(WCHAR * RasSrv, WCHAR *wszPortName)
  717. {
  718. RAS_PORT_1             RasPort1;
  719. RAS_PORT_STATISTICS    RasStats;
  720. RAS_PORT_STATISTICS    NewRasStats;
  721. RAS_PARAMETERS *        pRasParams=NULL;
  722. DWORD dwBytesWritten=0;
  723. CHAR szBuf[120];
  724. CHAR buf[120];
  725. WCHAR Buf[512];
  726. WCHAR *lpszString;
  727. lpszString=&Buf[0];
  728. // API Called:     RasAdmimPortGetInfo
  729. // Parameters:
  730. //  IN WCHAR * lpszUserAccountServer
  731. // IN WCHAR * lpszPortName
  732. // OUT RAS_PORT_1 * pRasPort1
  733. // OUT RAS_PORT_STATISTICS * pRasPortStatistics
  734. // OUT RAS_PARAMETERS ** ppRasParams
  735. // ppRasParams should be freed by calling RasAdminFreeBuffer
  736. Status = RasAdminPortGetInfo ( RasSrv, wszPortName, &RasPort1, &RasStats, &pRasParams); 
  737.      if (Status != ERROR_SUCCESS)       
  738.   {
  739.   sprintf(szBuf, "ERROR RasAdminGetInfo   %dn",Status);
  740.   WriteFile(cLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  741.   dwResult = RasAdminGetErrorString((UINT) Status, lpszString, 512);
  742.  if (dwResult == ERROR_SUCCESS)
  743.      {
  744.      DbgPrint("ERROR  RasAdminPortGetInfo      %wsn",lpszString);
  745.      sprintf(szBuf, "ERROR  RasAdminPortGetInfo      %wsn",lpszString);     
  746.      WriteFile(cLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  747.      }
  748.  else
  749.      PrintGetStringError(dwResult);
  750. }
  751.      else
  752. {
  753. // API Called:     RasAdmimPortClearStatistics
  754. // Parameters:
  755. //  IN WCHAR * lpszServerName
  756. // IN WCHAR * lpszPortName
  757. Status = RasAdminPortClearStatistics(RasSrv, wszPortName);
  758. if (Status != ERROR_SUCCESS)    
  759.   {
  760.   sprintf(szBuf, "ERROR RasAdminPortClearStatistics   %dn",Status);
  761.   WriteFile(cLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  762.   dwResult = RasAdminGetErrorString((UINT) Status, lpszString, 512);
  763.  if (dwResult == ERROR_SUCCESS)
  764.      {
  765.      DbgPrint("ERROR  RasAdminPortClearStatistics      %wsn",lpszString);
  766.      sprintf(szBuf, "ERROR  RasAdminPortClearStatistics      %wsn",lpszString);     
  767.      WriteFile(cLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  768.      }
  769.  else
  770.      PrintGetStringError(dwResult);
  771.   }
  772.        else
  773.   {
  774.   if (pRasParams != NULL)
  775. RasAdminFreeBuffer(pRasParams);
  776.   Status = RasAdminPortGetInfo ( RasSrv, wszPortName, &RasPort1, &NewRasStats,&pRasParams); 
  777.   sprintf(buf,"Port name is   %wsn",wszPortName);
  778.   printf("%s",buf);
  779.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  780.   sprintf(buf, "ndwBytesXmited=%d                    new= %dn", RasStats.dwBytesXmited,NewRasStats.dwBytesXmited );
  781.   printf("%s",buf);
  782.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  783.   sprintf(buf, "dwBytesRcved=%d                       new= %dn", RasStats.dwBytesRcved,NewRasStats.dwBytesRcved );
  784.   printf("%s",buf);
  785.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  786.   sprintf(buf, "dwFramesXmited=%d                   new= %dn", RasStats.dwFramesXmited, NewRasStats.dwFramesXmited );
  787.   printf("%s",buf);
  788.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  789.   sprintf(buf, "dwFramesRcved=%d                    new= %dn", RasStats.dwFramesRcved, NewRasStats.dwFramesRcved);
  790.   printf("%s",buf);
  791.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  792.   sprintf(buf, "dwCrcErr=%d                              new= %dn", RasStats.dwCrcErr, NewRasStats.dwCrcErr);
  793.   printf("%s",buf);
  794.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  795.   sprintf(buf, "dwTimeoutErr=%d                       new= %dn", RasStats.dwTimeoutErr, NewRasStats.dwTimeoutErr);
  796.   printf("%s",buf);
  797.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  798.   sprintf(buf, "dwAlignmentErr=%d                  new= %dn", RasStats.dwAlignmentErr, NewRasStats.dwAlignmentErr);
  799.   printf("%s",buf);
  800.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  801.   sprintf(buf, "dwHardwareOverrunErr=%d        new= %dn", RasStats.dwHardwareOverrunErr, NewRasStats.dwHardwareOverrunErr);
  802.   printf("%s",buf);
  803.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  804.   sprintf(buf, "dwFramingErr=%d                     new= %dn", RasStats.dwFramingErr, NewRasStats.dwFramingErr);
  805.   printf("%s",buf);
  806.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  807.   sprintf(buf, "dwBufferOverrunErr=%d             new= %dn", RasStats.dwBufferOverrunErr, NewRasStats.dwBufferOverrunErr);
  808.   printf("%s",buf);
  809.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  810.   sprintf(buf, "dwBytesXmitedUncompressed=%d   new= %dn", 
  811.     RasStats.dwBytesXmitedUncompressed, NewRasStats.dwBytesXmitedUncompressed);
  812.   printf("%s",buf);
  813.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  814.   sprintf(buf, "dwBytesRcvedUncompressed=%d   new= %dn", 
  815.     RasStats.dwBytesRcvedUncompressed, NewRasStats.dwBytesRcvedUncompressed);
  816.   printf("%s",buf);
  817.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  818.   sprintf(buf, "dwBytesXmitedCompressed=%d     new= %dn", 
  819.     RasStats.dwBytesXmitedCompressed, NewRasStats.dwBytesXmitedCompressed);
  820.   printf("%s",buf);
  821.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  822.   sprintf(buf, "dwBytesRcvedCompressed=%d      new= %dn", 
  823.     RasStats.dwBytesRcvedCompressed, NewRasStats.dwBytesRcvedCompressed);
  824.   printf("%s",buf);
  825.   WriteFile(cLogFile, (LPSTR)buf, strlen(buf), &dwBytesWritten, NULL);
  826. }
  827.      if (pRasParams != NULL)
  828. RasAdminFreeBuffer(pRasParams);
  829.    }
  830. }
  831. //Function to reset Port statistic
  832. DWORD WINAPI RasAdminClearDisc(LPVOID param)
  833. {
  834. CHAR option= ' ';
  835. WORD i=0;
  836. DWORD Status=0;
  837. WORD Entries=0;
  838. DWORD PortOption = 0;
  839. RAS_PORT_0 *            pRasPort0=NULL;
  840. DWORD dwBytesWritten=0;
  841. CHAR szBuf[120];
  842. WCHAR Buf[512];
  843. WCHAR *lpszString;
  844. INT k=0;
  845. lpszString=&Buf[0];
  846. while (!Quit)
  847.   {
  848.     Status = RasAdminPortEnum( RasSrv, &pRasPort0, &Entries);
  849.     if (Status != ERROR_SUCCESS)
  850. {
  851. sprintf(szBuf, "ERROR RasAdminPortEnum   %dn",Status);
  852. dwResult = RasAdminGetErrorString((UINT) Status, lpszString, 512);
  853. if (dwResult == ERROR_SUCCESS)
  854.     {
  855.     sprintf(szBuf,"ERROR  RasAdminPortEnum      %wsn",lpszString);
  856.     WriteFile(cLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  857.     sprintf(szBuf, "ERROR  RasAdminPortEnum      %wsn",lpszString);     
  858.     WriteFile(cLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  859.     }
  860.  else
  861.     PrintGetStringError(dwResult);
  862. }
  863.     else
  864. {
  865. // Print the configured ports on the screen and ask user to choose the port to reset the statistic or disconnect.
  866. // Right now, it lists all the ports  and lets the user pick up the port. A good idea is to let user only delete
  867. // connected ports.
  868. printf("Select to C - Clear Statistic, D - Disconnect Port Q - Quitn");
  869. do
  870.      {option=_getch();
  871.        option =toupper(option);
  872.       printf("%cn",option);}   while (((option) != 'C') && ((option) != 'D') && ((option) != 'Q'));
  873. if (option == 'Q')
  874.    {
  875.   Quit = TRUE;
  876.      }              
  877. if (option == 'C')
  878.    {
  879. // Print all the ports and then let user  choose the port to clear statistics
  880.  i = 0;         
  881.  while (i < Entries)
  882.       {
  883.       while ((i < Entries) && (k <=5))
  884.   {
  885. //Better to check if the port is connected here
  886.   printf(" %d=%ws",i,pRasPort0[i].wszPortName);
  887.   i++;
  888.   k++;
  889.   }
  890.       printf("n");
  891.       k=1;
  892.       }
  893.   printf("Enter your option 0 - %d  ",Entries-1);
  894.   while ((scanf("%i",&PortOption) < 0) && (scanf("%i",&PortOption)> Entries-1))
  895.        {};
  896.   PrintClearStats(RasSrv, pRasPort0[PortOption].wszPortName);          
  897.   }
  898. if (option == 'D')
  899.    {
  900. // Print all the ports and then let user  choose the port to clear statistics
  901.  i = 0;         
  902.  while (i < Entries)
  903.       {
  904.       while ((i < Entries) && (k <=5))
  905.   {
  906. //better to check if the port is connected here
  907.   printf(" %d=%ws",i,pRasPort0[i].wszPortName);
  908.   i++;
  909.   k++;
  910.   }
  911.       printf("n");
  912.       k=1;
  913.       }
  914.   printf("Enter your option 0 - %d ",Entries-1);
  915.   while ((scanf("%i",&PortOption) < 0) && (scanf("%i",&PortOption) > Entries-1))
  916.        {};
  917. // API Called:     RasAdmimPortDisconnect
  918. // Parameters:
  919. //  IN WCHAR * lpszServerName
  920. // IN WCHAR * lpszPortName
  921.   Status = RasAdminPortDisconnect(RasSrv, pRasPort0[PortOption].wszPortName);
  922.     if (Status != ERROR_SUCCESS)
  923. {
  924. sprintf(szBuf, "ERROR RasAdminPortDisconnect   %dn",Status);
  925. dwResult = RasAdminGetErrorString((UINT) Status, lpszString, 512);
  926. if (dwResult == ERROR_SUCCESS)
  927.     {
  928.     sprintf(szBuf,"ERROR  RasAdminPortDisconnect      %wsn",lpszString);
  929.     WriteFile(cLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  930.     sprintf(szBuf, "ERROR  RasAdminPortDisconnect      %wsn",lpszString);     
  931.     WriteFile(cLogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  932.     }
  933.  else
  934.     PrintGetStringError(dwResult);
  935. }
  936.     else
  937. {
  938. printf("Port Disconnected successfullyn");
  939. }
  940.      }
  941.    }
  942.  if (pRasPort0 != NULL)
  943.      RasAdminFreeBuffer(pRasPort0);
  944.   }
  945. return(0);
  946. }
  947. void _cdecl main(int argc, char **argv)
  948. {
  949. INT LoopPriv=0;
  950. INT Error = 0;
  951. CHAR szBuf[120];
  952. DWORD dwBytesWritten=0;
  953. DWORD Dialin = 1;
  954. WCHAR Buf[512];
  955. WCHAR *lpszString;
  956. WORD Entries;
  957. WORD i=0;
  958. DWORD id=0;
  959. HANDLE ConnectDiscThread;
  960. lpszString=&Buf[0];
  961. pRasPort1 = &RasPort1;
  962. pRasStats = &RasStats;
  963. pRasServer0 = &RasServer0;
  964. ppRasUser0 = &RasUser0;
  965. if (argc > 1)
  966.     {
  967.     mbstowcs(RasSrv, argv[1], 32) ;
  968.     }
  969. else
  970.     {
  971.     printf ("to start type Admapit \\RasServerNamen");
  972.     exit(0);
  973.     }
  974. Init1();
  975. Init2();
  976. Error=ServerGetInfo(RasSrv);
  977. if (Error)
  978.     {
  979.     printf ("Ras Server is not started on the system");
  980.     exit(0);
  981.     }
  982.     ConnectDiscThread = CreateThread (NULL,
  983.  0,
  984. &RasAdminClearDisc,
  985.        (LPVOID) id,
  986.  0,
  987.        &id);
  988. while (!Quit)
  989.   {
  990. // API Called:     RasAdmimPortEnum
  991. // Parameters:
  992. //  IN WCHAR * lpszServerName
  993. // OUT PRAS_PORT_0 *  ppRasPort0
  994. // OUT WORD *  pcEntriesRead
  995. // Free up ppRasPort0 by calling RasAdminFreeBuffer API
  996.     Status = RasAdminPortEnum( RasSrv, &pRasPort0, &Entries);
  997.     if (Status != ERROR_SUCCESS)
  998. {
  999. sprintf(szBuf, "ERROR RasAdminPortEnum   %dn",Status);
  1000.       WriteFile(LogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  1001. dwResult = RasAdminGetErrorString((UINT) Status, lpszString, 512);
  1002. if (dwResult == ERROR_SUCCESS)
  1003.     {
  1004.     sprintf(szBuf,"ERROR  RasAdminPortEnum      %wsn",lpszString);
  1005.     WriteFile(LogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  1006.     sprintf(szBuf, "ERROR  RasAdminPortEnum      %wsn",lpszString);     
  1007.     WriteFile(LogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  1008.     }
  1009.  else
  1010.     PrintGetStringError(dwResult);
  1011. }
  1012.     else
  1013. {
  1014. //A good idea is to check for port Authentication before making this call
  1015. for (i=0; i<Entries; i++)
  1016.      {
  1017. // API Called:     RasAdmimPortGetInfo
  1018. // Parameters:
  1019. //  IN WCHAR * lpszUserAccountServer
  1020. // IN WCHAR * lpszPortName
  1021. // OUT RAS_PORT_1 * pRasPort1
  1022. // OUT RAS_PORT_STATISTICS * pRasPortStatistics
  1023. // OUT RAS_PARAMETERS ** ppRasParams
  1024. // ppRasParams should be freed by calling RasAdminFreeBuffer
  1025.      Status = RasAdminPortGetInfo ( RasSrv, pRasPort0[i].wszPortName, pRasPort1, pRasStats, &pRasParams); 
  1026.      if (Status != ERROR_SUCCESS)       
  1027. {
  1028.  sprintf(szBuf, "ERROR RasAdminGetInfo   %dn",Status);
  1029.  WriteFile(LogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  1030.  dwResult = RasAdminGetErrorString((UINT) Status, lpszString, 512);
  1031.  if (dwResult == ERROR_SUCCESS)
  1032.      {
  1033.      DbgPrint("ERROR  RasAdminPortGetInfo      %wsn",lpszString);
  1034.      sprintf(szBuf, "ERROR  RasAdminPortGetInfo      %wsn",lpszString);     
  1035.      WriteFile(LogFile, (LPSTR)szBuf, strlen(szBuf), &dwBytesWritten, NULL);
  1036.      }
  1037.  else
  1038.     PrintGetStringError(dwResult);
  1039. }
  1040.      else
  1041. {
  1042.  File_Print(pRasPort1, pRasStats, pRasParams);
  1043.      Debug_Print(pRasPort1, pRasStats, pRasParams);
  1044. }
  1045. //Call user privilege API only if the user is connected, or you provide the user name. If you pass NULL for all the paramters to user priv API's then the API
  1046. // will hit an Assert
  1047.    if ( pRasPort1->LineCondition == RAS_PORT_AUTHENTICATED)
  1048.      UserPrivilege();
  1049.      if (pRasParams != NULL) {
  1050.     RasAdminFreeBuffer(pRasParams);
  1051.     }
  1052.      }//End Loop
  1053.      CloseHandle(LogFile);
  1054.      if (pRasPort0 != NULL)
  1055. RasAdminFreeBuffer(pRasPort0);
  1056.      Sleep(sleeptime);
  1057.      Init1();
  1058.      ServerGetInfo(RasSrv);
  1059.   } 
  1060.   WaitForSingleObject(ConnectDiscThread,INFINITE);
  1061. CloseHandle(LogFile);
  1062. CloseHandle(cLogFile);
  1063. CloseHandle(ErrLogFile);
  1064.   
  1065. } // Main End