Asserts that the calling code can access the resource identified by the current permission object, even if callers higher in the stack have not been granted permission to access the resource.
Calling IStackWalk.Assert stops the permission check on callers higher in the call stack. Therefore, even if these callers do not have the requisite permissions, they can still access resources. An assertion is effective only if the code that calls IStackWalk.Assert passes the security check for the permission that it is asserting.
A call to IStackWalk.Assert is effective until the calling code returns to its caller or until a subsequent call to IStackWalk.Assert renders the previous assertion ineffective. Also, CodeAccessPermission.RevertAssert or CodeAccessPermission.RevertAll removes a pending IStackWalk.Assert.
IStackWalk.Assert is ignored for a permission not granted because a demand for that permission will not succeed. However, if code lower on the call stack calls IStackWalk.Demand for that permission, a System.Security.SecurityException is thrown when the stack walk reaches the code that tried to call IStackWalk.Assert. This happens because the code that called IStackWalk.Assert has not been granted the permission, even though it tried to IStackWalk.Assert it.
Because calling IStackWalk.Assert removes the requirement that all code in the call chain must be granted permission to access the specified resource, it can open up security vulnerabilities if used incorrectly or inappropriately. Therefore, it should be used with great caution.