PROTOCOL_CL_MAKE_CALL_COMPLETE fungsi panggilan balik (ndis.h)

Fungsi ProtocolClMakeCallComplete digunakan oleh klien NDIS berorientasi koneksi yang melakukan panggilan keluar. Klien tersebut harus memiliki fungsi ProtocolClMakeCallComplete untuk menyelesaikan operasi asinkron yang mereka mulai dengan NdisClMakeCall. Jika tidak, fungsi ProtocolClMakeCallComplete yang terdaftar dari driver protokol seperti itu hanya dapat mengembalikan kontrol.

Catatan Anda harus mendeklarasikan fungsi dengan menggunakan jenis PROTOCOL_CL_MAKE_CALL_COMPLETE . Untuk informasi selengkapnya, lihat bagian Contoh berikut ini.
 

Sintaks

PROTOCOL_CL_MAKE_CALL_COMPLETE ProtocolClMakeCallComplete;

void ProtocolClMakeCallComplete(
  [in]           NDIS_STATUS Status,
  [in]           NDIS_HANDLE ProtocolVcContext,
  [in, optional] NDIS_HANDLE NdisPartyHandle,
  [in]           PCO_CALL_PARAMETERS CallParameters
)
{...}

Parameter

[in] Status

Menentukan status akhir panggilan asli klien ke NdisClMakeCall, yang bisa menjadi salah satu dari berikut ini:

NDIS_STATUS_SUCCESS

Upaya klien untuk menyiapkan koneksi virtual yang berhasil. Akibatnya, klien dapat melanjutkan untuk melakukan transfer pada VC aktif menggunakan NdisVcHandle yang dikembalikan oleh NdisCoCreateVc, yang telah disimpan klien di area konteks per-VC di ProtocolVcContext .

NDIS_STATUS_RESOURCES

NDIS, manajer panggilan, atau driver yang mendasar tidak dapat mengalokasikan sumber daya yang memadai untuk menyiapkan koneksi.

NDIS_STATUS_XXX

Manajer panggilan atau driver miniport yang mendasar gagal membuat koneksi aktif dan NDIS menyebarkan status kegagalan yang ditentukan driver ini ke klien.

[in] ProtocolVcContext

Menentukan handel ke area konteks per VC klien, yang awalnya disediakan klien ke NDIS ketika disebut NdisCoCreateVc untuk menyiapkan VC untuk panggilan keluarnya.

[in, optional] NdisPartyHandle

Jika Status NDIS_STATUS_SUCCESS dan klien membuat VC multipoint dengan meneruskan handle ProtocolPartyContext eksplisit ke NdisClMakeCall, ini adalah NdisPartyHandle yang valid. Jika tidak, parameter ini adalah NULL.

ProtocolClMakeCallComplete harus menyimpan input NdisPartyHandle yang valid, biasanya di area konteks per pihak klien. Klien harus menggunakan handel ini jika (atau ketika) melakukan panggilan berikutnya ke NdisClDropParty atau NdisClCloseCall yang mengacu pada pihak ini.

[in] CallParameters

Penunjuk ke struktur CO_CALL_PARAMETERS yang di-buffer. Klien mengalokasikan buffer ini dan menginisialisasi struktur ini dengan data yang ditentukan klien sebelum meneruskan pointer ini ke NdisClMakeCall. Saat memproses permintaan klien, manajer panggilan dapat memodifikasi data ini untuk mencerminkan hasil negosiasinya dengan jaringan atau dengan peer sinyal.

Nilai kembali

Tidak ada

Keterangan

Panggilan ke ProtocolClMakeCallComplete menunjukkan bahwa manajer panggilan telah selesai memproses permintaan klien untuk membuat koneksi virtual dengan NdisClMakeCall.

Jika upaya klien untuk membuat panggilan keluar tidak berhasil ( Status input adalah apa pun kecuali NDIS_STATUS_SUCCESS), ProtocolClMakeCallComplete harus melakukan hal berikut:

  • Lepaskan atau siapkan untuk menggunakan kembali area ProtocolPartyContext , jika ada, dan buffer di CallParameters yang dialokasikan klien.
  • Robek VC yang dibuat klien dengan panggilan ke NdisCoDeleteVc dan lepaskan atau bersiap untuk menggunakan kembali area ProtocolVcContext yang dialokasikan klien.
