Fungsi CoInitializeSecurity (combaseapi.h)

Mendaftarkan keamanan dan mengatur nilai keamanan default untuk proses tersebut.

Sintaks

HRESULT CoInitializeSecurity(
  [in, optional] PSECURITY_DESCRIPTOR        pSecDesc,
  [in]           LONG                        cAuthSvc,
  [in, optional] SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
  [in, optional] void                        *pReserved1,
  [in]           DWORD                       dwAuthnLevel,
  [in]           DWORD                       dwImpLevel,
  [in, optional] void                        *pAuthList,
  [in]           DWORD                       dwCapabilities,
  [in, optional] void                        *pReserved3
);

Parameter

[in, optional] pSecDesc

Izin akses yang akan digunakan server untuk menerima panggilan. Parameter ini digunakan oleh COM hanya ketika server memanggil CoInitializeSecurity. Nilainya adalah penunjuk ke salah satu dari tiga jenis: AppID, objek IAccessControl , atau SECURITY_DESCRIPTOR, dalam format absolut. Lihat bagian Keterangan untuk informasi selengkapnya.

[in] cAuthSvc

Jumlah entri dalam parameter asAuthSvc . Parameter ini digunakan oleh COM hanya ketika server memanggil CoInitializeSecurity. Jika parameter ini adalah 0, tidak ada layanan autentikasi yang akan didaftarkan dan server tidak dapat menerima panggilan aman. Nilai -1 memberi tahu COM untuk memilih layanan autentikasi mana yang akan didaftarkan, dan jika demikian, parameter asAuthSvc harus NULL. Namun, Schannel tidak akan pernah dipilih sebagai layanan autentikasi oleh server jika parameter ini adalah -1.

[in, optional] asAuthSvc

Array layanan autentikasi yang bersedia digunakan server untuk menerima panggilan. Parameter ini digunakan oleh COM hanya ketika server memanggil CoInitializeSecurity. Untuk informasi selengkapnya, lihat SOLE_AUTHENTICATION_SERVICE.

[in, optional] pReserved1

Parameter ini dicadangkan dan harus NULL.

[in] dwAuthnLevel

Tingkat autentikasi default untuk proses tersebut. Server dan klien menggunakan parameter ini ketika mereka memanggil CoInitializeSecurity. COM akan gagal memanggil yang tiba dengan tingkat autentikasi yang lebih rendah. Secara default, semua proksi akan menggunakan setidaknya tingkat autentikasi ini. Nilai ini harus berisi salah satu konstanta tingkat autentikasi. Secara default, semua panggilan ke IUnknown dilakukan pada tingkat ini.

[in] dwImpLevel

Tingkat peniruan default untuk proksi. Nilai parameter ini hanya digunakan ketika prosesnya adalah klien. Ini harus menjadi nilai dari konstanta tingkat peniruan, kecuali untuk RPC_C_IMP_LEVEL_DEFAULT, yang bukan untuk digunakan dengan CoInitializeSecurity.

Panggilan keluar dari klien selalu menggunakan tingkat peniruan seperti yang ditentukan. (Ini tidak dinegosiasikan.) Panggilan masuk ke klien dapat berada di tingkat peniruan. Secara default, semua panggilan IUnknown dilakukan dengan tingkat peniruan ini, jadi bahkan aplikasi yang sadar keamanan harus mengatur tingkat ini dengan hati-hati. Untuk menentukan tingkat peniruan mana yang didukung setiap layanan autentikasi, lihat deskripsi layanan autentikasi dalam Paket COM dan Keamanan. Untuk informasi selengkapnya tentang tingkat peniruan, lihat Peniruan.

[in, optional] pAuthList

Penunjuk ke SOLE_AUTHENTICATION_LIST, yang merupakan array struktur SOLE_AUTHENTICATION_INFO . Daftar ini menunjukkan informasi untuk setiap layanan autentikasi yang dapat digunakan klien untuk memanggil server. Parameter ini digunakan oleh COM hanya ketika klien memanggil CoInitializeSecurity.

[in] dwCapabilities

Kemampuan tambahan klien atau server, ditentukan dengan mengatur satu atau beberapa nilai EOLE_AUTHENTICATION_CAPABILITIES . Beberapa nilai ini tidak dapat digunakan secara bersamaan, dan beberapa tidak dapat diatur ketika layanan autentikasi tertentu sedang digunakan. Untuk informasi selengkapnya tentang bendera ini, lihat bagian Keterangan.

[in, optional] pReserved3

Parameter ini dicadangkan dan harus NULL.

Nilai kembali

Fungsi ini dapat mengembalikan nilai pengembalian standar E_INVALIDARG, serta nilai berikut.

Menampilkan kode Deskripsi
S_OK
Menunjukkan keberhasilan.
RPC_E_TOO_LATE

CoInitializeSecurity telah dipanggil.

