Fungsi CreateServiceW (winsvc.h)
Membuat objek layanan dan menambahkannya ke database manajer kontrol layanan yang ditentukan.
Sintaks
SC_HANDLE CreateServiceW(
[in] SC_HANDLE hSCManager,
[in] LPCWSTR lpServiceName,
[in, optional] LPCWSTR lpDisplayName,
[in] DWORD dwDesiredAccess,
[in] DWORD dwServiceType,
[in] DWORD dwStartType,
[in] DWORD dwErrorControl,
[in, optional] LPCWSTR lpBinaryPathName,
[in, optional] LPCWSTR lpLoadOrderGroup,
[out, optional] LPDWORD lpdwTagId,
[in, optional] LPCWSTR lpDependencies,
[in, optional] LPCWSTR lpServiceStartName,
[in, optional] LPCWSTR lpPassword
);
Parameter
[in] hSCManager
Handel ke database manajer kontrol layanan. Handel ini dikembalikan oleh fungsi OpenSCManager dan harus memiliki hak akses SC_MANAGER_CREATE_SERVICE . Untuk informasi selengkapnya, lihat Keamanan Layanan dan Hak Akses.
[in] lpServiceName
Nama layanan yang akan diinstal. Panjang string maksimum adalah 256 karakter. Database manajer kontrol layanan mempertahankan kasus karakter, tetapi perbandingan nama layanan selalu tidak peka huruf besar/kecil. Garis miring (/) dan garis miring terbelakang (\) bukan karakter nama layanan yang valid.
[in, optional] lpDisplayName
Nama tampilan yang akan digunakan oleh program antarmuka pengguna untuk mengidentifikasi layanan. String ini memiliki panjang maksimum 256 karakter. Nama ini dipertahankan huruf besar/kecil di manajer kontrol layanan. Perbandingan nama tampilan selalu tidak peka huruf besar/kecil.
[in] dwDesiredAccess
Akses ke layanan. Sebelum memberikan akses yang diminta, sistem memeriksa token akses proses panggilan. Untuk daftar nilai, lihat Keamanan Layanan dan Hak Akses.
[in] dwServiceType
Jenis layanan. Parameter ini bisa menjadi salah satu nilai berikut.
Nilai | Makna |
---|---|
|
Dicadangkan. |
|
Layanan driver sistem file. |
|
Layanan driver. |
|
Dicadangkan. |
|
Layanan yang berjalan dalam prosesnya sendiri. |
|
Layanan yang berbagi proses dengan satu atau beberapa layanan lainnya. Untuk informasi selengkapnya, lihat Program Layanan. |
Jika Anda menentukan SERVICE_WIN32_OWN_PROCESS atau SERVICE_WIN32_SHARE_PROCESS, dan layanan berjalan dalam konteks akun LocalSystem, Anda juga dapat menentukan nilai berikut.
Nilai | Makna |
---|---|
|
Layanan ini dapat berinteraksi dengan desktop.
Untuk informasi selengkapnya, lihat Layanan Interaktif. |
[in] dwStartType
Opsi mulai layanan. Parameter ini bisa menjadi salah satu nilai berikut.
Nilai | Makna |
---|---|
|
Layanan dimulai secara otomatis oleh manajer kontrol layanan selama startup sistem. Untuk informasi selengkapnya, lihat Memulai Layanan Secara Otomatis. |
|
Driver perangkat dimulai oleh pemuat sistem. Nilai ini hanya berlaku untuk layanan driver. |
|
Layanan dimulai oleh manajer kontrol layanan saat proses memanggil fungsi StartService . Untuk informasi selengkapnya, lihat Memulai Layanan sesuai Permintaan. |
|
Layanan yang tidak dapat dimulai. Upaya untuk memulai layanan menghasilkan kode kesalahan ERROR_SERVICE_DISABLED. |
|
Driver perangkat yang dimulai oleh fungsi IoInitSystem . Nilai ini hanya berlaku untuk layanan driver. |
[in] dwErrorControl
Tingkat keparahan kesalahan, dan tindakan yang diambil, jika layanan ini gagal dimulai. Parameter ini bisa menjadi salah satu nilai berikut.
[in, optional] lpBinaryPathName
Jalur yang sepenuhnya memenuhi syarat ke file biner layanan. Jika jalur berisi spasi, jalur harus dikutip sehingga ditafsirkan dengan benar. Misalnya, "d:\my share\myservice.exe" harus ditentukan sebagai ""d:\my share\myservice.exe"".
Jalur juga dapat menyertakan argumen untuk layanan mulai otomatis. Misalnya, "d:\myshare\myservice.exe arg1 arg2". Argumen ini diteruskan ke titik entri layanan (biasanya fungsi utama ).
Jika Anda menentukan jalur pada komputer lain, berbagi harus dapat diakses oleh akun komputer komputer komputer lokal karena ini adalah konteks keamanan yang digunakan dalam panggilan jarak jauh. Namun, persyaratan ini memungkinkan potensi kerentanan di komputer jarak jauh memengaruhi komputer lokal. Oleh karena itu, yang terbaik adalah menggunakan file lokal.
[in, optional] lpLoadOrderGroup
Nama-nama grup pengurutan beban di mana layanan ini adalah anggota. Tentukan NULL atau string kosong jika layanan bukan milik grup.
Program startup menggunakan grup pengurutan beban untuk memuat grup layanan dalam urutan tertentu sehubungan dengan grup lain. Daftar grup pengurutan beban terkandung dalam nilai registri berikut: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ServiceGroupOrder
[out, optional] lpdwTagId
Penunjuk ke variabel yang menerima nilai tag yang unik dalam grup yang ditentukan dalam parameter lpLoadOrderGroup . Tentukan NULL jika Anda tidak mengubah tag yang ada.
Anda dapat menggunakan tag untuk memesan startup layanan dalam grup pemesanan beban dengan menentukan vektor pesanan tag dalam nilai registri berikut:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GroupOrderList
Tag hanya dievaluasi untuk layanan driver yang memiliki jenis mulai SERVICE_BOOT_START atau SERVICE_SYSTEM_START .
[in, optional] lpDependencies
Penunjuk ke array ganda yang dihentikan null dari nama layanan yang dipisahkan null atau grup pengurutan beban yang harus dimulai sistem sebelum layanan ini. Tentukan NULL atau string kosong jika layanan tidak memiliki dependensi. Dependensi pada grup berarti bahwa layanan ini dapat berjalan jika setidaknya satu anggota grup berjalan setelah upaya untuk memulai semua anggota grup.
Anda harus mengawali nama grup dengan SC_GROUP_IDENTIFIER sehingga dapat dibedakan dari nama layanan, karena layanan dan grup layanan memiliki ruang nama yang sama.
[in, optional] lpServiceStartName
Nama akun tempat layanan harus berjalan. Jika jenis layanan SERVICE_WIN32_OWN_PROCESS, gunakan nama akun dalam formulirNamaPenggunaNama Domain\. Proses layanan akan masuk sebagai pengguna ini. Jika akun milik domain bawaan, Anda dapat menentukan .\UserName.
Jika parameter ini NULL, CreateService menggunakan akun LocalSystem. Jika jenis layanan menentukan SERVICE_INTERACTIVE_PROCESS, layanan harus berjalan di akun LocalSystem.
Jika parameter ini adalah NT AUTHORITY\LocalService, CreateService menggunakan akun LocalService. Jika parameternya adalah NT AUTHORITY\NetworkService, CreateService menggunakan akun NetworkService.
Proses bersama dapat berjalan sebagai pengguna mana pun.
Jika jenis layanan SERVICE_KERNEL_DRIVER atau SERVICE_FILE_SYSTEM_DRIVER, nama tersebut adalah nama objek driver yang digunakan sistem untuk memuat driver perangkat. Tentukan NULL jika driver menggunakan nama objek default yang dibuat oleh sistem I/O.
Layanan dapat dikonfigurasi untuk menggunakan akun terkelola atau akun virtual. Jika layanan dikonfigurasi untuk menggunakan akun layanan terkelola, nama tersebut adalah nama akun layanan terkelola. Jika layanan dikonfigurasi untuk menggunakan akun virtual, tentukan nama sebagai NT SERVICE\ServiceName. Untuk informasi selengkapnya tentang akun layanan terkelola dan akun virtual, lihat Panduan Langkah demi Langkah Akun Layanan.
Windows Server 2008, Windows Vista, Windows Server 2003 dan Windows XP: Akun layanan terkelola dan akun virtual tidak didukung hingga Windows 7 dan Windows Server 2008 R2.
[in, optional] lpPassword
Kata sandi ke nama akun yang ditentukan oleh parameter lpServiceStartName . Tentukan string kosong jika akun tidak memiliki kata sandi atau jika layanan berjalan di akun LocalService, NetworkService, atau LocalSystem. Untuk informasi selengkapnya, lihat Daftar Catatan Layanan.
Jika nama akun yang ditentukan oleh parameter lpServiceStartName adalah nama akun layanan terkelola atau nama akun virtual, parameter lpPassword harus NULL.
Kata sandi diabaikan untuk layanan driver.
Mengembalikan nilai
Jika fungsi berhasil, nilai yang dikembalikan adalah handel ke layanan.
Jika fungsi gagal, nilai yang dikembalikan adalah NULL. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Kode kesalahan berikut dapat diatur oleh manajer kontrol layanan. Kode kesalahan lainnya dapat diatur oleh fungsi registri yang dipanggil oleh manajer kontrol layanan.
Menampilkan kode | Deskripsi |
---|---|
|
Handel ke database SCM tidak memiliki hak akses SC_MANAGER_CREATE_SERVICE . |
|
Dependensi layanan melingkar ditentukan. |
|
Nama tampilan sudah ada dalam database manajer kontrol layanan baik sebagai nama layanan atau sebagai nama tampilan lain. |
|
Handel ke database manajer kontrol layanan yang ditentukan tidak valid. |
|
Nama layanan yang ditentukan tidak valid. |
|
Parameter yang ditentukan tidak valid. |
|
Nama akun pengguna yang ditentukan dalam parameter lpServiceStartName tidak ada. |
|
Layanan yang ditentukan sudah ada dalam database ini. |
|
Layanan yang ditentukan sudah ada dalam database ini dan telah ditandai untuk dihapus. |
Keterangan
Fungsi CreateService membuat objek layanan dan menginstalnya di database manajer kontrol layanan dengan membuat kunci dengan nama yang sama dengan layanan di bawah kunci registri berikut:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
Informasi yang ditentukan oleh CreateService, ChangeServiceConfig, dan ChangeServiceConfig2 disimpan sebagai nilai di bawah kunci ini. Berikut ini adalah contoh nilai yang disimpan untuk layanan.
Nilai | Deskripsi |
---|---|
DependOnGroup | Grup pemesanan beban tempat layanan ini bergantung, seperti yang ditentukan oleh lpDependencies. |
DependOnService | Layanan yang bergantung pada layanan ini, seperti yang ditentukan oleh lpDependencies. |
Deskripsi | Deskripsi yang ditentukan oleh ChangeServiceConfig2. |
DisplayName | Nama tampilan yang ditentukan oleh lpDisplayName. |
ErrorControl | Kontrol kesalahan ditentukan oleh dwErrorControl. |
FailureActions | Tindakan kegagalan yang ditentukan oleh ChangeServiceConfig2. |
Grup | Muat grup pemesanan yang ditentukan oleh lpLoadOrderGroup. Perhatikan bahwa mengatur nilai ini dapat mengambil alih pengaturan nilai DependOnService . |
ImagePath | Nama file biner, seperti yang ditentukan oleh lpBinaryPathName. |
ObjectName | Nama akun yang ditentukan oleh lpServiceStartName. |
Mulai | Kapan harus memulai layanan, seperti yang ditentukan oleh dwStartType. |
Menandai | Pengidentifikasi tag yang ditentukan oleh lpdwTagId. |
Jenis | Jenis layanan yang ditentukan oleh dwServiceType. |
Program penyiapan dan layanan itu sendiri dapat membuat subkunci tambahan untuk informasi khusus layanan.
Handel yang dikembalikan hanya valid untuk proses yang disebut CreateService. Ini dapat ditutup dengan memanggil fungsi CloseServiceHandle .
Jika Anda membuat layanan yang berbagi proses, hindari fungsi panggilan dengan efek di seluruh proses, seperti ExitProcess. Selain itu, jangan membongkar DLL layanan Anda.
Contoh
Misalnya, lihat Menginstal Layanan.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | winsvc.h (sertakan Windows.h) |
Pustaka | Advapi32.lib |
DLL | Advapi32.dll |
Lihat juga
QueryServiceDynamicInformation
Panduan Langkah demi Langkah Akun Layanan