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
처리 값에 대한 포인터입니다. 메서드는 다음 처리 중 하나를 설정합니다.
값 | 의미 |
---|---|
|
요청 거부. |
|
요청을 수락합니다. |
|
나중에 요청을 수락하거나 거부할 요청을 큐에 추가합니다. |
반환 값
C++
메서드가 성공하면 메서드는 S_OK 반환합니다.메서드가 실패하면 오류를 나타내는 HRESULT 값을 반환합니다. 일반적인 오류 코드 목록은 일반 HRESULT 값을 참조하세요.
VB
반환 값은 다음 값 중 하나여야 하는 처리를 지정합니다.반환 코드 | 설명 |
---|---|
|
요청 거부. |
|
요청을 수락합니다. |
|
나중에 요청을 수락하거나 거부할 요청을 큐에 추가합니다. |
설명
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 |