<div class="content" name="RCreateServiceWOW64A" uuid="eab9a1a3-181b-4320-87ca-b655c6701e85"><p>The RCreateServiceWOW64A method creates the service record
for a 32-bit service on a 64-bit system with the path to the file image
automatically adjusted to point to a 32-bit file location on the system.</p><dl>
<dd>
<div><pre> DWORD RCreateServiceWOW64A(
   [in] SC_RPC_HANDLE hSCManager,
   [in, string, range(0, SC_MAX_NAME_LENGTH)] 
     LPSTR lpServiceName,
   [in, string, unique, range(0, SC_MAX_NAME_LENGTH)] 
     LPSTR lpDisplayName,
   [in] DWORD dwDesiredAccess,
   [in] DWORD dwServiceType,
   [in] DWORD dwStartType,
   [in] DWORD dwErrorControl,
   [in, string, range(0, SC_MAX_PATH_LENGTH)] 
     LPSTR lpBinaryPathName,
   [in, string, unique, range(0, SC_MAX_NAME_LENGTH)] 
     LPSTR lpLoadOrderGroup,
   [in, out, unique] LPDWORD lpdwTagId,
   [in, unique, size_is(dwDependSize)] 
     LPBYTE lpDependencies,
   [in, range(0, SC_MAX_DEPEND_SIZE)] 
     DWORD dwDependSize,
   [in, string, unique, range(0, SC_MAX_ACCOUNT_NAME_LENGTH)] 
     LPSTR lpServiceStartName,
   [in, unique, size_is(dwPwSize)] 
     LPBYTE lpPassword,
   [in, range(0, SC_MAX_PWD_SIZE)] 
     DWORD dwPwSize,
   [out] LPSC_RPC_HANDLE lpServiceHandle
 );
</pre></div>
</dd></dl><p><b>hSCManager: </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_afc3f782-a908-486d-9c05-8a054cd9cc84" data-linktype="relative-path">SCM</a></span> database 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
SC_MANAGER_CREATE_SERVICE 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 SCM was created.</p><p><b>lpServiceName: </b>A pointer to a null-terminated
ANSI string that specifies the name of the service to install. This MUST not be
null.</p><p><b>lpDisplayName: </b>A pointer to a null-terminated
ANSI string that contains the display name by which user interface programs
identify the service.</p><p><b>dwDesiredAccess: </b>A value that specifies the
access to the service. This MUST be one of the values as specified in section
3.1.4.</p><p><b>dwServiceType: </b>A value that specifies the type
of service. This MUST be one or a combination of the following values.</p><dl>
<dd>
<table><thead>
  <tr>
   <th>
   <p>Value</p>
   </th>
   <th>
   <p>Meaning</p>
   </th>
  </tr>
 </thead><tbody><tr>
  <td>SERVICE_KERNEL_DRIVER 0x00000001</td>
  <td>A driver service. These are services that manage devices on the system.</td>
 </tr><tr>
  <td>SERVICE_FILE_SYSTEM_DRIVER 0x00000002</td>
  <td>A file system driver service. These are services that manage file systems on the system.</td>
 </tr><tr>
  <td>SERVICE_WIN32_OWN_PROCESS 0x00000010</td>
  <td>Service that runs within its own process.</td>
 </tr><tr>
  <td>SERVICE_WIN32_SHARE_PROCESS 0x00000020</td>
  <td>Service that shares an execution process with other services.</td>
 </tr><tr>
  <td>SERVICE_INTERACTIVE_PROCESS 0x00000100</td>
  <td>The service can interact with the desktop.</td>
 </tr></tbody></table>
