SetServiceStatus,是一種函式,用於更新服務控制管理器調用服務的狀態信息。
基本介紹
- 中文名:SetServiceStatus
- 外文名:SetServiceStatus
- 分類:函式
- 備註:函式介紹
函式名,函式原型,參數,返回值,備註,參考資料,
函式名
SetServiceStatus
函式原型
BOOL WINAPI SetServiceStatus(
SERVICE_STATUS_HANDLE hServiceStatus,
LPSERVICE_STATUS lpServiceStatus
);
參數
hservicestatus
對當前服務狀態信息結構的處理。這種處理是由registerservicectrlhandlerex函式返回。
lpservicestatus
一個指向包含新的呼叫服務狀態信息的SERVICE_STATUS結構。
返回值
如果函式成功,返回值為非零。
如果函式失敗,返回值為零。為了獲得更多的錯誤信息,調用GetLastError。
以下錯誤代碼可以由服務控制管理器設定。
可以通過服務控制管理器調用的註冊表函式設定其他錯誤代碼。
返回代碼描述
ERROR_INVALID_DATA
指定的服務狀態結構無效。
ERROR_INVALID_HANDLE
指定的句柄無效。
備註
一個ServiceMain函式首先會調用
RegisterServiceCtrlHandlerEx函式來獲得該服務的SERVICE_STATUS_HANDLE。
然後,它會立即調用SetServiceStatus函式來通知服務控制管理器,
其狀態SERVICE_START_PENDING。
在初始化期間,該服務可以提供更新的狀態,以表明它正在取得進步,
但它需要更多的時間。一個常見的錯誤是服務有主執行緒進行初始化,
而一個單獨的執行緒會繼續調用SetServiceStatus以防止服務控制管理器從標記為掛起。
但是,如果主執行緒掛起,那么服務啟動結束在一個無限循環,
因為工作執行緒繼續報告主執行緒正在取得進展。
處理控制請求後,該服務的處理函式必須調用SetServiceStatus如果服務狀態更改報告其新的狀態,
以服務控制管理器。它僅需要這樣做,當該服務改變狀態,當它被處理停止或關斷控制,
比如。服務也可以使用此功能在任何時間從服務通知的狀態變化,
比如當服務必須停止服務控制管理器的任何執行緒由於可恢復錯誤。
一個服務只有在調用RegisterServiceCtrlHandlerEx這個函式後才可以獲取服務狀態句柄。
參考資料
ServiceStatus function