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.
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 |
---|---|
|
Lehnen Sie die Anforderung ab. |
|
Akzeptieren Sie die Anforderung. |
|
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 |