다음을 통해 공유


ICertPolicy::VerifyRequest 메서드(certpol.h)

VerifyRequest 메서드는 정책 모듈에 새 요청이 시스템에 입력되었음을 알릴 수 있습니다. 그런 다음, 정책 모듈은 요청 또는 연결된 인증서의 속성을 검색하거나 설정할 때 컨텍스트 를 매개 변수로 전달하여 해당 요청과 상호 작용할 수 있습니다.

반환된 처리 값은 요청이 수락, 거부 또는 이후 평가를 위해 관리 큐로 전송되었는지 여부를 나타냅니다.

구문

HRESULT VerifyRequest(
  [in]          const BSTR strConfig,
  [in]          LONG       Context,
  [in]          LONG       bNewRequest,
  [in]          LONG       Flags,
  [out, retval] LONG       *pDisposition
);

매개 변수

[in] strConfig

인증서 서비스를 설정하는 동안 입력한 인증 기관의 이름을 나타냅니다. 구성 문자열 이름에 대한 자세한 내용은 ICertConfig를 참조하세요.

[in] Context

생성 중인 요청 및 연결된 인증서를 식별합니다. 인증서 서버는 컨텍스트를 이 메서드에 전달합니다.

[in] bNewRequest

TRUE로 설정하면 요청이 새 요청임을 지정합니다. FALSE로 설정하면 ICertAdmin::ResubmitRequest 호출의 결과로 요청이 정책 모듈에 다시 제출됩니다. FALSE 값을 사용하여 관리자가 요청을 발급하려고 하거나 관리자가 설정한 요청 속성을 검사해야 함을 나타낼 수 있습니다.

TRUE는 C/C++ 프로그래머용으로 정의되고 Visual Basic은 True 키워드(keyword) 음수 파일로 정의합니다. 따라서 Visual Basic 개발자는 True 대신 하나를 사용하여 이 매개 변수를 TRUE로 설정해야 합니다. 그러나 이 매개 변수를 FALSE로 설정하기 위해 Visual Basic 개발자는 0 또는 False를 사용할 수 있습니다.

[in] Flags

이 매개 변수는 예약되어 있으며 0으로 설정해야 합니다.

[out, retval] pDisposition

처리 값에 대한 포인터입니다. 메서드는 다음 처리 중 하나를 설정합니다.

의미
VR_INSTANT_BAD
요청 거부.
VR_INSTANT_OK
요청을 수락합니다.
VR_PENDING
나중에 요청을 수락하거나 거부할 요청을 큐에 추가합니다.

반환 값

C++

메서드가 성공하면 메서드는 S_OK 반환합니다.

메서드가 실패하면 오류를 나타내는 HRESULT 값을 반환합니다. 일반적인 오류 코드 목록은 일반 HRESULT 값을 참조하세요.

VB

반환 값은 다음 값 중 하나여야 하는 처리를 지정합니다.
반환 코드 설명
VR_INSTANT_BAD
요청 거부.
VR_INSTANT_OK
요청을 수락합니다.
VR_PENDING
나중에 요청을 수락하거나 거부할 요청을 큐에 추가합니다.

설명

VerifyRequest 는 다른 프로세스를 생성하거나 외부 데이터베이스에 액세스하여 요청 확인을 수행할 수 있습니다. 확인에 대역 외 처리 또는 사용자 개입이 필요한 경우 VerifyRequest는 다른 프로세스에 알리거나 필요한 들어오는 요청에 대한 알림을 남길 수 있습니다. 대역 외 처리가 완료되면 ResubmitRequest 를 호출하거나 제공된 관리 도구를 사용하여 정책 모듈에 요청을 다시 제출할 수 있습니다. 정책 모듈은 요청을 다시 검사하고, 필요한 외부 데이터에 액세스하고, 인증서를 발급하거나 거부해야 함을 나타내는 값을 반환할 수 있습니다.

사용자 지정 정책 모듈을 작성할 때 모듈에서 VerifyRequest 기능을 구현해야 합니다.

예제

다음 예제에서는 VerifyRequest 메서드의 가능한 구현을 보여줍니다.

#include <windows.h>
#include <stdio.h>
#include <Certpol.h>

STDMETHODIMP CCertPolicy::VerifyRequest(
             BSTR const strConfig,
             LONG Context,
             LONG bNewRequest,
             LONG Flags,
             LONG __RPC_FAR *pDisposition)
{
    HRESULT            hr;
    long               nDisp = VR_INSTANT_BAD;
    ICertServerPolicy *pServer = NULL;
    BSTR               bstrPropName = NULL;
    VARIANT            varProp;

    // Verify that pointer is not NULL.
    if ( NULL == pDisposition )
    {
        hr = E_POINTER;  // E_POINTER is #defined in Winerror.h
        goto error;
    }
    
    // Set disposition to pending.
    *pDisposition = VR_PENDING; 

    // Obtain a pointer to the CertServerPolicy interface.
    hr = CoCreateInstance( CLSID_CCertServerPolicy,
                           NULL,
                           CLSCTX_INPROC_SERVER,
                           IID_ICertServerPolicy,
                           (void **) &pServer);
    if (FAILED( hr ))
    {
        printf("Failed CoCreateInstance for pServer - %x\n", hr );
        goto error;
    }

    // Set the context to refer to this request.
    hr = pServer->SetContext(Context);
    if (FAILED( hr ))
    {
        printf("Failed SetContext(%u) - %x\n", Context, hr );
        goto error;
    }

    // This policy will perform a database check on the CN.
    // Set the property name to Subject.Commonname.
    bstrPropName = SysAllocString(L"Subject.Commonname");
    if ( NULL == bstrPropName )
    {
        hr = E_OUTOFMEMORY;  // #defined in Winerror.h
        printf("Failed SysAllocString (no memory)\n" );
        goto error;
    }

    // Retrieve the certificate property for the CN.
    // Actual implementations may want to examine other properties.
    VariantInit( &varProp );
    hr = pServer->GetCertificateProperty( bstrPropName,
                                          PROPTYPE_STRING,
                                          &varProp );
    if (FAILED(hr))
    {
        printf("Failed GetCertificateProperty - %x\n", hr);
        goto error;
    }

    // For this simple sample, merely check CN in a database.
    // (Implementation not shown, as it is application-specific).
    hr = MyDatabaseCheck( varProp.bstrVal );
    if ( S_OK == hr )
        *pDisposition = VR_INSTANT_OK;   // Accepted.
    else 
        *pDisposition = VR_INSTANT_BAD;  // Denied.

error:

    // Free resources.
    if (NULL != pServer)
        pServer->Release();

    VariantClear( &varProp );

    if ( NULL != bstrPropName )
        SysFreeString( bstrPropName );

    return(hr);
}

요구 사항

요구 사항
지원되는 최소 클라이언트 지원되는 버전 없음
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 certpol.h(Certsrv.h 포함)
라이브러리 Certidl.lib

추가 정보

ICertConfig

ICertPolicy

ICertPolicy2