共用方式為


SubscribeServiceChangeNotifications 函式

使用回呼函式訂閱服務狀態變更通知。

語法

DWORD WINAPI SubscribeServiceChangeNotifications(
  _In_     SC_HANDLE                     hService,
  _In_     SC_EVENT_TYPE                 eEventType,
  _In_     PSC_NOTIFICATION_CALLBACK     pCallback,
  _In_opt_ PVOID                         pCallbackContext,
  _Out_    PSC_NOTIFICATION_REGISTRATION *pSubscription
);

參數

hService [in]

服務的控制碼或服務控制管理員的控制碼, (SCM) 來監視變更。

OpenServiceCreateService函式會傳回服務的控制碼,而且必須具有SERVICE_QUERY_STATUS存取權限。 服務控制管理員的控制碼是由 OpenSCManager 函式傳回,而且必須具有 SC_MANAGER_ENUMERATE_SERVICE 存取權限。

eEventType [in]

指定應該報告的狀態變更類型。 此參數設定為 SC_EVENT_TYPE中指定的其中一個值。 此函式的行為會根據事件種類而有所不同,如下所示。

意義
SC_EVENT_DATABASE_CHANGE
0
已新增或刪除服務。 hService參數必須是 SCM 的控制碼。
SC_EVENT_PROPERTY_CHANGE
1
已更新一或多個服務屬性。 hService參數必須是服務的控制碼。
SC_EVENT_STATUS_CHANGE
2
服務的狀態已變更。 hService參數必須是服務的控制碼。

pCallback [in]

指定回呼函式。 回呼必須定義為具有 SC_NOTIFICATION_CALLBACK類型。 如需詳細資訊,請參閱<備註>。

pCallbackCoNtext [in, optional]

指標,表示此通知回呼的內容。

pSubscription [out]

傳回通知回呼註冊所產生的訂用帳戶指標。 呼叫端負責呼叫 UnsubscribeServiceChangeNotifications 以停止接收通知。

傳回值

如果函式成功,傳回值 會ERROR_SUCCESS

如果函式失敗,傳回值就是其中一個 系統錯誤碼

備註

回呼函式的宣告如下:

typedef VOID CALLBACK SC_NOTIFICATION_CALLBACK(
    _In_    DWORD                   dwNotify,
    _In_    PVOID                   pCallbackContext
);
typedef SC_NOTIFICATION_CALLBACK* PSC_NOTIFICATION_CALLBACK;

回呼函式會接收呼叫端所提供內容的指標。 回呼會因為服務狀態變更事件而叫用。 叫用回呼時,會提供SERVICE_NOTIFY_XXX值的位元遮罩,指出服務狀態變更的類型。 當回呼以零提供,而不是有效的SERVICE_NOTIFY_XXX值時,應用程式必須確認變更的內容。

回呼函式不得封鎖執行。 如果您預期回呼函式的執行需要一段時間,請將您在回呼函式中執行的工作卸載至個別執行緒,方法是將工作專案排入執行緒集區中的執行緒。 某些可讓回呼函式需要時間的工作類型包括執行檔案 I/O、等候事件,以及進行外部遠端程序呼叫。

規格需求

需求
最低支援的用戶端
Windows 8 [僅限傳統型應用程式]
最低支援的伺服器
Windows Server 2012 [僅限傳統型應用程式]
標頭
Winsvcp.h
DLL
SecHost.dll

另請參閱

CreateService

OpenService

OpenSCManager

UnsubscribeServiceChangeNotifications

QueryServiceDynamicInformation