ICertPolicy::VerifyRequest method (certpol.h)

Metode VerifyRequest memberi tahu modul kebijakan bahwa permintaan baru telah memasuki sistem. Modul kebijakan kemudian dapat berinteraksi dengan permintaan tersebut dengan meneruskan Konteks sebagai parameter saat mengambil atau mengatur properti pada permintaan atau sertifikat terkait.

Nilai disposisi yang dikembalikan menunjukkan apakah permintaan telah diterima, ditolak, atau telah dikirim ke antrean administrasi untuk evaluasi nanti.

Sintaks

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

Parameter

[in] strConfig

Mewakili nama otoritas sertifikasi, seperti yang dimasukkan selama penyiapan Layanan Sertifikat. Untuk informasi tentang nama string konfigurasi, lihat ICertConfig.

[in] Context

Mengidentifikasi permintaan dan sertifikat terkait yang sedang dibangun. Server sertifikat meneruskan konteks ke metode ini.

[in] bNewRequest

Jika diatur ke TRUE, menentukan bahwa permintaan tersebut baru. Jika diatur ke FALSE, permintaan sedang dikirim ulang ke modul kebijakan sebagai akibat dari panggilan ICertAdmin::ResubmitRequest . Nilai FALSE dapat digunakan untuk menunjukkan bahwa administrator ingin permintaan dikeluarkan atau properti permintaan yang ditetapkan oleh administrator harus diperiksa.

Perhatikan bahwa TRUE didefinisikan (dalam file header Microsoft) untuk programmer C/C++ sebagai satu, sementara Visual Basic mendefinisikan kata kunci True sebagai negatif. Akibatnya, pengembang Visual Basic harus menggunakan satu (bukan True) untuk mengatur parameter ini ke TRUE. Namun, untuk mengatur parameter ini ke FALSE, pengembang Visual Basic dapat menggunakan nol atau False.

[in] Flags

Parameter ini dicadangkan dan harus diatur ke nol.

[out, retval] pDisposition

Penunjuk ke nilai disposisi. Metode ini menetapkan salah satu disposisi berikut.

Nilai Makna
VR_INSTANT_BAD
Tolak permintaan.
VR_INSTANT_OK
Terima permintaan.
VR_PENDING
Tambahkan permintaan ke antrean untuk menerima atau menolak permintaan di lain waktu.

Nilai kembali

C++

Jika metode berhasil, metode akan mengembalikan S_OK.

Jika metode gagal, metode mengembalikan nilai HRESULT yang menunjukkan kesalahan. Untuk daftar kode kesalahan umum, lihat Nilai HRESULT Umum.

VB

Nilai yang dikembalikan menentukan disposisi, yang harus menjadi salah satu nilai berikut.
Menampilkan kode Deskripsi
VR_INSTANT_BAD
Tolak permintaan.
VR_INSTANT_OK
Terima permintaan.
VR_PENDING
Tambahkan permintaan ke antrean untuk menerima atau menolak permintaan di lain waktu.

Keterangan

VerifyRequest bebas untuk memunculkan proses lain atau mengakses database eksternal untuk melakukan verifikasi permintaan. Jika verifikasi memerlukan pemrosesan di luar band atau intervensi manusia, VerifyRequest dapat memberi tahu proses lain atau meninggalkan pemberitahuan apa pun tentang permintaan masuk yang diperlukan. Setelah pemrosesan di luar band selesai, panggilan ke ResubmitRequest dapat dilakukan, atau alat administrasi yang disediakan dapat digunakan untuk mengirim ulang permintaan ke Modul Kebijakan. Modul kebijakan dapat memeriksa permintaan lagi, mengakses data eksternal yang diperlukan, dan mengembalikan nilai untuk menunjukkan sertifikat harus diterbitkan atau ditolak.

Saat menulis modul kebijakan kustom, Anda harus menerapkan fungsionalitas VerifyRequest dalam modul Anda.

Contoh

Contoh berikut menunjukkan kemungkinan implementasi metode 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);
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tidak ada yang didukung
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header certpol.h (termasuk Certsrv.h)
Pustaka Certidl.lib

Lihat juga

ICertConfig

ICertPolicy

ICertPolicy2