RPC_E_NO_GOOD_SECURITY_PACKAGES
Parameter asAuthSvc bukan NULL, dan tidak ada layanan autentikasi dalam daftar yang dapat didaftarkan. Periksa hasil yang disimpan di asAuthSvc untuk kode kesalahan khusus layanan autentikasi.
E_OUT_OF_MEMORY
Kehabisan memori.

Keterangan

Fungsi CoInitializeSecurity menginisialisasi lapisan keamanan dan menetapkan nilai yang ditentukan sebagai default keamanan. Jika suatu proses tidak memanggil CoInitializeSecurity, COM memanggilnya secara otomatis saat pertama kali antarmuka di-marshaled atau tidak terpecahkan, mendaftarkan keamanan default sistem. Tidak ada paket keamanan default yang terdaftar sampai saat itu.

Fungsi ini dipanggil tepat sekali per proses, baik secara eksplisit maupun implisit. Ini dapat dipanggil oleh klien, server, atau keduanya. Untuk aplikasi warisan dan aplikasi lain yang tidak secara eksplisit memanggil CoInitializeSecurity, COM memanggil fungsi ini secara implisit dengan nilai dari registri. Jika Anda mengatur keamanan di seluruh proses menggunakan registri lalu memanggil CoInitializeSecurity, nilai registri AppID akan diabaikan dan nilai CoInitializeSecurity akan digunakan.

CoInitializeSecurity dapat digunakan untuk mengambil alih izin akses di seluruh komputer dan izin akses khusus aplikasi, tetapi tidak untuk mengambil alih kebijakan pembatasan di seluruh komputer.

Jika pSecDesc menunjuk ke AppID, bendera EOAC_APPID harus diatur dalam dwCapabilities dan, ketika bendera EOAC_APPID diatur, semua parameter lain ke CoInitializeSecurity diabaikan. CoInitializeSecurity mencari tingkat autentikasi di bawah kunci AppID di registri dan menggunakannya untuk menentukan keamanan default. Untuk informasi selengkapnya tentang bagaimana kunci AppID digunakan untuk mengatur keamanan, lihat Mengatur Process-Wide Keamanan Melalui Registri.

Jika pSecDesc adalah penunjuk ke objek IAccessControl , bendera EOAC_ACCESS_CONTROL harus diatur dan dwAuthnLevel tidak boleh tidak ada. Objek IAccessControl digunakan untuk menentukan siapa yang dapat memanggil proses. DCOM akan MenambahkanRefIAccessControl dan akan Merilisnya ketika CoUninitialize dipanggil. Status objek IAccessControl tidak boleh diubah.

Jika pSecDesc adalah penunjuk ke SECURITY_DESCRIPTOR, bendera EOAC_APPID maupun EOAC_ACCESS_CONTROL tidak dapat diatur dalam dwCapabilities. Pemilik dan grup SECURITY_DESCRIPTOR harus diatur, dan sampai DCOM mendukung audit, ACL sistem harus NULL. Entri kontrol akses (ACE) dalam ACL diskresi (DACL) dari SECURITY_DESCRIPTOR digunakan untuk mengetahui penelepon mana yang diizinkan untuk terhubung ke objek proses. DACL tanpa ACE tidak mengizinkan akses, sementara NULL DACL akan mengizinkan panggilan dari siapa pun. Untuk informasi selengkapnya tentang ACL dan ACE, lihat Model Access Control. Aplikasi harus memanggil AccessCheck (bukan IsValidSecurityDescriptor) untuk memastikan bahwa SECURITY_DESCRIPTOR mereka dibentuk dengan benar sebelum memanggil CoInitializeSecurity.

Meneruskan pSecDesc sebagai NULL sangat tidak disarankan. Alternatif yang sesuai mungkin menggunakan SECURITY_DESCRIPTOR yang memungkinkan Semua Orang. Jika pSecDesc adalah NULL, bendera dalam dwCapabilities menentukan bagaimana CoInitializeSecurity menentukan izin akses yang akan digunakan server, sebagai berikut:

  • Jika bendera EOAC_APPID diatur, CoInitializeSecurity akan mencari nama .exe aplikasi di registri dan menggunakan AppID yang disimpan di sana.
  • Jika bendera EOAC_ACCESS_CONTROL diatur, CoInitializeSecurity akan mengembalikan kesalahan.
  • Jika bendera EOAC_APPID atau bendera EOAC_ACCESS_CONTROL tidak diatur, CoInitializeSecurity memungkinkan semua penelepon termasuk Pengguna Anonim Lokal dan Jarak Jauh.
Fungsi CoInitializeSecurity mengembalikan kesalahan jika bendera EOAC_APPID dan EOAC_ACCESS_CONTROL diatur dalam dwCapabilities.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows 2000 Server [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header combaseapi.h (termasuk Objbase.h)
Pustaka Ole32.lib
DLL Ole32.dll

Lihat juga

CoSetProxyBlanket

Keamanan di COM