This problem occurs because of a hard-coded breakpoint in
the Afd.sys process. This breakpoint occurs because the processor continues to
run code before an asynchronous procedure call (APC) occurs. This timing
problem occurs only on very fast processors when they are used together with
earlier operating systems.
Note The APC is queued in the Afd.sys process.
After the APC
is queued, a series of commands are run. These commands include a check to
determine the following:
- Whether the event in the IO Request Packet (IRP) is
signaled
- Whether the return from the IoCallDriver routine was "non-error"
If the event is not signaled, and if the
IoCallDriver routine returns a "non-error" status, a code section is
implemented that calls the
DbgBreakPoint routine. The
DbgBreakPoint routine is implemented when either the event or the
IoCallDriver routine behaves incorrectly. When the
DbgBreakPoint routine is called in this area of code, this resembles a
situation in which the
BugCheck routine is called. In both situations, the code should not
continue to run past the point that is specified in the instructions if the
assumption of incorrect behavior is true.
A stack trace of the failure
shows that the event is signaled at the time that the
DbgBreakPoint routine occurs. However, the
DbgBreakPoint routine occurs because the event was not signaled at the time of
the check.