Поделиться через


Метод 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 ключевое слово как отрицательное значение. В результате разработчики Visual Basic должны использовать один (вместо True), чтобы задать для этого параметра значение TRUE. Однако чтобы задать для этого параметра значение FALSE, разработчики Visual Basic могут использовать ноль или False.

[in] Flags

Этот параметр зарезервирован и должен иметь нулевое значение.

[out, retval] pDisposition

Указатель на значение ликвидации. Метод задает одно из следующих расположений.

Значение Значение
VR_INSTANT_BAD
Deny the request (Отклонить запрос).
VR_INSTANT_OK
Примите запрос.
VR_PENDING
Добавьте запрос в очередь, чтобы принять или отклонить запрос позже.

Возвращаемое значение

C++

Если метод завершается успешно, метод возвращает S_OK.

Если метод завершается сбоем, он возвращает значение HRESULT , указывающее на ошибку. Список распространенных кодов ошибок см. в разделе Общие значения HRESULT.

VB

Возвращаемое значение указывает ликвидацию, которая должна быть одним из следующих значений.
Код возврата Описание
VR_INSTANT_BAD
Deny the request (Отклонить запрос).
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
Header certpol.h (включая Certsrv.h)
Библиотека Certidl.lib

См. также раздел

ICertConfig

ICertPolicy

ICertPolicy2