From - Wed Oct 29 11:06:32 1997 Path: news.mitre.org!blanket.mitre.org!agate!ihnp4.ucsd.edu!newshub.nosc.mil!newshub.cts.com!newsfeed.cts.com!cmkrnl!jeh From: jeh@cmkrnl.com (Jamie Hanrahan) Newsgroups: comp.os.ms-windows.programmer.nt.kernel-mode Subject: Re: IoRequestDpc Message-ID: <1997Oct28.171356.8279@cmkrnl> Date: 28 Oct 97 17:13:56 PST References: <01bce3c3$f5fedde0$822bb2cc@cruss> Organization: Kernel Mode Systems, San Diego, CA Lines: 30 In article <01bce3c3$f5fedde0$822bb2cc@cruss>, "Christine Russ" writes: > Hello Everybody, > I just read something in the DDK (NT 4.0) that scared me. I hope it > is just a typo. It is in section 3.6.1, of the Kernel-Mode Drivers Design > Guide, Registering and Queuing a DpcForIsr Routine. The second last > paragraph (right before the last sentence) states "Even in a uniprocessor > machine, the ISR could be called again if the device interrupts WHILE or > before the DpcForIsr is run. If this occurs, the DpcForIsr routine is run > only once." > > I have no problem with above statement if you remove the word "WHILE". > From what I can see, this is not indicated elsewhere in the DDK. > Everywhere else in the DDK, it tells you that a dpc object cannot be queued > to execute more than once. If the ISR executes while the DpcForIsr is > running, the DpcForIsr object should no longer be queued, so a call to > IoRequestDpc in the this exectution of the ISR should cause the DpcForIsr > to be queued again. Right??? That's right. When the DPC is executing the object has already been removed from the queue, and it can be put on the queue again, either via IoRequestDpc or KeInsertQueueDpc. Easy demo: Try calling IoRequestDpc from the DPC routine! --- Jamie Hanrahan, Kernel Mode Systems, San Diego CA Internet: jeh@cmkrnl.com (JH645) CompuServe: 74140,2055 drivers, internals, networks, applications, and training for VMS and Windows NT NT driver FAQ, links, and other information: http://www.cmkrnl.com/ If you post a reply in news, please don't e-mail it too.