<div class="content" name="RQueryServiceStatusEx" uuid="e27fce9d-fd45-47b1-bdeb-c05a2fd53669"><p>The RQueryServiceStatusEx method returns the current status
of the specified service, based on the specified information level.</p><dl>
<dd>
<div><pre> DWORD RQueryServiceStatusEx(
   [in] SC_RPC_HANDLE hService,
   [in] SC_STATUS_TYPE InfoLevel,
   [out, size_is(cbBufSize)] LPBYTE lpBuffer,
   [in, range(0, 1024*8)] DWORD cbBufSize,
   [out] LPBOUNDED_DWORD_8K pcbBytesNeeded
 );
</pre></div>
</dd></dl><p><b>hService: </b>An <span><a href="b5f0a0a8-887c-4097-af1c-71ef9f214ce4" data-linktype="relative-path">SC_RPC_HANDLE (section 2.2.4)</a></span>
data type that defines the handle to the <span><a href="4f66d32e-2f4f-4482-998e-e5ccbb445223#gt_1fbb7936-8437-4e3d-b62f-47df3be07721" data-linktype="relative-path">service record</a></span> that
MUST have been created previously, using one of the open methods specified in
section <span><a href="0d7a7011-9f41-470d-ad52-8535b47ac282" data-linktype="relative-path">3.1.4</a></span>. The
SERVICE_QUERY_STATUS access right MUST have been granted to the caller when the
<span><a href="4f66d32e-2f4f-4482-998e-e5ccbb445223#gt_9dfe84e3-a772-4ad1-9a25-1255c1dc0f84" data-linktype="relative-path">RPC
context handle</a></span> to the service record was created.</p><p><b>InfoLevel: </b>An enumerated value from <span><a href="a7de3a4b-0b9e-4b9b-8863-b3dbc9bbe02b" data-linktype="relative-path">SC_STATUS_TYPE (section 2.2.29)</a></span>
that specifies which service attributes are returned. MUST be SC_STATUS_PROCESS_INFO.</p><p><b>lpBuffer: </b>A pointer to the buffer that
contains the status information in the form of a <span><a href="c2f0ab87-eb16-4371-8380-ddf9cd29931e" data-linktype="relative-path">SERVICE_STATUS_PROCESS (section 2.2.49)</a></span>
structure.</p><p><b>cbBufSize: </b>The size, in bytes, of the <i>lpBuffer</i>
parameter.</p><p><b>pcbBytesNeeded: </b>An <span><a href="1720ed6e-d907-41c6-8d98-fb6e4877d761" data-linktype="relative-path">LPBOUNDED_DWORD_8K (section 2.2.8)</a></span>
data type that defines the pointer to a variable that contains the number of
bytes needed to return the configuration information.</p><p><b>Return Values: </b>The method returns 0x00000000
(ERROR_SUCCESS) on success; otherwise, it returns one of the following error
codes.</p><dl>
<dd>
<table><thead>
  <tr>
   <th>
   <p>Return value/code</p>
   </th>
   <th>
   <p>Description</p>
   </th>
  </tr>
 </thead><tbody><tr>
  <td>5 ERROR_ACCESS_DENIED</td>
  <td>The SERVICE_QUERY_STATUS access right had not been granted to the caller when the RPC context handle to the service record was created.</td>
 </tr><tr>
  <td>6 ERROR_INVALID_HANDLE</td>
  <td>The handle is no longer valid.</td>
 </tr><tr>
  <td>87 ERROR_INVALID_PARAMETER</td>
  <td>A parameter that was specified is invalid.</td>
 </tr><tr>
  <td>122 ERROR_INSUFFICIENT_BUFFER</td>
  <td>The data area passed to a system call is too small.</td>
 </tr><tr>
  <td>124 ERROR_INVALID_LEVEL</td>
  <td>The InfoLevel parameter contains an unsupported value.</td>
 </tr><tr>
  <td>1115 ERROR_SHUTDOWN_IN_PROGRESS</td>
  <td>The system is shutting down.</td>
 </tr></tbody></table>
</dd></dl><p>In response to this request from the client, for a
successful operation the server MUST query the configuration information as
specified and stored in the <span><a href="4f66d32e-2f4f-4482-998e-e5ccbb445223#gt_afc3f782-a908-486d-9c05-8a054cd9cc84" data-linktype="relative-path">SCM</a></span> database
associated with the service record identified by the <i>hService</i> parameter.
The server MUST return this configuration data by setting the <i>lpBuffer</i>
parameter with the SERVICE_STATUS_PROCESS structure filled with the
configuration data as specified in section 2.2.49.</p><p>If the buffer pointed to by <i>lpBuffer</i> is insufficient
to hold all the configuration data, the server MUST fail the call with
ERROR_INSUFFICIENT_BUFFER (122) and set the required buffer size in the <i>pcbBytesNeeded</i>
parameter.</p></div>