<div class="content" name="BaseRegDeleteKey" uuid="74b90123-afe9-42c9-b061-4af38ac7002b"><p>The BaseRegDeleteKey method is called by the client. In
response, the server deletes the specified subkey.</p><dl>
<dd>
<div><pre> error_status_t BaseRegDeleteKey(
   [in] RPC_HKEY hKey,
   [in] PRRP_UNICODE_STRING lpSubKey
 );
</pre></div>
</dd></dl><p><b>hKey: </b>A handle to a key that MUST have been
opened previously by using one of the open methods that are specified in
section <a href="053e8515-dbae-47ea-a7c6-6dc054e3a48f" data-linktype="relative-path">3.1.5</a>: <a href="956a3052-6580-43ee-91aa-aaf61726149b" data-linktype="relative-path">OpenClassesRoot</a>, <a href="ec140ed9-4d00-4c03-a15c-c7245a497ed5" data-linktype="relative-path">OpenCurrentUser</a>, <a href="6cef29ae-21ba-423f-9158-05145ac80a5b" data-linktype="relative-path">OpenLocalMachine</a>, <a href="7b514c63-6cad-4fe1-9780-743959e377e6" data-linktype="relative-path">OpenPerformanceData</a>, <a href="694e57f4-da3e-4285-8b71-3181d71d6cd1" data-linktype="relative-path">OpenUsers</a>, <a href="c7186ae2-1c82-45e9-933b-97d9873657e8" data-linktype="relative-path">BaseRegCreateKey</a>, <a href="8cb48f55-19e1-4ea2-8d76-dd0f6934f0d9" data-linktype="relative-path">BaseRegOpenKey</a>, <a href="160767d7-83cf-4718-a4f3-d864faee3bb1" data-linktype="relative-path">OpenCurrentConfig</a>, <a href="44954f6d-ef2c-4ec1-a27d-32b9b87e3c8a" data-linktype="relative-path">OpenPerformanceText</a>, <a href="3626fa8a-b20f-4243-bf85-cdb615ed2ca0" data-linktype="relative-path">OpenPerformanceNlsText</a>.</p><p><b>lpSubKey: </b>A pointer to an <a href="c0c90f11-a4c4-496a-ac09-8a8a3697ceef" data-linktype="relative-path">RRP_UNICODE_STRING</a>
structure that MUST contain the name of the key (as specified in section <a href="508e3d3e-1225-4075-be04-67680ea80497" data-linktype="relative-path">3.1.1</a>) to delete.</p><p><b>Return Values: </b>The method returns 0
(ERROR_SUCCESS) to indicate success; otherwise, it returns a nonzero error
code, as specified in <a href="../ms-erref/1bc92ddf-b79e-413c-bbaa-99a5281a6c90" data-linktype="relative-path">[MS-ERREF]</a>
section <a href="../ms-erref/18d8fbe8-a967-4f1c-ae50-99ca8e491d2d" data-linktype="relative-path">2.2</a>.
The most common error codes are listed in the following table.</p><dl>
<dd>
<table><thead>
  <tr>
   <th>
   <p>Return value/code</p>
   </th>
   <th>
   <p>Description</p>
   </th>
  </tr>
 </thead><tbody><tr>
  <td>0x00000057 ERROR_INVALID_PARAMETER</td>
  <td>A parameter is incorrect.</td>
 </tr><tr>
  <td>0x00000005 ERROR_ACCESS_DENIED</td>
  <td>Access is denied. For BaseRegDeleteKey, this error will be returned when the key indicated by the lpSubKey parameter has subkeys.</td>
 </tr><tr>
  <td>0x00000013 ERROR_WRITE_PROTECT</td>
  <td>A read or write operation was attempted to a volume after it was dismounted. The server can no longer service registry requests because server shutdown has been initiated.</td>
 </tr></tbody></table>
</dd></dl><p>Server Operations</p><p>In response to the client request, for a successful
operation, the server MUST delete the registry key specified by the <i>lpSubKey</i>
parameter in the client request and MUST return 0 (ERROR_SUCCESS). The server
MUST delete all data associated with the registry key indicated by the <i>lpSubKey</i>
parameter, including the key, any values, and the security descriptor
associated with the key.</p><p>The server MUST delete the registry key even if the subkey
to be deleted is already in use and initialized in the Data Store before the
deletion happens. The delete function will be successful even if other handles
are open to the key. The data inside the <a href="261b039d-95d9-4749-9680-db1851d03945#gt_0e82f121-9fab-40e4-a8d9-aee009aa57b9" data-linktype="relative-path">hive</a> is revoked at delete
key time and is not deferred until the last handle close operation.</p><p>If the registry server can no longer service registry
requests because server shutdown has been initiated (<b>SHUTDOWNINPROGRESS</b>
is set to TRUE), the server MUST return ERROR_WRITE_PROTECT.</p><p>The server first validates that the <i>hKey</i> parameter is
currently an open handle that MUST have been opened previously using one of the
methods that are specified in section 3.1.5. If the <i>hKey</i> parameter is
not an already open handle, the server MUST return ERROR_INVALID_PARAMETER.</p><p>The server then validates that the key specified by the <i>lpSubKey</i>
parameter is a subkey of the key indicated by the <i>hKey</i> parameter. If the
key specified by the <i>lpSubKey</i> parameter is not a subkey of the key
indicated by the <i>hKey</i> parameter, the server MUST return
ERROR_FILE_NOT_FOUND.</p><p>If the value of the <i>lpSubKey</i> parameter is NULL, the
server MUST fail the method and return ERROR_INVALID_PARAMETER.</p><p>The server then validates that the key indicated by <i>lpSubKey</i>
does not have subkeys of its own. If the key indicated by the <i>lpSubKey</i>
parameter does have subkeys, the server MUST return ERROR_ACCESS_DENIED.</p><p>If both the <i>hKey</i> and <i>lpSubKey</i> parameters are
valid and the key indicated by <i>lpSubKey</i> does not have any subkeys, the
server MUST return ERROR_SUCCESS and delete the key indicated by <i>lpSubKey</i>,
its security descriptor, and any values.</p></div>