<div class="content" name="RRPC_FWEnumProducts" uuid="b7a0c4f8-f7a9-48f1-b542-a2937e269ca3"><p>The RRPC_FWEnumProducts (Opnum 31) method requests the
server to return all the registered third-party software components registered
with the firewall and advanced security component. The only method supported is
binary version 0x020A.</p><dl>
<dd>
<div><pre> unsigned long RRPC_FWEnumProducts(
   [in] FW_CONN_HANDLE rpcConnHandle,
   [in] FW_POLICY_STORE_HANDLE hPolicy,
   [out] unsigned long* pdwNumProducts,
   [out, size_is(,*pdwNumProducts)] 
     PFW_PRODUCT* ppProducts
 );
</pre></div>
</dd></dl><p><b>rpcConnHandle: </b>This parameter is an <span><a href="d891304d-92d8-4f9f-9e60-a1f02b28ae30#gt_8a7f6700-8311-45bc-af10-82e10accd331" data-linktype="relative-path">RPC</a></span>
binding handle that connects to the RPC interface of the Firewall and Advanced
Security Protocol.</p><p><b>hPolicy: </b>This input parameter is an <span><a href="88f6ea4a-a946-4747-bb93-f142f1760752" data-linktype="relative-path">FW_POLICY_STORE_HANDLE</a></span>
data type. The data type MUST contain an opened policy store handle,
successfully opened with the RRPC_FWOpenPolicyStore (Opnum 0) method. This
handle MUST be of the <span><a href="37ebed95-8abf-472c-8b4b-7a510a2a6baa" data-linktype="relative-path">FW_STORE_TYPE_DYNAMIC</a></span>
store.</p><p><b>pdwNumProducts: </b>This is an output parameter
that on success MUST be equal to the number of products returned.</p><p><b>ppProducts: </b>An array of <span><a href="969d3873-1e42-4dc4-8559-f5c0c9caa965" data-linktype="relative-path">FW_PRODUCT</a></span>
data types, representing the registration of third-party software components.</p><p><b>Return Values: </b>The method returns 0 if
successful; if it fails, it returns a nonzero error code. The field can take
any specific error code value, as specified in <span><a href="../ms-erref/1bc92ddf-b79e-413c-bbaa-99a5281a6c90" data-linktype="relative-path">[MS-ERREF]</a></span>.
The following return values are common.</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 client does not have the required credentials to call the method.</td>
 </tr><tr>
  <td>0x00000032 ERROR_NOT_SUPPORTED</td>
  <td>The store handle is not of the dynamic store.</td>
 </tr><tr>
  <td>0x00000057 ERROR_INVALID_PARAMETER</td>
  <td>One of the parameters of this method either is incorrect, or is required and not specified.</td>
 </tr></tbody></table>
</dd></dl><p><b>Exceptions Thrown:</b> No exceptions are thrown
beyond those thrown by the underlying RPC protocol, as specified in <span><a href="../ms-rpce/290c38b1-92fe-4229-91e6-4fc376610c15" data-linktype="relative-path">[MS-RPCE]</a></span>.
If any lower-layer errors are reported by RPC exception, this exception is
converted to an error code and reported to higher-layer protocols via the
return value.</p><p>The server MUST validate that the client is authorized to
perform the requested operation (as defined in section <span><a href="b0c93352-8371-4d63-abca-b0cc8dbcc3d7" data-linktype="relative-path">3.1.4</a></span>)
before executing this method.</p></div>