366.7 KB - Evernote
366.7 KB - Evernote
366.7 KB - Evernote
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
We are now going to analyze a trace captured with it. It begins with the APC being initialized, then the<br />
first captured event we see is the call to SwapContext:<br />
APCTEST - Thr: 0X851D2030; APC initialized: 0X850F7A9C<br />
APCTEST - SWAP CONTEXT trace<br />
APCTEST - Current IRQL: 0x1b<br />
APCTEST - Current thread: 0X851D2030<br />
APCTEST - Current thread K APC pending: 1<br />
APCTEST - Current thread K APC list empty: 0<br />
APCTEST - Current thread U APC pending: 0<br />
APCTEST - Current thread U APC list empty: 1<br />
APCTEST - New thread: 0X84CBB460<br />
APCTEST - New thread K APC pending: 0<br />
APCTEST - New thread K APC list empty: 1<br />
APCTEST - New thread U APC pending: 0<br />
APCTEST - New thread U APC list empty: 1<br />
APCTEST - APC INT: 1<br />
The SwapContext trace shows the IRQL at which the function runs (0x1b), then some data on the<br />
current thread (the one about to be suspended). First of all we see that this thread is indeed the<br />
same one which initialized the APC (0X851D2030), then we see that the KernelApcPending flag for it<br />
is set to 1 and that its kernel APC list is not empty (this is shown by the 0, i. e. false, value on the<br />
corresponding line).<br />
Then we see that the new thread (0X84CBB460), has KernelApcPending clear, an empty kernel APC<br />
list and the same goes for the user APC data. This tells us that this thread has no APC to deliver.<br />
Finally, the line labeled “APC INT” shows the status of the APC interrupt flag at the time of the trace: it<br />
is set, meaning that the APC interrupt resulting from nt!KeInsertQueueApc is pending.<br />
After the swap context we see a call to nt!KiDeliverApc traced:<br />
APCTEST - DELIVER APC trace<br />
APCTEST - Current IRQL: 0x1<br />
APCTEST - Caller address: 0X81BB42F7<br />
APCTEST - Trap frame: 00000000<br />
APCTEST - Reserved: 00000000<br />
APCTEST - PreviousMode: 0<br />
APCTEST - Thread: 0X84CBB460<br />
APCTEST - Thread K APC pending: 0<br />
APCTEST - Thread K APC list empty: 1<br />
APCTEST - Thread U APC pending: 0<br />
APCTEST - Thread U APC list empty: 1<br />
12