BeforeSetValue Event
Fires before a registry value is set or updated.
Syntax
public class DefaultCbregistryEventListener implements CbregistryEventListener { ... public void beforeSetValue(CbregistryBeforeSetValueEvent e) {} ... } public class CbregistryBeforeSetValueEvent { public long keyContext; public String valueName; public int valueType; public long integerValue; public String stringValue; public ByteBuffer binaryValue; public int binaryValueSize; public boolean processed; public boolean fireAfterEvent; public boolean stopFiltering; public int resultCode; }
Remarks
This event fires before a registry value is set or updated.
Applications only need to handle this event if they've added a standard filter rule that includes the REG_CE_BEFORE_SET_VALUE flag.
The KeyContext parameter is a placeholder for application-defined data associated with the registry key. Please refer to the Contexts topic for more information. Note that this event does not expose the registry key's name for performance reasons; applications that need it should store it in KeyContext during the BeforeCreateKey/BeforeOpenKey event so that it can be retrieved when this event fires.
The ValueName parameter reflects the name of the registry value. Applications that intend to use the registry value's name during later events should store it in KeyContext during this event; please refer to the Contexts topic for more information.
The ValueType parameter reflects the registry value's type, and determines which of the other parameters holds the registry value's data (please refer to their descriptions for more information). Possible values are:
REG_VALUETYPE_SZ | 1 | A unicode string. |
REG_VALUETYPE_EXPAND_SZ | 2 | A unicode string that contains environmental variable references. |
REG_VALUETYPE_BINARY | 3 | Binary data. |
REG_VALUETYPE_DWORD | 4 | A 32-bit number. |
REG_VALUETYPE_MULTI_SZ | 7 | Multiple unicode strings. |
REG_VALUETYPE_QWORD | 11 | A 64-bit number. |
The IntegerValue parameter reflects the registry value's data if ValueType is REG_VALUETYPE_DWORD or REG_VALUETYPE_QWORD.
The StringValue parameter reflects the registry value's data if ValueType is REG_VALUETYPE_SZ, REG_VALUETYPE_EXPAND_SZ, or REG_VALUETYPE_MULTI_SZ.
For REG_VALUETYPE_MULTI_SZ, the data is formatted as multiple individual ETB-terminated strings concatenated together into a single null-terminated string (where ETB is the End-of-Transmission-Block character; 23/0x17). For example, the strings This is, a multistring, value. would be encoded as This is[ETB]a multistring[ETB]value.[ETB][NUL].
Note that, as Microsoft's Registry Value Types article describes, the native multistring data format uses null-terminators for the individual strings (e.g., This is[NUL]a multistring[NUL]value.[NUL][NUL]); CBRegistry converts the individual null terminators to/from ETB characters internally for applications' convenience.
The BinaryValue parameter points to a memory buffer that holds the registry value's data if ValueType is REG_VALUETYPE_BINARY. The BinaryValueSize parameter reflects the length of this data, in bytes.
The Processed parameter indicates whether the underlying request has been handled successfully. Applications should set this parameter to true if they've handled the request themselves (this will prevent the corresponding After* event from being called). Note that this parameter's value is ignored if an error is returned via ResultCode.
The FireAfterEvent parameter specifies whether the corresponding After* event should be fired; it is true by default. Note that, regardless of how this parameter is set, the corresponding After* event will not fire if Processed is true, or if an error code is returned via ResultCode.
The StopFiltering parameter specifies whether the class's system driver should ignore all further operations for the registry key; it is false by default. Applications may set this parameter to true to prevent any further events from firing for the registry key.
The ResultCode parameter will always be 0 when the event is fired. If the event cannot be handled in a "successful" manner for some reason (e.g., a resource isn't available, security checks failed, etc.), set it to a non-zero value to report an appropriate error. Please refer to the Error Reporting and Handling topic for more information.
This event is fired synchronously; please refer to the Event Types topic for more information.