C ++(Windowsサービス)サービスプログラミング

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)。 

機能:

オープンサービスハンドルを閉じます

 

おすすめ

転載: www.cnblogs.com/emjx/p/11249576.html