Implementación de SceSvcAttachmentConfig
La función SceSvcAttachmentConfig debe recuperar información de la base de datos de seguridad y, a continuación, usar esa información para configurar el servicio.
Al implementar SceSvcAttachmentConfig, puede recuperar toda la información y, a continuación, configurar el servicio, o recuperar y configurar el servicio en pasos. El siguiente algoritmo recupera toda la información y, a continuación, configura el servicio.
Para implementar SceSvcAttachmentConfig
- Defina las variables necesarias para recuperar la información y los códigos de retorno.
- Llame a la función de devolución de llamada pfQueryInfo en la estructura de devolución de llamada para recuperar la información de configuración de la base de datos de seguridad.
- Configure el sistema con la información devuelta.
- Llame a la función de devolución de llamada pfFreeInfo en la estructura de devolución de llamada para liberar memoria usada para la información devuelta.
- Si hay algún mensaje que la extensión quiera agregar al archivo de registro de análisis, llame a la función de devolución de llamada pfLogInfo en la estructura de devolución de llamada.
- Devuelve los códigos SCESTATUS adecuados.
En el ejemplo siguiente se muestra una posible implementación de SceSvcAttachmentConfig. Tenga en cuenta que, en este ejemplo, la función ProcessConfigurationLine establece la configuración del servicio. No se muestra la implementación de esta función.
SCESTATUS WINAPI SceSvcAttachmentConfig (
IN PSCESVC_CALLBACK_INFO pSceCbInfo
)
{
////////////////////////////////////////////////////
// Define variables.
////////////////////////////////////////////////////
PSCESVC_CONFIGURATION_INFO pConfigInfo = NULL;
SCESTATUS retCode;
SCE_ENUMERATION_CONTEXT EnumContext = 0;
if ( pSceCbInfo == NULL ||
pSceCbInfo->sceHandle == NULL ||
pSceCbInfo->pfQueryInfo == NULL ||
pSceCbInfo->pfSetInfo == NULL ||
pSceCbInfo->pfFreeInfo == NULL )
{
return(SCESTATUS_INVALID_PARAMETER);
}
////////////////////////////////////////////////////
// Retrieve configuration information and configure
// system.
////////////////////////////////////////////////////
do
{
retCode = (*(pSceCbInfo->pfQueryInfo))( pSceCbInfo->sceHandle,
SceSvcConfigurationInfo,
NULL,
FALSE,
(PVOID *)&pConfigInfo,
&EnumContext
);
if (retCode == SCESTATUS_SUCCESS && pConfigInfo != NULL)
{
ULONG i:
//////////////////////////////////////////////////
// Configure system.
/////////////////////////////////////////////////
for(i = 0; < pConfigInfo->Count; i++)
{
if(pConfigInfo->Line[i].Key == NULL)
continue;
ProcessConfigurationLine(pConfigInfo->Line[i]);
}
//////////////////////////////////////////////////
// Free data returned.
/////////////////////////////////////////////////
(*(pSceCbInfo->pfFreeInfo)) ((PVOPID)pConfigInfo);
pConfigInfo = NULL;
}
} while (retCode == SCESTATUS_SUCCESS && CountReturned > 0);
////////////////////////////////////////////////////
// Add code for other return codes if retCode is
// not SCESTATUS_SUCCESS.
///////////////////////////////////////////////////
return retCode;
}