LockServiceDatabase

【勇芳软件工作室】汉化HomePreviousNext

LockServiceDatabase功能锁定指定的数据库。

SC_LOCK LockServiceDatabase(

SC_HANDLE 【hSCManager】//服务控制管理器数据库的句柄
); 

参数

【hSCManager】

标识服务控制管理器数据库。OpenSCManager函数返回此句柄,该句柄必须具有SC_MANAGER_LOCK访问权限。

返回值

如果函数成功,则返回值是指定的服务控制管理器数据库的锁定。

如果函数失败,返回值为NULL。要获取扩展错误信息,请调用GetLastError.

错误

以下错误代码可能由服务控制管理器设置。其他错误代码可以由服务控制管理器调用的注册表功能设置。

含义
ERROR_ACCESS_DENIED没有使用SC_MANAGER_LOCK访问来打开指定的句柄。
ERROR_INVALID_HANDLE指定的句柄无效。
ERROR_SERVICE_DATABASE_LOCKED数据库被锁定。

备注

LockServiceDatabase函数尝试获取指定数据库上的锁。一次只能有一个进程可以锁定数据库。

锁是安装和配置程序和服务控制管理器使用的协议,用于序列化对注册表中服务树的访问。服务控制管理员唯一获取锁的时间是启动服务时。在使用ChangeServiceConfigSetServiceObjectSecurity功能重新配置服务之前,预期安装和配置程序将获取锁定。在使用注册表功能重新配置服务之前,他们也应该获取一个锁。该锁可防止服务控制管理器在重新配置时启动服务。

调用StartService功能以在锁定的数据库中启动服务失败。所有其他服务控制管理器功能不受锁定的影响。

在随后调用UnlockServiceDatabase功能之前,锁定被保持,直到指定了SC_LOCK句柄。如果持有锁的进程终止,则服务控制管理器将自动清除并释放锁。

也可以看看

ChangeServiceConfig, OpenSCManager, QueryServiceLockStatus, SetServiceObjectSecurity, StartService, UnlockServiceDatabase