SetServiceStatus

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

相關詞條

熱門詞條

聯絡我們