</dd></dl><p><b>dwStartType: </b>A value that specifies when to
start the service. This MUST be one of the following values.</p><dl>
<dd>
<table><thead>
  <tr>
   <th>
   <p>Value</p>
   </th>
   <th>
   <p>Meaning</p>
   </th>
  </tr>
 </thead><tbody><tr>
  <td>SERVICE_BOOT_START 0x00000000</td>
  <td>Starts the driver service when the system boots up. This value is valid only for driver services.</td>
 </tr><tr>
  <td>SERVICE_SYSTEM_START 0x00000001</td>
  <td>Starts the driver service when the system boots up. This value is valid only for driver services. The services marked SERVICE_SYSTEM_START are started after all SERVICE_BOOT_START services have been started.</td>
 </tr><tr>
  <td>SERVICE_AUTO_START 0x00000002</td>
  <td>Starts the service automatically during system startup.</td>
 </tr><tr>
  <td>SERVICE_DEMAND_START 0x00000003</td>
  <td>Starts the service when a client requests the SCM to start the service.</td>
 </tr><tr>
  <td>SERVICE_DISABLED 0x00000004</td>
  <td>Service cannot be started.</td>
 </tr></tbody></table>
</dd></dl><p><b>dwErrorControl: </b>A value that specifies the
severity of the error if the service fails to start and determines the action
that the SCM takes. This MUST be one of the following values.</p><dl>
<dd>
<table><thead>
  <tr>
   <th>
   <p>Value</p>
   </th>
   <th>
   <p>Meaning</p>
   </th>
  </tr>
 </thead><tbody><tr>
  <td>SERVICE_ERROR_IGNORE 0x00000000</td>
  <td>The SCM ignores the error and continues the startup operation.</td>
 </tr><tr>
  <td>SERVICE_ERROR_NORMAL 0x00000001</td>
  <td>The SCM logs the error, but continues the startup operation.</td>
 </tr><tr>
  <td>SERVICE_ERROR_SEVERE 0x00000002</td>
  <td>The SCM logs the error. If the last-known good configuration is being started, the startup operation continues. Otherwise, the system is restarted with the last-known good configuration.</td>
 </tr><tr>
  <td>SERVICE_ERROR_CRITICAL 0x00000003</td>
  <td>The SCM SHOULD log the error if possible. If the last-known good configuration is being started, the startup operation fails. Otherwise, the system is restarted with the last-known good configuration.</td>
 </tr></tbody></table>
