3.2.5.2 Receiving a RopModifyRules ROP Request

When receiving a RopModifyRules ROP request ([MS-OXCROPS] section 2.2.11.1), the server MUST parse the request according to the syntax specified in section 2.2.1. If the server encounters an error while parsing the request buffer, or if any data in the request buffer is incorrect, the server MUST return an error in the ReturnValue field in the response buffer.

If the server successfully parses the data in the request buffer and is able to process all requests for adding, modifying, and deleting rules (2) present in the request buffer, the server MUST return 0x00000000 as the value of the ReturnValue field in the response buffer. The server MUST assign a value for the PidTagRuleId property (section 2.2.7.8) for each rule (2) that has been added by the RopModifyRules ROP request. The value of the PidTagRuleId property on each rule (2) MUST be unique in that folder.

The server can limit the rules (2) it allows on a folder to a certain number of rules (2) or to a total aggregate size of rules.<20> If a RopModifyRules request causes the rules (2) to exceed the limit, the server MUST return the ecNotEnoughMemory (0x8007000E) error in the ReturnValue field of the RopModifyRules response. Regardless of the limit, the server SHOULD<21> save all changes specified by the RopModifyRules request.

The server MUST update the value of the PidTagHasRules property (section 2.2.8.1) when rules (2) change on a folder. The value of this property MUST be set to "TRUE" if any rules (2) are set in that folder and to "FALSE" otherwise. The server SHOULD start using the newly modified rules (2) when processing messages delivered to that folder as soon as it successfully processes the RopModifyRules ROP request. Any rules that exceed the limit are disabled during message delivery to the folder.

The following error codes can be returned by this ROP.

Error code name

Value

Meaning

ecInvalidParam

0x80070057

One or more of the x bits in the ModifyRulesFlag field of the ROP request is not set to 0.

ecNotEnoughMemory

0x8007000E

The number of rules (2) has been exceeded or the aggregate size of rules (2) has been exceeded.