SceSvcAttachmentConfig の実装
SceSvcAttachmentConfig 関数は、セキュリティ データベースから情報を取得し、その情報を使用してサービスを構成する必要があります。
SceSvcAttachmentConfig を実装する場合は、すべての情報を取得してからサービスを構成するか、手順でサービスを取得して構成できます。 次のアルゴリズムは、すべての情報を取得し、サービスを構成します。
SceSvcAttachmentConfig を実装するには
- 情報とリターン コードを取得するために必要な変数を定義します。
- セキュリティ データベースから構成情報を取得するには、コールバック構造で pfQueryInfo コールバック関数を呼び出します。
- 返された情報を使用してシステムを構成します。
- コールバック構造体で pfFreeInfo コールバック関数を呼び出して、返される情報に使用されるメモリを解放します。
- 拡張機能が分析ログ ファイルに追加するメッセージがある場合は、コールバック構造で pfLogInfo コールバック関数を呼び出します。
- 適切な SCESTATUS コードを 返します。
次の例は、 SceSvcAttachmentConfig の 1 つの可能な実装を示しています。 この例では、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;
}