Freigeben über


ICertPolicy::VerifyRequest-Methode (certpol.h)

Die VerifyRequest-Methode benachrichtigt das Richtlinienmodul, dass eine neue Anforderung in das System eingedrungen ist. Das Richtlinienmodul kann dann mit dieser Anforderung interagieren, indem beim Abrufen oder Festlegen von Eigenschaften für die Anforderung oder das zugeordnete Zertifikat Context als Parameter übergeben wird.

Der zurückgegebene Dispositionswert gibt an, ob die Anforderung akzeptiert, abgelehnt oder zur späteren Auswertung an die Verwaltungswarteschlange gesendet wurde.

Syntax

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

Parameter

[in] strConfig

Stellt den Namen der Zertifizierungsstelle dar, wie er während der Einrichtung von Zertifikatdiensten eingegeben wurde. Informationen zum Namen der Konfigurationszeichenfolge finden Sie unter ICertConfig.

[in] Context

Identifiziert die Anforderung und das zugehörige Zertifikat, das gerade erstellt wird. Der Zertifikatserver übergibt den Kontext an diese Methode.

[in] bNewRequest

Gibt bei Festlegung auf TRUE an, dass die Anforderung neu ist. Wenn auf FALSE festgelegt ist, wird die Anforderung aufgrund eines ICertAdmin::ResubmitRequest-Aufrufs erneut an das Richtlinienmodul gesendet. Der Wert FALSE kann verwendet werden, um anzugeben, dass der Administrator die Anforderung ausstellen möchte oder dass vom Administrator festgelegte Anforderungseigenschaften überprüft werden sollen.

Beachten Sie, dass TRUE (in einer Microsoft-Headerdatei) für C/C++-Programmierer als 1 definiert ist, während Visual Basic die True-Schlüsselwort (keyword) als negativ definiert. Daher müssen Visual Basic-Entwickler einen (anstelle von True) verwenden, um diesen Parameter auf TRUE festzulegen. Um diesen Parameter jedoch auf FALSE festzulegen, können Visual Basic-Entwickler null oder False verwenden.

[in] Flags

Dieser Parameter ist reserviert und muss auf null festgelegt werden.

[out, retval] pDisposition

Ein Zeiger auf den Dispositionswert. Die -Methode legt eine der folgenden Dispositionen fest.

Wert Bedeutung
VR_INSTANT_BAD
Lehnen Sie die Anforderung ab.
VR_INSTANT_OK
Akzeptieren Sie die Anforderung.
VR_PENDING
Fügen Sie die Anforderung zur Warteschlange hinzu, um die Anforderung zu einem späteren Zeitpunkt anzunehmen oder zu verweigern.

Rückgabewert

C++

Wenn die Methode erfolgreich ist, gibt die Methode S_OK zurück.

Wenn die Methode fehlschlägt, gibt sie einen HRESULT-Wert zurück, der den Fehler angibt. Eine Liste allgemeiner Fehlercodes finden Sie unter Allgemeine HRESULT-Werte.

VB

Der Rückgabewert gibt die Disposition an, die einer der folgenden Werte sein muss.
Rückgabecode Beschreibung
VR_INSTANT_BAD
Lehnen Sie die Anforderung ab.
VR_INSTANT_OK
Akzeptieren Sie die Anforderung.
VR_PENDING
Fügen Sie die Anforderung zur Warteschlange hinzu, um die Anforderung zu einem späteren Zeitpunkt anzunehmen oder zu verweigern.

Hinweise

VerifyRequest kann andere Prozesse abspeichern oder auf eine externe Datenbank zugreifen, um die Anforderungsüberprüfung durchzuführen. Wenn die Überprüfung eine Out-of-Band-Verarbeitung oder menschliches Eingreifen erfordert, kann VerifyRequest einen anderen Prozess benachrichtigen oder eine Benachrichtigung über die eingehende Anforderung hinterlassen. Nach Abschluss der Out-of-Band-Verarbeitung kann ein Aufruf von ResubmitRequest erfolgen, oder das bereitgestellte Verwaltungstool kann verwendet werden, um die Anforderung erneut an das Richtlinienmodul zu übermitteln. Das Richtlinienmodul kann die Anforderung erneut untersuchen, auf alle erforderlichen externen Daten zugreifen und einen Wert zurückgeben, der angibt, dass das Zertifikat ausgestellt oder verweigert werden soll.

Wenn Sie benutzerdefinierte Richtlinienmodule schreiben, müssen Sie die VerifyRequest-Funktionalität in Ihren Modulen implementieren.

Beispiele

Das folgende Beispiel zeigt eine mögliche Implementierung der VerifyRequest-Methode .

#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);
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Nicht unterstützt
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile certpol.h (include Certsrv.h)
Bibliothek Certidl.lib

Weitere Informationen

ICertConfig

ICertPolicy

ICertPolicy2