QueryServiceStatusEx 関数 (winsvc.h)
指定した情報レベルに基づいて、指定したサービスの現在の状態を取得します。
構文
BOOL QueryServiceStatusEx(
[in] SC_HANDLE hService,
[in] SC_STATUS_TYPE InfoLevel,
[out, optional] LPBYTE lpBuffer,
[in] DWORD cbBufSize,
[out] LPDWORD pcbBytesNeeded
);
パラメーター
[in] hService
サービスへのハンドル。 このハンドルは CreateService 関数または OpenService 関数によって返され、SERVICE_QUERY_STATUSアクセス権が必要です。 詳細については、「 サービス セキュリティとアクセス権」を参照してください。
[in] InfoLevel
返されるサービス属性。 SC_STATUS_PROCESS_INFOを使用して、サービスの状態情報を取得します。 lpBuffer パラメーターは、SERVICE_STATUS_PROCESS構造体へのポインターです。
現時点では、他の情報レベルは定義されていません。
[out, optional] lpBuffer
状態情報を受け取るバッファーへのポインター。 このデータの形式は 、InfoLevel パラメーターの値によって異なります。
この配列の最大サイズは 8K バイトです。 必要なサイズを確認するには、このパラメーターに NULL を指定し、 cbBufSize パラメーターに 0 を指定します。 関数は失敗し、 GetLastError はERROR_INSUFFICIENT_BUFFERを返します。 pcbBytesNeeded パラメーターは、必要なサイズを受け取ります。
[in] cbBufSize
lpBuffer パラメーターが指すバッファーのサイズ (バイト単位)。
[out] pcbBytesNeeded
関数がERROR_INSUFFICIENT_BUFFERで失敗した場合に、すべての状態情報を格納するために必要なバイト数を受け取る変数へのポインター。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。 次のエラーが返される可能性があります。
リターン コード | 説明 |
---|---|
|
ハンドルが正しくありません。 |
|
ハンドルには、SERVICE_QUERY_STATUSアクセス権がありません。 |
|
バッファーが小さすぎて 、SERVICE_STATUS_PROCESS 構造に対しては小さすぎます。 構造体には何も書き込まれなかった。 |
|
SERVICE_STATUS_PROCESS の cbSize メンバーが無効です。 |
|
InfoLevel パラメーターには、サポートされていない値が含まれています。 |
|
システムがシャットダウンしています。この関数を呼び出すことはできません。 |
注釈
QueryServiceStatusEx 関数は、サービス コントロール マネージャーに報告された最新のサービス状態情報を返します。 サービスが状態を変更したばかりの場合は、サービス コントロール マネージャーがまだ更新されていない可能性があります。
SERVICE_STATUS_PROCESS構造体で返されるプロセス識別子は、サービスの状態がSERVICE_RUNNING、SERVICE_PAUSE_PENDING、SERVICE_PAUSED、またはSERVICE_CONTINUE_PENDINGのいずれかである場合に有効です。 ただし、サービスがSERVICE_START_PENDING状態またはSERVICE_STOP_PENDING状態の場合、プロセス識別子が無効である可能性があり、サービスがSERVICE_STOPPED状態の場合は無効です。
例
例については、「 サービスの開始 」または「サービス の停止」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | winsvc.h (Windows.h を含む) |
Library | Advapi32.lib |
[DLL] | Advapi32.dll |