Jika tidak, ProtocolClMakeCallComplete harus melakukan hal berikut:
  1. Periksa anggota Bendera struktur di CallParameters untuk melihat apakah CALL_PARAMETERS_CHANGED diatur, yang menunjukkan bahwa manajer panggilan memodifikasi parameter panggilan yang disediakan klien.
  2. Jika demikian, periksa data di CallParameters untuk menentukan apakah data tersebut dapat diterima untuk koneksi ini.

    Misalnya, klien mungkin mempertahankan parameter panggilan buffer untuk VC aktif, menyimpan NdisPartyHandle jika ini adalah VC multipoint, dan umumnya membuat klien siap untuk transfer berikutnya dan operasi lain pada VC aktif jika menemukan parameter panggilan yang diberikan memuaskan.

  3. Jika tidak, protokol sinyal menentukan apakah klien dapat mencoba bernegosiasi ulang untuk parameter panggilan yang dapat diterima dengan manajer panggilan.

    Misalnya, manajer panggilan tertentu mungkin memungkinkan kliennya untuk memanggil NdisClModifyCallQoS satu atau beberapa kali dalam keadaan ini.

  4. Jika parameter panggilan yang dimodifikasi CM tidak dapat diterima dan negosiasi ulang lebih lanjut tidak mungkin, ProtocolClMakeCallComplete harus merobohkan panggilan dengan NdisClCloseCall.

    Dalam hal ini, ProtocolClMakeCallCompletetidak boleh mencoba merilis sumber daya yang dialokasikan klien saat kembali dari NdisClCloseCall tetapi hanya dapat mengembalikan kontrol. Sebagai gantinya, klien harus merilis sumber daya yang dialokasikannya (atau mempersiapkannya untuk digunakan kembali) dalam fungsi ProtocolClCloseCallComplete - nya.

Contoh

Untuk menentukan fungsi ProtocolClMakeCallComplete , Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis fungsi yang Anda tentukan. Windows menyediakan sekumpulan tipe fungsi untuk pengandar. Mendeklarasikan fungsi menggunakan jenis fungsi membantu Analisis Kode untuk Driver, Pemverifikasi Driver Statis (SDV), dan alat verifikasi lainnya menemukan kesalahan, dan itu adalah persyaratan untuk menulis driver untuk sistem operasi Windows.

Misalnya, untuk menentukan fungsi ProtocolClMakeCallComplete yang diberi nama "MyClMakeCallComplete", gunakan jenis PROTOCOL_CL_MAKE_CALL_COMPLETE seperti yang ditunjukkan dalam contoh kode ini:

PROTOCOL_CL_MAKE_CALL_COMPLETE MyClMakeCallComplete;

Kemudian, terapkan fungsi Anda sebagai berikut:

_Use_decl_annotations_
VOID
 MyClMakeCallComplete(
    NDIS_STATUS  Status,
    NDIS_HANDLE  ProtocolVcContext,
    NDIS_HANDLE  NdisPartyHandle,
    PCO_CALL_PARAMETERS  CallParameters
    )
  {...}

Jenis fungsi PROTOCOL_CL_MAKE_CALL_COMPLETE didefinisikan dalam file header Ndis.h. Untuk mengidentifikasi kesalahan secara lebih akurat saat Anda menjalankan alat analisis kode, pastikan untuk menambahkan anotasi Use_decl_annotations ke definisi fungsi Anda. Anotasi Use_decl_annotations memastikan bahwa anotasi yang diterapkan ke jenis fungsi PROTOCOL_CL_MAKE_CALL_COMPLETE dalam file header digunakan. Untuk informasi selengkapnya tentang persyaratan untuk deklarasi fungsi, lihat Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver NDIS.

Untuk informasi tentang Use_decl_annotations, lihat Perilaku Fungsi Anotasi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Didukung untuk driver NDIS 6.0 dan NDIS 5.1 (lihat ProtocolClMakeCallComplete (NDIS 5.1)) di Windows Vista. Didukung untuk driver NDIS 5.1 (lihat ProtocolClMakeCallComplete (NDIS 5.1)) di Windows XP.
Target Platform Windows
Header ndis.h (termasuk Ndis.h)
IRQL <= DISPATCH_LEVEL

Lihat juga

CO_CALL_PARAMETERS

NdisClCloseCall

NdisClDropParty

NdisClMakeCall

NdisCmMakeCallComplete

NdisCoCreateVc

NdisCoDeleteVc

NdisFreeMemory

NdisFreeToNPagedLookasideList

NdisMCmMakeCallComplete

ProtocolClCloseCallComplete

ProtocolCmMakeCall