📄 ras.c
字号:
RasEntry.dwSize = sizeof(RasEntry);
RetVal = AfdRasGetEntryProperties ( NULL, (LPTSTR)pBufIn, (LPBYTE)&RasEntry, &dwSize, NULL, NULL);
if (RetVal)
{
DEBUGMSG (ZONE_ERROR, (TEXT("PPP: pppRasCntlGetDispPhone: Error %d from AfdRasGetEntryProperties\r\n"), RetVal));
break;
}
// Shortcut for
if (0 == _tcscmp (RasEntry.szDeviceType, RASDT_Modem))
{
// Now find the associated adapter
if (SUCCESS != FindAdapter (RasEntry.szDeviceName, RasEntry.szDeviceType, &pAdapter, &dwDeviceID))
{
DEBUGMSG (ZONE_ERROR, (TEXT("ppp: pppRasCntlGetDispPhone: Can't find device '%s'\r\n"), RasEntry.szDeviceName));
RetVal = ERROR_DEVICE_DOES_NOT_EXIST;
break;
}
dwFlag = 0;
if (RasEntry.dwfOptions & RASEO_UseCountryAndAreaCodes)
dwFlag = LINETRANSLATEOPTION_FORCELD;
else if (RasEntry.dwfOptions & RASEO_DialAsLocalCall)
dwFlag = LINETRANSLATEOPTION_FORCELOCAL;
// Now attempt to translate the number
szDialStr = NdisTapiLineTranslateAddress (pAdapter, dwDeviceID,
RasEntry.dwCountryCode,
RasEntry.szAreaCode,
RasEntry.szLocalPhoneNumber,
FALSE, dwFlag);
AdapterDelRef (pAdapter);
if (szDialStr)
{
// Now copy the result back
_tcsncpy ((LPTSTR)pBufOut, szDialStr, dwLenOut/sizeof(TCHAR));
LocalFree (szDialStr);
}
else
{
RetVal = ERROR_CANNOT_LOAD_STRING;
}
}
else if (0 == _tcscmp (RasEntry.szDeviceType, RASDT_Vpn))
{
_tcsncpy ((LPTSTR)pBufOut, RasEntry.szLocalPhoneNumber, dwLenOut / sizeof(TCHAR));
}
else
{
// For other types just return the null string
*(LPTSTR)pBufOut = TEXT('\0');
}
} while (FALSE); // end do
return RetVal;
}
PPROTOCOL_CONTEXT
pppFindProtocolContext(
pppSession_t *pSession,
DWORD ProtocolType)
//
// Find the PROTOCOL_CONTEXT for the specified ProtocolType in the session.
//
{
PPROTOCOL_CONTEXT pContext = NULL,
pEndContext;
if (ProtocolType != 0)
{
pEndContext = &pSession->pRegisteredProtocolTable[pSession->numRegisteredProtocols];
for (pContext = &pSession->pRegisteredProtocolTable[0]; TRUE; pContext++)
{
if (pContext >= pEndContext)
{
pContext = NULL;
break;
}
if (pContext->Type == ProtocolType)
{
// Matched, return pContext.
break;
}
}
}
return pContext;
}
DWORD
pppLayerOpen(
PPROTOCOL_CONTEXT pContext)
{
DWORD RetVal = ERROR_INVALID_PARAMETER;
if (pContext->pDescriptor->Open)
RetVal = pContext->pDescriptor->Open(pContext->Context);
return RetVal;
}
DWORD
pppLayerClose(
PPROTOCOL_CONTEXT pContext)
{
DWORD RetVal = ERROR_INVALID_PARAMETER;
if (pContext->pDescriptor->Close)
RetVal = pContext->pDescriptor->Close(pContext->Context);
return RetVal;
}
DWORD
pppLayerRenegotiate(
PPROTOCOL_CONTEXT pContext)
{
DWORD RetVal = ERROR_INVALID_PARAMETER;
if (pContext->pDescriptor->Renegotiate)
RetVal = pContext->pDescriptor->Renegotiate(pContext->Context);
return RetVal;
}
DWORD
pppLayerCommand(
LPVOID hRasConn,
PBYTE pBufIn,
DWORD dwLenIn,
DWORD (*pfnCommand)(PPROTOCOL_CONTEXT pContext))
//
// For the specified connection, execute the specified layer command.
//
{
DWORD RetVal = ERROR_INVALID_PARAMETER;
DWORD ProtocolType;
pppSession_t *s_p = (pppSession_t *)hRasConn;
PPROTOCOL_CONTEXT pContext;
if ((dwLenIn < sizeof(DWORD)) || (NULL == pBufIn) || (NULL == hRasConn))
{
DEBUGMSG (ZONE_ERROR, (TEXT("PPP: pppLayerCommand : Invalid Parameter\r\n")));
}
else if (PPPADDREF (s_p, REF_GETRASSTATS))
{
pppLock(s_p);
ProtocolType = *(DWORD *)pBufIn;
pContext = pppFindProtocolContext(s_p, ProtocolType);
if (pContext)
{
RetVal = pfnCommand(pContext);
}
else
{
DEBUGMSG (ZONE_ERROR, (TEXT("PPP: pppLayerCommand : Unsupported protocol %x\r\n"), ProtocolType));
}
pppUnLock(s_p);
PPPDELREF(s_p, REF_GETRASSTATS);
}
return RetVal;
}
DWORD
pppLayerParameterGetOrSetCommand(
LPVOID hRasConn,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut,
BOOL bDoGet)
{
DWORD RetVal = ERROR_INVALID_PARAMETER;
pppSession_t *s_p = (pppSession_t *)hRasConn;
PRASCNTL_LAYER_PARAMETER pParmIn,
pParmOut;
PPROTOCOL_CONTEXT pContext;
if ((dwLenIn < sizeof(RASCNTL_LAYER_PARAMETER)) || (NULL == pBufIn) || (NULL == hRasConn))
{
DEBUGMSG (ZONE_ERROR, (TEXT("PPP: pppLayerCommand : Invalid Parameter\r\n")));
}
else if (PPPADDREF (s_p, REF_GETRASSTATS))
{
pppLock(s_p);
pParmIn = (PRASCNTL_LAYER_PARAMETER)pBufIn;
pParmOut = (PRASCNTL_LAYER_PARAMETER)pBufOut;
pContext = pppFindProtocolContext(s_p, pParmIn->dwProtocolType);
if (pContext)
{
if (bDoGet)
{
if (pContext->pDescriptor->GetParameter)
{
pParmOut->dwProtocolType = pParmIn->dwProtocolType;
pParmOut->dwParameterId = pParmIn->dwParameterId;
*pdwActualOut = dwLenOut;
RetVal = pContext->pDescriptor->GetParameter(pContext->Context, pParmOut, pdwActualOut);
}
}
else
{
if (pContext->pDescriptor->SetParameter)
{
RetVal = pContext->pDescriptor->SetParameter(pContext->Context, pParmIn, dwLenIn);
}
}
}
else
{
DEBUGMSG (ZONE_ERROR, (TEXT("PPP: pppLayerCommand : Unsupported protocol %x\r\n"), pParmIn->dwProtocolType));
}
pppUnLock(s_p);
PPPDELREF(s_p, REF_GETRASSTATS);
}
return RetVal;
}
DWORD
pppLayerParameterSetCommand(
LPVOID hRasConn,
PBYTE pBufIn,
DWORD dwLenIn)
{
DWORD RetVal = ERROR_INVALID_PARAMETER;
return RetVal;
}
// @doc INTERNAL
/*****************************************************************************
*
* @func DWORD | RasIOControl | RAS IO Control Entry point
*
* @rdesc Returns SUCCESS if successful, non-zero error code otherwise
*
* @parm DWORD | dwOpenData | value returned from ttt_Open call
* @parm DWORD | dwCode | io control code to be performed
* @parm PBYTE | pBufIn | input data to the device
* @parm DWORD | dwLenIn | number of bytes being passed in
* @parm PBYTE | pBufOut | output data from the device
* @parm DWORD | dwLenOut |maximum number of bytes to receive from device
* @parm PDWORD | pdwActualOut | actual number of bytes received from device
*
*/
DWORD APIENTRY
AfdRasIOControl
(
LPVOID hRasConn, // handle - if available
DWORD dwCode, // request code
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut
)
{
DWORD RetVal;
DEBUGMSG (ZONE_RAS | ZONE_FUNCTION,
(TEXT("ppp:+AfdRasIOControl( 0x%X, %d, 0x%X, %d, 0x%X, %d, 0x%X )\r\n"),
hRasConn, dwCode, pBufIn, dwLenIn, pBufOut, dwLenOut,
pdwActualOut));
if (!g_bPPPInitialized)
{
// PPPInitialize has not been called yet, the system
// is still starting up.
RetVal = ERROR_SERVICE_NOT_ACTIVE;
}
else switch( (RasCntlEnum_t )dwCode )
{
case RASCNTL_STATISTICS :
if ((dwLenOut < sizeof(RAS_STATS)) || (NULL == pBufOut) ||
(NULL == hRasConn)) {
RetVal = ERROR_INVALID_PARAMETER;
DEBUGMSG (ZONE_ERROR, (TEXT("ppp: AfdRasIOControl : Invalid Parameter\r\n")));
break;
}
RetVal = pppGetRasStats (hRasConn, (PRAS_STATS)pBufOut);
*pdwActualOut = sizeof(RAS_STATS);
break;
case RASCNTL_SET_DEBUG:
case RASCNTL_LOCK_STATUS:
case RASCNTL_PRINT_CS:
// deprecated debug ioctls
RetVal = ERROR_INVALID_PARAMETER;
break;
case RASCNTL_ENUMDEV :
// Serious abuse of parameters to the function.
DEBUGMSG (ZONE_WARN, (TEXT("RasEnumDevices(0x%X, 0x%X, 0x%X)\r\n"),
pBufIn, pBufOut, pdwActualOut));
RetVal = pppMac_EnumDevices((LPRASDEVINFOW)pBufIn, FALSE, (LPDWORD)pBufOut, (LPDWORD)pdwActualOut);
break;
case RASCNTL_GETPROJINFO:
RetVal = AfdRasGetProjectionInfo((HRASCONN)hRasConn, (RASPROJECTION)dwLenIn, pBufIn, pdwActualOut);
break;
case RASCNTL_GETDISPPHONE :
RetVal = pppRasCntlGetDispPhone(pBufIn, dwLenIn, pBufOut, dwLenOut, pdwActualOut);
break;
case RASCNTL_DEVCONFIGDIALOGEDIT :
if ((dwLenIn < sizeof(RASCNTL_DEVCFGDLGED)) || (NULL == pBufIn) ||
(NULL == pBufOut))
{
RetVal = ERROR_INVALID_PARAMETER;
DEBUGMSG (ZONE_ERROR, (TEXT("ppp: AfdRasIOControl : Invalid Parameter\r\n")));
}
else
{
PRASCNTL_DEVCFGDLGED pDevCfgDlgEdit = (PRASCNTL_DEVCFGDLGED)pBufIn;
RetVal = PPPDevConfigDialogEdit(
pDevCfgDlgEdit->szDeviceName,
pDevCfgDlgEdit->szDeviceType,
pDevCfgDlgEdit->hWndOwner,
pDevCfgDlgEdit->dwSize ? pDevCfgDlgEdit->DataBuf : NULL,
pDevCfgDlgEdit->dwSize,
(LPVARSTRING)pBufOut);
}
break;
case RASCNTL_SERVER_GET_STATUS :
RetVal = PPPServerGetStatus((PRASCNTL_SERVERSTATUS)pBufOut, dwLenOut, pdwActualOut);
break;
case RASCNTL_SERVER_ENABLE :
case RASCNTL_SERVER_DISABLE :
RetVal = PPPServerSetEnableState(dwCode == RASCNTL_SERVER_ENABLE);
break;
case RASCNTL_SERVER_GET_PARAMETERS :
RetVal = PPPServerGetParameters((PRASCNTL_SERVERSTATUS)pBufOut, dwLenOut, pdwActualOut);
break;
case RASCNTL_SERVER_SET_PARAMETERS :
RetVal = PPPServerSetParameters((PRASCNTL_SERVERSTATUS)pBufIn, dwLenIn);
break;
case RASCNTL_SERVER_GET_IPV6_NET_PREFIX :
RetVal = PPPServerGetIPV6NetPrefix((PRASCNTL_SERVER_IPV6_NET_PREFIX)pBufOut, dwLenOut, pdwActualOut);
break;
case RASCNTL_SERVER_SET_IPV6_NET_PREFIX :
RetVal = PPPServerSetIPV6NetPrefix((PRASCNTL_SERVER_IPV6_NET_PREFIX)pBufIn, dwLenIn);
break;
case RASCNTL_SERVER_LINE_ADD :
RetVal = PPPServerLineAdd((PRASCNTL_SERVERLINE)pBufIn, dwLenIn);
break;
case RASCNTL_SERVER_LINE_REMOVE :
case RASCNTL_SERVER_LINE_ENABLE :
case RASCNTL_SERVER_LINE_DISABLE :
case RASCNTL_SERVER_LINE_GET_PARAMETERS :
case RASCNTL_SERVER_LINE_SET_PARAMETERS :
case RASCNTL_SERVER_LINE_GET_CONNECTION_INFO :
RetVal = PPPServerLineIoCtl(dwCode, (PRASCNTL_SERVERLINE)pBufIn, dwLenIn, (PRASCNTL_SERVERLINE)pBufOut, dwLenOut, pdwActualOut);
break;
case RASCNTL_SERVER_USER_SET_CREDENTIALS :
RetVal = PPPServerUserSetCredentials((PRASCNTL_SERVERUSERCREDENTIALS)pBufIn, dwLenIn);
break;
case RASCNTL_SERVER_USER_DELETE_CREDENTIALS :
RetVal = PPPServerUserDeleteCredentials((PRASCNTL_SERVERUSERCREDENTIALS)pBufIn, dwLenIn);
break;
case RASCNTL_EAP_GET_USER_DATA:
RetVal = rasGetEapUserData(NULL, NULL, (PWSTR)pBufIn, pBufOut, pdwActualOut);
break;
case RASCNTL_EAP_SET_USER_DATA:
RetVal = rasSetEapUserData(NULL, NULL, (PWSTR)pBufIn, pBufOut, dwLenOut);
break;
case RASCNTL_EAP_GET_CONNECTION_DATA:
RetVal = rasGetEapConnectionData(NULL, (PWSTR)pBufIn, pBufOut, pdwActualOut);
break;
case RASCNTL_EAP_SET_CONNECTION_DATA:
RetVal = rasSetEapConnectionData(NULL, (PWSTR)pBufIn, pBufOut, dwLenOut);
break;
case RASCNTL_ENABLE_LOGGING:
RetVal = LoadLoggingExtension();
break;
case RASCNTL_DISABLE_LOGGING:
RetVal = UnloadLoggingExtension();
break;
case RASCNTL_LAYER_PARAMETER_GET:
RetVal = pppLayerParameterGetOrSetCommand(hRasConn, pBufIn, dwLenIn, pBufOut, dwLenOut, pdwActualOut, TRUE);
break;
case RASCNTL_LAYER_PARAMETER_SET:
RetVal = pppLayerParameterGetOrSetCommand(hRasConn, pBufIn, dwLenIn, pBufOut, dwLenOut, pdwActualOut, FALSE);
break;
case RASCNTL_LAYER_OPEN:
RetVal = pppLayerCommand(hRasConn, pBufIn, dwLenIn, pppLayerOpen);
break;
case RASCNTL_LAYER_CLOSE:
RetVal = pppLayerCommand(hRasConn, pBufIn, dwLenIn, pppLayerClose);
break;
case RASCNTL_LAYER_RENEGOTIATE:
RetVal = pppLayerCommand(hRasConn, pBufIn, dwLenIn, pppLayerRenegotiate);
break;
default:
RetVal = ERROR_INVALID_PARAMETER;
break;
}
DEBUGMSG (ZONE_RAS | ZONE_FUNCTION,
(TEXT("ppp: -AfdRasIOControl : RetVal=%d\r\n"), RetVal));
return RetVal;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -