Titik Masuk Layanan
Layanan umumnya ditulis sebagai aplikasi konsol. Titik masuk aplikasi konsol adalah fungsi utamanya . Fungsi utama menerima argumen dari nilai ImagePath dari kunci registri untuk layanan. Untuk informasi selengkapnya, lihat bagian Keterangan dari fungsi CreateService .
Ketika SCM memulai program layanan, SCM menunggunya untuk memanggil fungsi StartServiceCtrlDispatcher . Gunakan panduan berikut.
- Layanan jenis SERVICE_WIN32_OWN_PROCESS harus segera memanggil StartServiceCtrlDispatcher , dari utas utamanya. Anda dapat melakukan inisialisasi apa pun setelah layanan dimulai, seperti yang dijelaskan dalam Fungsi ServiceMain.
- Jika jenis layanan SERVICE_WIN32_SHARE_PROCESS dan ada inisialisasi umum untuk semua layanan dalam program, Anda dapat melakukan inisialisasi di utas utama sebelum memanggil StartServiceCtrlDispatcher, selama dibutuhkan kurang dari 30 detik. Jika tidak, Anda harus membuat utas lain untuk melakukan inisialisasi umum, sementara utas utama memanggil StartServiceCtrlDispatcher. Anda masih harus melakukan inisialisasi khusus layanan setelah layanan dimulai.
Fungsi StartServiceCtrlDispatcher mengambil struktur SERVICE_TABLE_ENTRY untuk setiap layanan yang terkandung dalam proses. Setiap struktur menentukan nama layanan dan titik masuk untuk layanan. Misalnya, lihat Menulis Fungsi utama Program Layanan.
Jika StartServiceCtrlDispatcher berhasil, utas panggilan tidak kembali sampai semua layanan yang berjalan dalam proses telah memasuki status SERVICE_STOPPED. SCM mengirimkan permintaan kontrol ke utas ini melalui pipa bernama. Utas bertindak sebagai dispatcher kontrol, melakukan tugas berikut:
- Buat utas baru untuk memanggil titik masuk yang sesuai saat layanan baru dimulai.
- Panggil fungsi handler yang sesuai untuk menangani permintaan kontrol layanan.
Topik terkait