LPSERVICE_MAIN_FUNCTIONA コールバック関数 (winsvc.h)
サービスのエントリ ポイント。
LPSERVICE_MAIN_FUNCTION 型は、このコールバック関数へのポインターを定義します。 ServiceMain は、アプリケーション定義関数名のプレースホルダーです。
構文
LPSERVICE_MAIN_FUNCTIONA LpserviceMainFunctiona;
void LpserviceMainFunctiona(
[in] DWORD dwNumServicesArgs,
[in] LPSTR *lpServiceArgVectors
)
{...}
パラメーター
[in] dwNumServicesArgs
lpServiceArgVectors 配列内の引数の数。
[in] lpServiceArgVectors
サービスを開始した StartService 関数の呼び出しによってサービスに渡される null で終わる引数文字列。 引数がない場合、このパラメーターには NULL を指定できます。 それ以外の場合、最初の引数 (lpServiceArgVectors[0]) はサービスの名前であり、その後に追加の引数 (lpServiceArgVectors[1] から lpServiceArgVectors[dwNumServicesArgs-1]) が続きます。
ユーザーがコントロール パネルから Services スナップインを使用して手動サービスを開始した場合、
戻り値
何一つ
備考
サービス プログラムは、1 つ以上のサービスを開始できます。 サービス プロセスには、開始できるサービスごとに SERVICE_TABLE_ENTRY 構造があります。 構造体は、サービス名と、そのサービスの ServiceMain 関数へのポインターを指定します。
サービス コントロール マネージャーは、サービスを開始する要求を受け取ると、サービス プロセスを開始します (まだ実行されていない場合)。 サービス プロセスのメイン スレッドは、StartServiceCtrlDispatcher 関数を呼び出し、SERVICE_TABLE_ENTRY 構造体の配列へのポインターを指定します。 次に、サービス コントロール マネージャーは、このサービス プロセスのサービス コントロール ディスパッチャーに開始要求を送信します。 サービス コントロール ディスパッチャーは、開始されるサービスの ServiceMain 関数を実行する新しいスレッドを作成します。
ServiceMain 関数は、RegisterServiceCtrlHandlerEx 関数を直ちに呼び出して、制御要求を処理する HandlerEx 関数を指定する必要があります。 次に、SetServiceStatus 関数を呼び出して、状態情報をサービス コントロール マネージャーに送信する必要があります。 これらの呼び出しの後、関数はサービスの初期化を完了する必要があります。 ServiceMain 関数で別のサービスを開始しないでください。
サービス コントロール マネージャー (SCM) は、サービスがSERVICE_RUNNINGの状態を報告するまで待機します。 SCM との対話を必要とするシステム内の他のコンポーネントは、この期間中にブロックされるため、サービスはできるだけ早くこの状態を報告することをお勧めします。 一部の関数では、直接または間接的に SCM との対話が必要になる場合があります。
SCM は初期化中にサービス コントロール データベースをロックするため、サービスが初期化中に StartService
さらに、サービスの初期化中にシステム関数を呼び出さないでください。 サービス コードは、SERVICE_RUNNINGの状態を報告した後にのみ、システム関数を呼び出す必要があります。
ServiceMain 関数は、グローバル イベントを作成し、このイベントで RegisterWaitForSingleObject 関数を呼び出して終了する必要があります。 これにより、ServiceMain 関数を実行しているスレッドが終了しますが、サービスは終了しません。 サービスが停止している場合、サービス コントロール ハンドラーは setServiceStatus
例
例については、「ServiceMain 関数の作成
手記
winsvc.h ヘッダーは、unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとしてLPSERVICE_MAIN_FUNCTIONを定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winsvc.h (Windows.h を含む) |
関連項目
RegisterServiceCtrlHandlerEx の
registerWaitForSingleObject の
SetServiceStatus の
StartServiceCtrlDispatcher の