<div class="content" name="BaseRegEnumValue" uuid="56e99ef3-05dc-4f24-bcf5-9cff00412945"><p>The BaseRegEnumValue method is called by the client. In
response, the server enumerates the <a href="261b039d-95d9-4749-9680-db1851d03945#gt_7bc13a0c-ca1a-4c78-b1bf-67e243f778bb" data-linktype="relative-path">value</a> at the specified
index for the specified registry key. </p><dl>
<dd>
<div><pre> error_status_t BaseRegEnumValue(
   [in] RPC_HKEY hKey,
   [in] DWORD dwIndex,
   [in] PRRP_UNICODE_STRING lpValueNameIn,
   [out] PRPC_UNICODE_STRING lpValueNameOut,
   [in, out, unique] LPDWORD lpType,
   [in, out, unique, size_is(lpcbData?*lpcbData:0), length_is(lpcbLen?*lpcbLen:0), range(0, 0x4000000)] 
     LPBYTE lpData,
   [in, out, unique] LPDWORD lpcbData,
   [in, out, unique] LPDWORD lpcbLen
 );
</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>dwIndex: </b>MUST be the index of the value to be
retrieved, as specified in section <a href="3d64dbea-f016-4373-8cac-e43bf343837d" data-linktype="relative-path">3.1.1.5</a>.</p><p><b>lpValueNameIn: </b>A pointer to an <a href="c0c90f11-a4c4-496a-ac09-8a8a3697ceef" data-linktype="relative-path">RRP_UNICODE_STRING</a>
structure that contains the value name to be retrieved, as specified in section
3.1.1.5. This is used by the server to determine the maximum length for the
output name parameter and to allocate space accordingly. The content is
ignored, and only the maximum length is significant.</p><p><b>lpValueNameOut: </b>A pointer to an <a href="../ms-dtyp/94a16bb6-c610-4cb9-8db6-26f15f560061" data-linktype="relative-path">RPC_UNICODE_STRING</a>
structure that receives the retrieved value name, as specified in section
3.1.1.5.</p><p><b>lpType:</b> An optional pointer to a buffer that
receives the <a href="261b039d-95d9-4749-9680-db1851d03945#gt_71bc18b6-b775-4d09-9a24-949ff7420e2a" data-linktype="relative-path">REG_VALUE_TYPE</a>
of the value (as specified in section 3.1.1.5), or it MUST be NULL.</p><p><b>lpData:</b> An optional pointer to a buffer that
receives the data of the value entry.</p><p><b>lpcbData: </b>A pointer to a variable that MUST
contain the size of the buffer that is pointed to by <i>lpData</i>. MUST NOT be
NULL if <i>lpData</i> is present.</p><p><b>lpcbLen: </b>MUST specify the number of bytes to
transmit to the client.</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>0x00000005 ERROR_ACCESS_DENIED</td>
  <td>The caller does not have KEY_QUERY_VALUE access rights.</td>
 </tr><tr>
  <td>0x0000000E ERROR_OUTOFMEMORY</td>
  <td>Not enough storage is available to complete this operation.</td>
 </tr><tr>
  <td>0x00000057 ERROR_INVALID_PARAMETER</td>
  <td>A parameter is incorrect.</td>
 </tr><tr>
  <td>0x0000007A ERROR_INSUFFICIENT_BUFFER</td>
  <td>The data area passed to a system call is too small.</td>
 </tr><tr>
  <td>0x000000EA ERROR_MORE_DATA</td>
  <td>More data is available.</td>
 </tr><tr>
  <td>0x00000103 ERROR_NO_MORE_ITEMS</td>
  <td>No more data is available.</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>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 MUST first validate that the <i>hKey</i>
parameter is currently an open handle which MUST have been opened previously
using one of the methods specified in section 3.1.5. If the <i>hKey</i>
parameter is not an already opened handle, the server MUST return
ERROR_INVALID_PARAMETER.</p><p>In response to this request from the client, for a
successful operation, the server MUST return the value and data at the index
that is specified by the <i>dwIndex</i> parameter for the key that is specified
by the <i>hKey</i> parameter in the client request.</p><p>Only the maximum length field of the <i>lpValueNameIn</i> is
used to determine the buffer length to be allocated by the service. Specify a
string with a zero length but maximum length set to the largest buffer size
needed to hold the value names. </p><p>The server MUST return the value name (as specified in
section 3.1.1.5) in the <i>lpValueNameOut</i> parameter and the type of the
value in the <i>lpType</i> parameter. The type of the value MUST be one of the
values that are specified by REG_VALUE_TYPE in section 3.1.1.5.</p><p>If the request contains a pointer to a buffer in the <i>lpData</i>
parameter, the server MUST return the data of the value entry, if present. The <i>lpcbData</i>
parameter represents the size of this buffer. If the size is sufficient to hold
the data, the server MUST return the number of BYTES that are returned in the <i>lpData</i>
parameter. If the size is insufficient to hold the data of the value entry, the
server MUST return 122 (ERROR_INSUFFICIENT_BUFFER) to indicate that the buffer
was insufficient.</p><p>The caller MUST have KEY_QUERY_VALUE access rights to invoke
this method. For more information, see section <a href="fefbc801-b141-4bb1-9dcb-bf366da3ae7e" data-linktype="relative-path">2.2.4</a>.</p><p>The server MUST return 0 to indicate success, or an
appropriate error code (as specified in [MS-ERREF]) to indicate an error.</p><p>If the caller does not have access, the server MUST return
ERROR_ACCESS_DENIED.</p><p>If the output buffer is too small to contain the value, the
server MUST return ERROR_MORE_DATA. The call SHOULD be repeated with a larger
output buffer. </p><p>If the input index is beyond the number of values for a key,
the server MUST return ERROR_NO_MORE_ITEMS. This signals the end of enumeration
to the caller.</p></div>