다음을 통해 공유


SceSvcAttachmentConfig 구현

SceSvcAttachmentConfig 함수는 보안 데이터베이스에서 정보를 검색한 다음 해당 정보를 사용하여 서비스를 구성해야 합니다.

SceSvcAttachmentConfig를 구현할 때 모든 정보를 검색한 다음 서비스를 구성하거나 단계별 서비스를 검색하고 구성할 수 있습니다. 다음 알고리즘은 모든 정보를 검색한 다음 서비스를 구성합니다.

SceSvcAttachmentConfig를 구현하려면

  1. 정보를 검색하고 코드를 반환하는 데 필요한 변수를 정의합니다.
  2. 콜백 구조에서 pfQueryInfo 콜백 함수를 호출하여 보안 데이터베이스에서 구성 정보를 검색합니다.
  3. 반환된 정보를 사용하여 시스템을 구성합니다.
  4. 콜백 구조에서 pfFreeInfo 콜백 함수를 호출하여 반환된 정보에 사용되는 메모리를 해제합니다.
  5. 확장이 분석 로그 파일에 추가하려는 메시지가 있는 경우 콜백 구조에서 pfLogInfo 콜백 함수를 호출합니다.
  6. 적절한 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;
}