實作 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;
}