In many situations the user will want to switch back and forth between Check All and checking a subset of checkboxes. If that is the case, then do not automatically check all the checkboxes when Check All is selected because that erases the work the user will want to use later. Disabling the individual checkboxes is sufficient for most users to understand that their settings don’t apply. This also provides the users with a preview of what they would get if they switch off Check All, and now with a single click, the users can undo or revert Check All.
In any case, the Check All function should probably not be handled a check box control. It’s weird when unchecking leads to enabling. If you don’t use disabling, then it’s even worse, because now you should check all the individual check boxes when Check All is selected. This means checking one check box checks a bunch of others, but check boxes are not supposed to execute commands such as editing attributes. Then when the user unchecks one of the individual check boxes, the Check All check box must change, so again, a check box is affecting the settings of another control.
The solution is to use radio buttons to select between All and Custom (or whatever), where selecting Custom enables the individual checkboxes. This allows you to put the Custom radio button close to the individual checkboxes (perhaps surrounded by a border) so it’s clear what will enable the checkboxes. It also makes it easy to add a None option, which may be a good idea in your case.
An alternative is to treat Check All as a command and make it a command button, which are typically used to change the attributes or characteristics of something. Because a command button has no lasting state, it’s not affected by setting the individual check boxes. In addition to the All button, you probably want a Reset button that reverts the individual check boxes to what they were before selecting All. A Clear button unchecks all checkboxes.