次の方法で共有


EnumServicesStatusA 関数 (winsvc.h)

指定したサービス コントロール マネージャー データベース内のサービスを列挙します。 各サービスの名前と状態が提供されます。

この関数は、enumServicesStatusEx 関数 置き換わりました。 EnumServicesStatus が返すのと同じ情報と、サービスのプロセス識別子と追加情報 返します。 さらに、EnumServicesStatusEx を使用すると、指定したグループに属するサービスを列挙できます。

構文

BOOL EnumServicesStatusA(
  [in]                SC_HANDLE              hSCManager,
  [in]                DWORD                  dwServiceType,
  [in]                DWORD                  dwServiceState,
  [out, optional]     LPENUM_SERVICE_STATUSA lpServices,
  [in]                DWORD                  cbBufSize,
  [out]               LPDWORD                pcbBytesNeeded,
  [out]               LPDWORD                lpServicesReturned,
  [in, out, optional] LPDWORD                lpResumeHandle
);

パラメーター

[in] hSCManager

サービス コントロール マネージャー データベースへのハンドル。 このハンドルは、OpenSCManager 関数によって返され、SC_MANAGER_ENUMERATE_SERVICEアクセス権が必要です。 詳細については、「サービスのセキュリティとアクセス権の」を参照してください。

[in] dwServiceType

列挙するサービスの種類。 このパラメーターには、次の値のうち 1 つ以上を指定できます。

価値 意味
SERVICE_DRIVER
0x0000000B
SERVICE_KERNEL_DRIVERおよびSERVICE_FILE_SYSTEM_DRIVERの種類のサービス。
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
ファイル システム ドライバー サービス。
SERVICE_KERNEL_DRIVER
0x00000001
ドライバー サービス。
SERVICE_WIN32
0x00000030
SERVICE_WIN32_OWN_PROCESSおよびSERVICE_WIN32_SHARE_PROCESSの種類のサービス。
SERVICE_WIN32_OWN_PROCESS
0x00000010
独自のプロセスで実行されるサービス。
SERVICE_WIN32_SHARE_PROCESS
0x00000020
プロセスを 1 つ以上の他のサービスと共有するサービス。 詳細については、「サービス プログラムの」を参照してください。

[in] dwServiceState

列挙するサービスの状態。 このパラメーターには、次のいずれかの値を指定できます。

価値 意味
SERVICE_ACTIVE
0x00000001
SERVICE_START_PENDING、SERVICE_STOP_PENDING、SERVICE_RUNNING、SERVICE_CONTINUE_PENDING、SERVICE_PAUSE_PENDING、およびSERVICE_PAUSEDの状態のサービスを列挙します。
SERVICE_INACTIVE
0x00000002
SERVICE_STOPPED状態のサービスを列挙します。
SERVICE_STATE_ALL
0x00000003
SERVICE_ACTIVEとSERVICE_INACTIVEの状態を組み合わせます。

[out, optional] lpServices

データベース内の各サービスの名前とサービスの状態情報を受け取る ENUM_SERVICE_STATUS 構造体の配列を含むバッファーへのポインター。 バッファーは、構造体とメンバーが指す文字列を保持するのに十分な大きさである必要があります。

この配列の最大サイズは 256,000 バイトです。 必要なサイズを決定するには、このパラメーターに NULL を、cbBufSize パラメーターに 0 を指定します。 関数は失敗し、GetLastError はERROR_INSUFFICIENT_BUFFERを返します。 pcbBytesNeeded パラメーターは、必要なサイズを受け取ります。

Windows Server 2003 および Windows XP: この配列の最大サイズは 64,000 バイトです。 この制限は、Windows Server 2003 SP1 および Windows XP SP2 の時点で引き上げられました。

[in] cbBufSize

lpServices パラメーターが指すバッファーのサイズ (バイト単位)。

[out] pcbBytesNeeded

バッファーが小さすぎる場合に、残りのサービス エントリを返すために必要なバイト数を受け取る変数へのポインター。

[out] lpServicesReturned

返されるサービス エントリの数を受け取る変数へのポインター。

[in, out, optional] lpResumeHandle

入力時に列挙の開始点を指定する変数へのポインター。 この関数を初めて呼び出す場合は、この値を 0 に設定する必要があります。 出力時、関数が成功した場合、この値は 0 になります。 ただし、関数が 0 を返し、GetLastError 関数がERROR_MORE_DATAを返す場合、この値は、追加のデータを取得するために関数が呼び出されたときに読み取られる次のサービス エントリを示すために使用されます。

戻り値

関数が成功した場合、戻り値は 0 以外です。

関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError呼び出します。

サービス コントロール マネージャーでは、次のエラー コードを設定できます。 その他のエラー コードは、サービス コントロール マネージャーによって呼び出されるレジストリ関数によって設定できます。

リターン コード 形容
ERROR_ACCESS_DENIED
ハンドルにSC_MANAGER_ENUMERATE_SERVICEアクセス権がありません。
ERROR_INVALID_HANDLE
指定されたハンドルが無効です。
ERROR_INVALID_PARAMETER
指定されたパラメーターが無効です。
ERROR_MORE_DATA
lpServices バッファーに収まるよりも多くのサービス エントリがあります。 lpServices 書き込まれたサービス エントリの実際の数は、lpServicesReturned パラメーターで返されます。 残りのエントリを取得するために必要なバイト数は、pcbBytesNeeded パラメーターで返されます。 残りのサービスは、読み取る次のサービスを示す lpResumeHandle パラメーターを使用して、EnumServicesStatusする追加の呼び出しによって列挙できます。

備考

手記

winsvc.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして EnumServicesStatus を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winsvc.h (Windows.h を含む)
ライブラリ Advapi32.lib
DLL Advapi32.dll

関連項目

ENUM_SERVICE_STATUS

EnumDependentServices を する

EnumServicesStatusEx の

OpenSCManager

サービス関数の

サービスのインストール、削除、および列挙