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 |
---|---|
|
Tolak permintaan. |
|
Terima permintaan. |
|
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 |
---|---|
|
Tolak permintaan. |
|
Terima permintaan. |
|
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk