https://github.com/mox9378/Cpp-Simple-Windows-Service-Example:必要に応じクローン場合は、ソースの例としては、githubの上掛け
、私のQQ番号について話すことができるC ++ / Pythonの友人へようこそ:2303186535
以下は、添付の関連構造と機能について説明します。
構造体
上記Service_Statusは制御を受け取る/構造/サービスタイプとサービスの動作を定義し、エラーコードの形式を指定します
1つのtypedef 構造体_SERVICE_STATUS { 2 DWORD dwServiceType; // サービスタイプ 3。 DWORD dwCurrentState; // サービスの現在の動作状態 4。 DWORD dwControlsAccepted; // タイプの時間、サービス・コントロール・レジスタ。このパラメータのデフォルトは0 5 DWORD dwWin32ExitCode; // 、サービス[スタート] / [停止]終了コードを指定し、デフォルト0 6 DWORD dwServiceSpecificExitCode、デフォルトは0で、パラメータはdwWin2ExitCode無視されたときにサービスが実行されたときに指定するか、またはエラーコードを停止dwWin2ExitCode ERROR_SERVICE_SPECIFIC_ERRORザとして指定されない限り 7 DWORD dwCheckPoint; // デフォルト値0 8。 DWORD dwWaitHint; // デフォルト値0 。9 } LPSERVICE_STATUS上記Service_Statusの、*。
1つのtypedef 構造体_QUERY_SERVICE_CONFIG { 2 DWORD dwServiceType。 3 DWORD dwStartType。 4 DWORD dwErrorControl。 5 LPTSTR lpBinaryPathName。 6 LPTSTR lpLoadOrderGroup。 7 DWORD dwTagId。 8 LPTSTR lpDependencies。 9 LPTSTR lpServiceStartName。 10 LPTSTR lpDisplayName。 11 } QUERY_SERVICE_CONFIG、* LPQUERY_SERVICE_CONFIG。
同様の構造パラメータQUERY_SERVICE_CONFIGと上記Service_Status。
1つのtypedef 構造体_ENUM_SERVICE_STATUS { 2 LPTSTR lpServiceName。 3 LPTSTR lpDisplayName。 4つの 上記Service_Status ServiceStatus。 5 } ENUM_SERVICE_STATUS、* LPENUM_SERVICE_STATUS。
ENUM_SERVICE_STATUSは、サービス、表示名の名前が含まれています。
1 SC_HANDLE OpenSCManager( 2 LPCTSTR lpMachineName、 // コンピュータ名 3 LPCTSTR lpDatabaseName、 // SCMデータベース名 4 DWORDのdwDesiredAccess // アクセスタイプ 5)。
機能:OpenSCManager
Open Serverのコントロールマネージャ
パラメータ:
lpMachineNameは、//それがNULLであれば、それはのように「\\」ステッチパスネットワークパス形式にする場合、デフォルトでは、ローカルで、コンピュータの名前を指定します。
lpDatabaseNameは //指定されたデータベース名を開いて、それがNULLの場合、デフォルトのデフォルトのサービスを開きますデータベース。
dwDesiredAccess //するためのアクセス方法を指定する
値を返す:
関数が成功すると、戻り値は、ハンドル(SC_HANDLE)が開かれています
1 SC_HANDLE CreateService( 2 SC_HANDLE hSCManager、 // SCMデータベースにハンドル 3 LPCTSTR lpServiceName、 // 開始するサービスの名前 4 LPCTSTR lpDisplayNameを、 // 表示名 5 DWORDのdwDesiredAccess、 // サービスへのアクセスのタイプ 6 DWORD dwServiceType、 // サービスの種類 7 DWORDのdwStartType、 // サービスを開始する 8 DWORD dwErrorControlを、 // サービス障害の重症度 9 LPCTSTR lpBinaryPathName、 // バイナリファイルの名前 10 LPCTSTR lpLoadOrderGroup、 // ロード順序グループの名前 11 LPDWORD lpdwTagId、 // タグ識別子 12 LPCTSTR lpDependencies、 // 依存名の配列 13 LPCTSTR lpServiceStartName、// アカウント名 14 LPCTSTR lpPassword / / アカウントのパスワード 15)。
機能:CreateService
のサービスを作成するための約。
パラメータ説明:
hSCManager // OpenSCManagerを開くためにハンドル
lpServiceNameは //名登録サービスを指定します
lpDisplayNameは//名登録サービス表示を指定します
dwDesiredAccess //指定されたサービスは、アクセス制御をサポート作成
dwServiceType //指定されたサービスの種類を作成します
dwStartTypeは //サービスのスタートアップの種類を指定します
dwErrorControlは、 エラーが発生したとき//エラー処理を指定します
lpBinaryPathName //指定されたプログラムのパス
lpLoadOrderGroup //指定されたサービスは、グループに属している、すべてのグループがNULLではありません
lpdwTagId //何の所属グループは、この値はNULLではない場合には
lpDependencies //依存関係が存在しない場合は、この値はNULLです
lpServiceStartName //アカウントのLocalSystemを開始するために、NULLとして指定
lpPassword とき// lpServiceStartNameが NULLではない、あなたは、このパラメータを指定する必要があります。このパラメータは、指定lpServiceStartNameのパスワードを
戻り値:
関数が成功した場合、戻りインスタンスはSC_HANDLEのハンドル。
関数が失敗した場合、それはNULLを返し、エラーコードを取得するにはGetLastErrorを呼び出します。
1 BOOL EnumServicesStatus( 2 SC_HANDLE hSCManager、 // SCMデータベースにハンドル 3 DWORD dwServiceType、 // サービスタイプ 4 DWORD dwServiceState、 // サービス状態 5 LPENUM_SERVICE_STATUS lpServices、// ステータスバッファ 6 DWORD cbBufSize、 // ステータス・バッファのサイズ 7 LPDWORD pcbBytesNeeded、 // 必要なバッファサイズ 8 LPDWORD lpServicesReturned、 // エントリの数が返された 9 LPDWORD lpResumeHandle // 次のエントリ 10)。
機能:EnumServicesStatus
現在登録されているすべてのサービスを列挙し、情報を得ることができる機能は、すべてのサービスと、受信機は、十分に大きくする必要があります
パラメータ:
hSCManager //オープンハンドル
dwServiceType サービスの種類[SERVICE_WIN32 / SERVICE_DRIVER]を列挙する//
dwServiceState //列挙する状態
lpServices // OUT:ENUM_SERVICE_STATUSの構造の出力パラメータ、構造体=サービス情報。
cbBufSize //指定されたlpServicesの バイト単位のサイズ
pcbBytesNeeded // OUT:必要な実際のサイズを受信
lpServicesReturned サービスを受ける数://アウト
lpResumeHandle //初めて関数を呼び出す、このパラメータは、関数呼び出しが成功した場合、ゼロでなければなりません。このパラメータは、関数は0を返すと、のGetLastError == ERROR_MORE_DATAが複数の追加のデータのためのサービスの次のノードを指すアドレスを表す0です。
戻り値:
この関数はゼロ以外の戻りが成功します。
関数はゼロを返すことに失敗しました
1 SC_HANDLEのOpenService( 2 SC_HANDLE hSCManager、 // SCMデータベースにハンドル 3 LPCTSTR lpServiceName、// サービス名 4 のDWORDのdwDesiredAccess // アクセス 5)。
機能:のOpenService
指定されたサービスを開きます。
パラメータ:
hSCManager //ハンドル
lpServiceName オープンする//サービス名
dwDesiredAccess //は道を開きます
戻り値:
サービス呼び出しが正常に開くためにハンドルを返し、
コールは、NULLを返すことができませんでした。
1 BOOL QueryServiceConfig( 2 SC_HANDLE hService、 // サービスへのハンドル 3 LPQUERY_SERVICE_CONFIG lpServiceConfig、// バッファ 4 DWORD cbBufSize、 // バッファのサイズ 5 LPDWORD pcbBytesNeeded // バイトが必要 6)。
機能:QueryServiceConfig
より多くの情報照会サービスについて
パラメータ:
hService //サービスを開くには、ハンドル
lpServiceConfig // OUT:受信サービス構造情報[ QUERY_SERVICE_CONFIG ]
cbBufSize //指定されたlpServiceConfigのバイト単位のサイズ
pcbBytesNeeded バイト数が実際に受信:// OUT
戻り値:
呼び出しが成功し、0以外の値を返します
コールはゼロを返すことができませんでした。
1 BOOL QueryServiceConfig2( 2 SC_HANDLE hService、 // サービスへのハンドル 3 DWORD dwInfoLevel、 // 情報レベル 4 LPBYTE lpBuffer、 // バッファ 5 DWORD cbBufSizeは、 // バッファのサイズ 6 LPDWORD pcbBytesNeeded // バイトが必要 7)。
機能:QueryServiceConfig2
参照して、情報サービスは、具体的に記述情報を照会しQueryServiceConfig。
1 BOOL QueryServiceStatus( 2 SC_HANDLE hService、 // サービスへのハンドル 3つの LPSERVICE_STATUS lpServiceStatus // サービスの状態 4)。
機能:QueryServiceStatus
クエリの実行状態サービス
パラメータ:
hService //ハンドル
lpServiceStatus // OUT:サービスのステータスを受ける構造体へのポインタ上記Service_Status
戻り値:
呼び出しが成功し、0以外の値を返します
コールはゼロを返すことができませんでした。
1 BOOLのControlService( 2 SC_HANDLE hService、 // サービスへのハンドル 3 DWORD dwControl、 // 制御コード 4 LPSERVICE_STATUS lpServiceStatus // ステータス情報 5)。
機能:のControlService
運用管理サービス
パラメータ:
hService //インスタンスが開くように扱います
dwControl //制御フラグ
lpServiceStatus 構造、受信した詳細サービス情報上記Service_Status // OUT
戻り値:
呼び出しが成功し、0以外の値を返します
コールはゼロを返すことができませんでした。
1 BOOLをStartService( 2 SC_HANDLE hService、 // サービスへのハンドル 3つ のDWORD dwNumServiceArgsを、 // 引数の数 4 LPCTSTR * lpServiceArgVectors // 引数の配列 5)。
機能:
登録されたサービスを開始します
パラメータ:
hServiceは //開くまたは作成するためにハンドル
dwNumServiceArgs //サービスパラメータは、0することができ
lpServiceArgVectorsは //パラメータも渡されない場合は、NULLを指定できます
戻り値:
呼び出しが成功し、0以外の値を返します
コールはゼロを返すことができませんでした。
1 BOOL CloseServiceHandle(2 SC_HANDLE hSCObject // サービスまたはSCMオブジェクトへのハンドル 3)。
機能:
オープンサービスハンドルを閉じます