Fungsi ChangeServiceConfigA (winsvc.h)

Mengubah parameter konfigurasi layanan.

Untuk mengubah parameter konfigurasi opsional, gunakan fungsi ChangeServiceConfig2 .

Sintaks

BOOL ChangeServiceConfigA(
  [in]            SC_HANDLE hService,
  [in]            DWORD     dwServiceType,
  [in]            DWORD     dwStartType,
  [in]            DWORD     dwErrorControl,
  [in, optional]  LPCSTR    lpBinaryPathName,
  [in, optional]  LPCSTR    lpLoadOrderGroup,
  [out, optional] LPDWORD   lpdwTagId,
  [in, optional]  LPCSTR    lpDependencies,
  [in, optional]  LPCSTR    lpServiceStartName,
  [in, optional]  LPCSTR    lpPassword,
  [in, optional]  LPCSTR    lpDisplayName
);

Parameter

[in] hService

Handel ke layanan. Handel ini dikembalikan oleh fungsi OpenService atau CreateService dan harus memiliki hak akses SERVICE_CHANGE_CONFIG . Untuk informasi selengkapnya, lihat Keamanan Layanan dan Hak Akses.

[in] dwServiceType

Jenis layanan. Tentukan SERVICE_NO_CHANGE jika Anda tidak mengubah jenis layanan yang ada; jika tidak, tentukan salah satu jenis layanan berikut.

Nilai Makna
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
Layanan driver sistem file.
SERVICE_KERNEL_DRIVER
0x00000001
Layanan driver.
SERVICE_WIN32_OWN_PROCESS
0x00000010
Layanan yang berjalan dalam prosesnya sendiri.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
Layanan yang berbagi proses dengan layanan lain.
 

Jika Anda menentukan SERVICE_WIN32_OWN_PROCESS atau SERVICE_WIN32_SHARE_PROCESS, dan layanan berjalan dalam konteks akun LocalSystem, Anda juga dapat menentukan jenis berikut.

Nilai Makna
SERVICE_INTERACTIVE_PROCESS
0x00000100
Layanan dapat berinteraksi dengan desktop.

Untuk informasi selengkapnya, lihat Layanan Interaktif.

[in] dwStartType

Opsi mulai layanan. Tentukan SERVICE_NO_CHANGE jika Anda tidak mengubah jenis mulai yang ada; jika tidak, tentukan salah satu nilai berikut.

Nilai Makna
SERVICE_AUTO_START
0x00000002
Layanan dimulai secara otomatis oleh manajer kontrol layanan selama startup sistem.
SERVICE_BOOT_START
0x00000000
Driver perangkat dimulai oleh pemuat sistem. Nilai ini hanya berlaku untuk layanan driver.
SERVICE_DEMAND_START
0x00000003
Layanan dimulai oleh manajer kontrol layanan saat proses memanggil fungsi StartService .
SERVICE_DISABLED
0x00000004
Layanan yang tidak dapat dimulai. Upaya untuk memulai layanan menghasilkan kode kesalahan ERROR_SERVICE_DISABLED.
SERVICE_SYSTEM_START
0x00000001
Driver perangkat 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. Tentukan SERVICE_NO_CHANGE jika Anda tidak mengubah kontrol kesalahan yang ada; jika tidak, tentukan salah satu nilai berikut.

Nilai Makna
SERVICE_ERROR_CRITICAL
0x00000003
Program startup mencatat kesalahan dalam log peristiwa, jika memungkinkan. Jika konfigurasi terakhir yang diketahui baik sedang dimulai, operasi startup gagal. Jika tidak, sistem dimulai ulang dengan konfigurasi baik yang terakhir diketahui.
SERVICE_ERROR_IGNORE
0x00000000
Program startup mengabaikan kesalahan dan melanjutkan operasi startup.
SERVICE_ERROR_NORMAL
0x00000001
Program startup mencatat kesalahan dalam log peristiwa tetapi melanjutkan operasi startup.
SERVICE_ERROR_SEVERE
0x00000002
Program startup mencatat kesalahan dalam log peristiwa. Jika konfigurasi terakhir yang diketahui baik sedang dimulai, operasi startup berlanjut. Jika tidak, sistem dimulai ulang dengan konfigurasi terakhir yang diketahui baik.

[in, optional] lpBinaryPathName

Jalur yang sepenuhnya memenuhi syarat ke file biner layanan. Tentukan NULL jika Anda tidak mengubah jalur yang ada. 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 ini 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 grup pemesanan beban di mana layanan ini adalah anggota. Tentukan NULL jika Anda tidak mengubah grup yang ada. Tentukan 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 ServiceGroupOrder dari kunci registri berikut:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control

[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 pengurutan beban dengan menentukan vektor pesanan tag di nilai GroupOrderList dari kunci registri berikut:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control

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 dapat dimulai. (Dependensi pada grup berarti bahwa layanan ini dapat berjalan jika setidaknya satu anggota grup berjalan setelah upaya untuk memulai semua anggota grup.) Tentukan NULL jika Anda tidak mengubah dependensi yang ada. Tentukan string kosong jika layanan tidak memiliki dependensi.

Anda harus mengawali nama grup dengan SC_GROUP_IDENTIFIER sehingga dapat dibedakan dari nama layanan, karena grup layanan dan layanan memiliki ruang nama yang sama.

[in, optional] lpServiceStartName

Nama akun tempat layanan harus berjalan. Tentukan NULL jika Anda tidak mengubah nama akun yang ada. 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 (perhatikan bahwa string C/C++ yang sesuai adalah ".\\UserName"). Untuk informasi selengkapnya, lihat Akun Pengguna Layanan dan peringatan di bagian Keterangan.

Proses bersama dapat berjalan sebagai pengguna mana pun.

Jika jenis layanan SERVICE_KERNEL_DRIVER atau SERVICE_FILE_SYSTEM_DRIVER, namanya 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, namanya 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 NULL jika Anda tidak mengubah kata sandi yang ada. 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.

[in, optional] lpDisplayName

Nama tampilan yang akan digunakan oleh aplikasi untuk mengidentifikasi layanan bagi penggunanya. Tentukan NULL jika Anda tidak mengubah nama tampilan yang ada; jika tidak, 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.

Parameter ini dapat menentukan string yang dilokalkan menggunakan format berikut:

@[path]dllname,-strID

String dengan strID pengidentifikasi dimuat dari nama dll; jalur bersifat opsional. Untuk informasi selengkapnya, lihat RegLoadMUIString.

Windows Server 2003 dan Windows XP: String yang dilokalkan tidak didukung sampai Windows Vista.

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. 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
ERROR_ACCESS_DENIED
Handel tidak memiliki hak akses SERVICE_CHANGE_CONFIG .
ERROR_CIRCULAR_DEPENDENCY
Dependensi layanan melingkar ditentukan.
ERROR_DUPLICATE_SERVICE_NAME
Nama tampilan sudah ada di database manajer pengontrol layanan, baik sebagai nama layanan atau sebagai nama tampilan lain.
ERROR_INVALID_HANDLE
Handel yang ditentukan tidak valid.
ERROR_INVALID_PARAMETER
Parameter yang ditentukan tidak valid.
ERROR_INVALID_SERVICE_ACCOUNT
Nama akun tidak ada, atau layanan ditentukan untuk berbagi file biner yang sama dengan layanan yang sudah diinstal tetapi dengan nama akun yang tidak sama dengan layanan yang diinstal.
ERROR_SERVICE_MARKED_FOR_DELETE
Layanan telah ditandai untuk dihapus.

Keterangan

Fungsi ChangeServiceConfig mengubah informasi konfigurasi untuk layanan yang ditentukan dalam database manajer kontrol layanan. Anda bisa mendapatkan informasi konfigurasi saat ini dengan menggunakan fungsi QueryServiceConfig .

Jika konfigurasi diubah untuk layanan yang berjalan, dengan pengecualian lpDisplayName, perubahan tidak berlaku sampai layanan dihentikan. Untuk memperbarui kredensial tanpa harus memulai ulang layanan, gunakan fungsi LsaCallAuthenticationPackage .

Keterangan Keamanan

Mengatur parameter lpServiceStartName mengubah akun masuk layanan. Hal ini dapat menyebabkan masalah. Jika Anda telah mendaftarkan nama perwakilan layanan (SPN), sekarang akan terdaftar di akun yang salah. Demikian pula, jika Anda telah menggunakan ACE untuk memberikan akses ke layanan, ACE sekarang akan memberikan akses ke akun yang salah.

Contoh

Misalnya, lihat Mengubah Konfigurasi 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

ChangeServiceConfig2

CreateService

OpenService

QueryServiceConfig

QueryServiceConfig2

QueryServiceDynamicInformation

Panduan Langkah demi Langkah Akun Layanan

Konfigurasi Layanan

Fungsi Layanan

StartService