So, you want to prevent a block definition from being changed.
LockDocument() has nothing to do with preventing data in database being modified. It is meant to flag the code execution should occur in Application context or document context.
Nor setting layer being locked helps, because block definition (BlockTableRecord) is no an Entity, which must sit on a layer.
You would want to have a good reason as why you do not want to protect the block definition being changed WHILE your application is used in the AutoCAD session, because whatever protection you managed to use with your application, only have its effect while your application is loaded, and while your application is loaded, what business operation could lead to a CAD user to attempt to modify the said block definition(s).
If you still think it is absolutely necessary, you can look into ObjectOverrule and overwrite the its Open() and/or Close() method: if the object being opened/closed is the target BlockTableRecord for writing, you can raise an exception so that the Open()/Close() can be silently cancelled during runtime (in debugging, the code would break, though).