</dd></dl><p><b>lpBinaryPathName: </b>A pointer to a
null-terminated ANSI string that contains the fully qualified path to the
service binary file. The path MAY include arguments. If the path contains a
space, it MUST be quoted so that it is correctly interpreted. For example,
&#34;d:\\my share\\myservice.exe&#34; is specified as &#34;\&#34;d:\\my
share\\myservice.exe\&#34;&#34;.</p><p><b>lpLoadOrderGroup: </b>A pointer to a
null-terminated ANSI string that names the load-ordering group of which this
service is a member.</p><dl>
<dd>
<p>Specify NULL or an empty string if the service does
not belong to a <span><a href="4f66d32e-2f4f-4482-998e-e5ccbb445223#gt_88c26bf0-5b6f-4423-82b3-1027ea5df0e3" data-linktype="relative-path">load-ordering group</a></span>.</p>
</dd></dl><p><b>lpdwTagId: </b>A pointer to a variable that
receives a tag value. The value is unique to the group specified in the <i>lpLoadOrderGroup</i>
parameter.</p><p><b>lpDependencies: </b>A pointer to an array of
null-separated names of services or load ordering groups that MUST start before
this service. The array is doubly null-terminated. Load ordering group names
are prefixed with a &#34;+&#34; character (to distinguish them from service
names). If the pointer is NULL or if it points to an empty string, the service
has no dependencies. Cyclic dependency between services is not allowed. The
character set is <span><a href="4f66d32e-2f4f-4482-998e-e5ccbb445223#gt_100cd8a6-5cb1-4895-9de6-e4a3c224a583" data-linktype="relative-path">ANSI</a></span>. Dependency on
a service means that this service can only run if the service it depends on is
running. Dependency on a group means that this service can run if at least one
member of the group is running after an attempt to start all members of the
group.</p><p><b>dwDependSize: </b>The size, in bytes, of the string
specified by the <i>dwDependSize</i> parameter.</p><p><b>lpServiceStartName: </b>A pointer to a null-terminated
ANSI that specifies the name of the account under which the service runs.</p><p><b>lpPassword: </b>A pointer to a null-terminated
ANSI string that contains the password of the account whose name was specified
by the <i>lpServiceStartName</i> parameter.</p><p><b>dwPwSize: </b>The size, in bytes, of the password
specified by the <i>lpPassword</i> parameter.</p><p><b>lpServiceHandle: </b>An
LPSC_RPC_HANDLE (section 2.2.4) data type that defines the handle to
the newly created <span><a href="4f66d32e-2f4f-4482-998e-e5ccbb445223#gt_1fbb7936-8437-4e3d-b62f-47df3be07721" data-linktype="relative-path">service record</a></span>.</p><p><b>Return Values: </b>The method returns 0x00000000
(ERROR_SUCCESS) on success; otherwise, 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 SC_MANAGER_CREATE_SERVICE access right had not been granted to the caller when the RPC context handle to the SCM was created.</td>
 </tr><tr>
  <td>6 ERROR_INVALID_HANDLE</td>
  <td>The handle specified is invalid.</td>
 </tr><tr>
  <td>13 ERROR_INVALID_DATA</td>
  <td>The data is invalid.</td>
 </tr><tr>
  <td>87 ERROR_INVALID_PARAMETER</td>
  <td>A parameter that was specified is invalid.</td>
 </tr><tr>
  <td>123 ERROR_INVALID_NAME</td>
  <td>The specified service name is invalid.</td>
 </tr><tr>
  <td>1057 ERROR_INVALID_SERVICE_ACCOUNT</td>
  <td>The user account name specified in the lpServiceStartName parameter does not exist.</td>
 </tr><tr>
  <td>1059 ERROR_CIRCULAR_DEPENDENCY</td>
  <td>A circular service dependency was specified.</td>
 </tr><tr>
  <td>1072 ERROR_SERVICE_MARKED_FOR_DELETE</td>
  <td>The service record with a specified name already exists and RDeleteService has been called for it.</td>
 </tr><tr>
  <td>1073 ERROR_SERVICE_EXISTS</td>
  <td>The service record with the ServiceName matching the specified lpServiceName already exists.</td>
 </tr><tr>
  <td>1078 ERROR_DUPLICATE_SERVICE_NAME</td>
  <td>The service record with the same DisplayName or the same ServiceName as the passed-in lpDisplayName already exists in the SCM database.</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 use the service name specified in the <i>lpServiceName</i>
parameter to create a new service record in the SCM database and use the values
from the appropriate parameters of the client request to update the attributes
of this newly created service record.</p><p>The only valid combinations of values for <i>dwServiceType</i>
are SERVICE_INTERACTIVE_PROCESS and SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS
and SERVICE_WIN32_SHARE_PROCESS. If the value of <i>dwServiceType</i> has more
than one bit set and the combination of bits is not equal to
SERVICE_INTERACTIVE_PROCESS and SERVICE_WIN32_OWN_PROCESS or
SERVICE_INTERACTIVE_PROCESS and SERVICE_WIN32_SHARE_PROCESS, the server MUST
fail the method and return the error ERROR_INVALID_PARAMETER.</p><p>The server MUST convert the location specified in the <i>lpBinaryPathName</i>
parameter to point to the 32-bit location on a 64-bit system.<a id="Appendix_A_Target_73"></a><a aria-label="Product behavior note 73" href="041d2a89-9d7d-4f79-91a1-c336d0a668f6#Appendix_A_73" data-linktype="relative-path">&lt;73&gt;</a></p><p>If the service is created successfully, the server MUST
return a handle to the service in the <i>lpServiceHandle</i> parameter with the
access rights associated with this handle as specified in the <i>dwDesiredAccess</i>
parameter of the client request.</p><p>The server MUST use the process described in <span><a href="f9ddeebe-b05e-423c-9440-84fd3d14bee9" data-linktype="relative-path">Conversion
Between ANSI and Unicode String Formats (section 3.1.7)</a></span> to
convert a string to the appropriate format.</p><p>If <i>lpBinaryPathName</i> contains arguments, the server
MUST pass these arguments to the service entry point.</p><p>If <i>lpdwTagId</i> has a valid value and <i>lpLoadOrderGroup</i>
is either NULL or an empty string, then the server MUST return
ERROR_INVALID_PARAMETER.</p></div>