ServiceMain

https://msdn.microsoft.com/ja-jp/library/ms686001.aspx https://msdn.microsoft.com/ja-jp/library/ms686001.aspx

サービスプログラムはこの関数を特定のサービスのエントリポイント関数として指定します。
このコールバック関数へのポインタとして、LPSERVICE_MAIN_FUNCTION 型が定義されています。ServiceMain は、アプリケーション定義の関数名のプレースホルダです。

VOID WINAPI ServiceMain(
  DWORD dwArgc,     // 引数の数
  LPTSTR *lpszArgv  // 複数の引数からなる 1 つの配列
);

パラメータ

dwArgc
[入力]lpszArgv パラメータが指す配列内の引数の数が入ります。
lpszArgv
[入力]NULL で終わる引数文字列からなるポインタの配列へのポインタが入ります。配列内の最初の引数はサービス名であり、それ以降の引数は、StartService 関数を呼び出したプロセスがサービスを開始する際にサービスへ渡す文字列です。

戻り値

戻り値はありません。

解説

サービスプログラムは、1 つまたは複数のサービスを開始できます。サービスプログラムは自らが開始することのできる各サービスに対して 1 つの 構造体を保持しています。この構造体はサービス名と、そのサービスに対応する ServiceMain 関数へのポインタを指定します。
サービス制御マネージャは、サービス開始の要求を受け取ると、サービスプロセスを開始します(まだそのサービスが動作していない場合)。サービスプロセスのメインスレッドは、SERVICE_TABLE_ENTRY 構造体の配列へのポインタを指定して StartServiceCtrlDispatcher 関数を呼び出します。次いでサービス制御マネージャは、このサービスプロセスに関する開始の要求をサービス制御ディスパッチャへ送信します。サービス制御ディスパッチャは、開始されようとしているサービスの ServiceMain 関数を実行するために、新しいスレッドを作成します。

ServiceMain 関数は、即座に RegisterServiceCtrlHandler 関数を呼び出して、制御の要求を処理する Handler 関数を指定しなければなりません。次に、SetServiceStatus 関数を呼び出して、ステータス情報をサービス制御マネージャへ送信しなければなりません。これらの呼び出しが終わると、ServiceMain 関数はサービスの初期化作業を完了して、サービスが終了するのを待機します。
ServiceMain 関数は、サービスが終了する準備ができるまで制御を戻しません。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:対応していません
Windows CE:対応していません
ヘッダー:winsvc.h 内で宣言
インポートライブラリ:ユーザー定義

参照

HandlerRegisterServiceCtrlHandlerSetServiceStatus、、StartServiceCtrlDispatcher

表示: