<div class="content"><p> </p><p>The EvtRpcAssertConfig (Opnum 15) method indicates to the
server that the publisher or channel configuration has been updated. </p><dl>
<dd>
<div><pre> error_status_t EvtRpcAssertConfig(
   /* [in] RPC_BINDING_HANDLE binding, {the binding handle will be generated by MIDL} */
   [in, range(1, MAX_RPC_CHANNEL_NAME_LENGTH), string] 
     LPCWSTR path,
   [in] DWORD flags
 );
</pre></div>
</dd></dl><p><b>binding: </b>An RPC binding handle as specified in
section <span><a href="1285c318-9f8c-4c6a-a963-7999557bf8d8" data-linktype="relative-path">2.2.21</a></span>.</p><p><b>path: </b>A pointer to a string that contains a
channel or publisher name to be updated.</p><p><b>flags: </b>The client MUST specify exactly one of
the following.</p><dl>
<dd>
<table><thead>
  <tr>
   <th>
   <p>Value</p>
   </th>
   <th>
   <p>Meaning</p>
   </th>
  </tr>
 </thead><tbody><tr>
  <td>
  <p>EvtRpcChannelPath</p>
  <p>0x00000000</p>
  </td>
  <td>
  <p><i>Path</i> specifies a channel name.</p>
  </td>
 </tr><tr>
  <td>
  <p>EvtRpcPublisherName</p>
  <p>0x00000001</p>
  </td>
  <td>
  <p><i>Path</i> specifies a publisher name.</p>
  </td>
 </tr></tbody></table>
</dd></dl><p><b>Return Values: </b>The method MUST return ERROR_SUCCESS
(0x00000000) on success; otherwise, it MUST return an implementation-specific
nonzero value as specified in <span><a href="../ms-erref/1bc92ddf-b79e-413c-bbaa-99a5281a6c90" data-linktype="relative-path">[MS-ERREF]</a></span>.</p><p>In response to this request from the client, the server
SHOULD first validate the <i>path</i> parameter. The server MUST interpret the <i>path</i>
parameter as a channel name if the <i>flags</i> parameter is equal to
0x00000000. The server SHOULD try to determine if the specified channel name has
been already registered in its channel table (as specified in section <span><a href="8f10cb24-8c8d-4dca-b5dc-ee28706c5b78" data-linktype="relative-path">3.1.1.5</a></span>).
If the flags value is 0x00000001, the server MUST interpret <i>path</i> as a
publisher name. The server SHOULD then check if the publisher has been
registered in its publisher table (as specified in section <span><a href="f10b0008-ffdd-4299-bda6-69842ced8ff9" data-linktype="relative-path">3.1.1.3</a></span>).
The server SHOULD fail the operation if the validation of <i>path</i> fails.
The server MAY<a id="Appendix_A_Target_59"></a><a aria-label="Product behavior note 59" href="65f22d62-5f0f-4306-85c4-50fb9e77075b#Appendix_A_59" data-linktype="relative-path">&lt;59&gt;</a> return the error
ERROR_INVALID_PARAMETER (0x00000057) to indicate such failure.</p><p>Next, the server MUST verify that the caller has write
access to the information and MUST fail the method if the caller does not have
write access with the error ERROR_ACCESS_DENIED (0x00000005). To perform the
access check, the server SHOULD first determine the identity of the caller.
Information determining the identity of the caller for the purpose of
performing an access check is specified in <span><a href="../ms-rpce/290c38b1-92fe-4229-91e6-4fc376610c15" data-linktype="relative-path">[MS-RPCE]</a></span>
section <span><a href="../ms-rpce/326c9de1-4602-4d78-848d-8b4e11e6ed80" data-linktype="relative-path">3.2.3.4.2</a></span>.
Then, if the client specifies a channel, the server SHOULD read the channel&#39;s
access property (as specified in section <span><a href="f5ae9a61-6f5e-4751-965e-394349c7d950" data-linktype="relative-path">3.1.4.21</a></span>) as the
security descriptor string. Next, the server SHOULD be able to perform the
write and clear access check using the Access Check algorithm (as specified in <span><a href="../ms-dtyp/cca27429-5689-4a16-b2b4-9325d93e4ba2" data-linktype="relative-path">[MS-DTYP]</a></span>
section <span><a href="../ms-dtyp/4f1bbcbb-814a-4c70-a11e-2a5b8779a6f9" data-linktype="relative-path">2.5.3.2</a></span>).
If the access property is not present for the channel, the channel gets a
default SDDL which is
&#34;O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)&#34;.</p><p>The server assumes that something has changed some
properties of a publisher or channel before processing this call. Such changes
can be made by the <b>EvtRpcPutChannelConfig</b> method (as specified in
section <span><a href="e02828fd-873d-4cc5-9b60-23ef31987275" data-linktype="relative-path">3.1.4.22</a></span>). The
changes made by <b>EvtRpcPutChannelConfig</b> only create an in-memory copy of
the new properties of the publisher or channel, but do not impact the server&#39;s
immediate behavior. <b>EvtRpcAssertConfig</b> puts the in-memory copy created
by <b>EvtRpcPutChannelConfig</b> into effect. When applying the changes from the
in-memory copy, the server SHOULD check the potential conflicts of the new
settings with existing settings. The following is a list of checks the server
SHOULD make before accepting the changes:</p><ol><li><p><span>    </span>If the channel
type is set, the server SHOULD check whether the new value is one of the four
allowed values which are specified in section 3.1.4.22.</p>
</li><li><p><span>    </span>If the owning
publisher is set, the server SHOULD check whether the publisher exists and also
check whether the channel is owned by another publisher. The server SHOULD go
through its channel table and make sure the <b>OwningPublisher</b> field points
to a different publisher&#39;s name and no two channels have the same publisher
name.</p>
</li></ol><p>After that, the server activates the new properties of the
channel or the publisher based on the latest settings and frees the memory
associated with the in-memory copy of the new channel or publisher properties
allocated during the call to <b>EvtRpcPutChannelConfig</b>.</p><p>In the interval between the calls to <b>EvtRpcPutChannelConfig</b>
and <b>EvtRpcAssertConfig</b>, there are effectively two copies of the channel
or publisher properties. One copy is the encapsulated but inactive set of
properties created by <b>EvtRpcPutChannelConfig</b>, waiting to be made active.
The other copy is the unencapsulated set of active property values that are
stored in individual run-time variables within the implementation. It is an
implementation-specific detail whether these variables exist in a form that
resembles the encapsulated representation in terms of memory layout or other
matters not germane to the semantics of the properties. The encapsulated
property set is by definition ephemeral, serving only as a temporary holding
vessel for the updated channel or publisher properties until the <b>EvtRpcAssertConfig</b>
method is called. </p><p>When this method is called, the server activates the new
properties of the channel or publisher in a two-stage process.  First, the
server stores the values in the encapsulated property set into whatever
persistent storage the server uses to store channel and publisher properties
between invocations of the server itself.  Second, the server loads the new
property values from persistent storage, using them to update the
unencapsulated, active variables that implement the properties at run time. In
this way, the server simultaneously puts the new values into effect and ensures
that those values will remain in effect if the server is restarted. </p><p>When this two-stage process is complete, the encapsulated
property set serves no further purpose and the server frees the memory associated
with it.</p><p>Note that this protocol does not include a method for
changing publisher configuration data. The client SHOULD provide this
functionality if it wants to call this function specifying the publisher. For
more information, see section <span><a href="3f99ddd4-7b58-42f6-ae96-0d50808b9ffd" data-linktype="relative-path">3.2.7</a></span>.</p><p>The configuration properties of the channels and publishers
SHOULD include the following: </p><ul><li><p><span><span> 
</span></span>Physical location of the publisher&#39;s event definition binaries</p>
</li><li><p><span><span> 
</span></span>Channel security settings</p>
</li><li><p><span><span> 
</span></span>Channel and publisher names</p>
</li><li><p><span><span> 
</span></span>Enabled/disabled state or any other implementation-dependent
configurable settings</p>
</li></ul><p>The server MUST NOT change those states until this method is
called.</p><p>The server MUST return a value indicating success or failure
for this operation.</p></div>