实现 SceSvcAttachmentConfig
SceSvcAttachmentConfig 函数必须从安全数据库中检索信息,然后使用该信息配置服务。
实现 SceSvcAttachmentConfig 时,可以检索所有信息,然后配置服务,也可以分步检索和配置服务。 以下算法检索所有信息,然后配置服务。
实现 SceSvcAttachmentConfig
- 定义检索信息和返回代码所需的变量。
- 在回调结构中调用 pfQueryInfo 回调函数,以从安全数据库中检索配置信息。
- 使用返回的信息配置系统。
- 在回调结构中调用 pfFreeInfo 回调函数,以释放用于返回信息的内存。
- 如果扩展想要添加到分析日志文件中的任何消息,请在回调结构中调用 pfLogInfo 回调函数。
- 返回相应的 SCESTATUS 代码。
以下示例演示 SceSvcAttachmentConfig 的一个可能实现。 请注意,在此示例中,函数 ProcessConfigurationLine 设置服务配置。 不显示此函数的实现。
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;
}