Click here to Skip to main content
13,052,641 members (62,455 online)
Click here to Skip to main content
Add your own
alternative version


116 bookmarked
Posted 26 Mar 2002

Communication between GUI Application and Device Driver

, 26 Mar 2002
Rate this:
Please Sign up or sign in to vote.
An article on Communication between GUI Application and Device Driver
<!-- Download Links -->


Recently I read a good article in which the author wrote a device driver and a GUI program, and he wanted to notify the GUI App when some event happened in the device driver. In his article, when a new process was created, a callback function in his driver would be called and it would notify the GUI App and display some information about the new process immediately. In the device driver, the author create a named event and opened it in GUI App. Then when an event happened, he handled it like this:

KeSetEvent(Event, 0, FALSE);

At this time, the GUI App was waiting for the event. Between the interval of the two functions, the App must got information of the new process. It works, but I don't think it's a good solution.

Why does the author code like this? Because, if we create an event in kernel mode, we can't modify its state in user mode, we only can check its state. But normally, we want the GUI App to modify the event to to non signaled, and it can wait the event again. I think this is the eligible IPC model to deal with this question.

About my solution

Kernel mode has higher priority than user mode. In kernel mode we can modify data in user mode conveniently. So I create an event object in user mode, and refer it in kernel mode. Now both device driver and GUI App can check and modify the state of the event object.

How to integrate it into your application

In your App, you must open the device object firstly, then code like this:

  1. Create an event object and down it into driver.
    HANDLE m_hCommEvent = CreateEvent(NULL, false, false, NULL);
    //download event object to device driver, m_hCommDevice is the device object
                    (LPVOID) m_hCommEvent, 
  2. Wait the event object to be signaled.
    	WaitForSingleObject(m_hCommEvent, INFINITE);
    	//After this function, the event is set to non signaled. 
    	//Get information and deal with it.

In the device driver the code like this:

  1. In the IRP_MJ_DEVICE_CONTROL major routine:
    hEvent = (HANDLE) irpStack->Parameters.DeviceIoControl.Type3InputBuffer;
    status = ObReferenceObjectByHandle(

    the gpEventObject is a PRKEVENT object, so we can use KeEventXXX and KeWaitForXXX to operate it.

  2. When the object event happened
    KeSetEvent(gpEventObject, 0, FALSE);
  3. When we don't need it, we should dereference it:

I have tested my solution in a personal firewall product. It works well. When my IP Filter Driver got an IP packet, it checks the IP header as my security rules. If the packet will be intercepted, it reports to my GUI App.

The sample download include two projects: a GUI app and a device driver. The GUI App is a dialog based MFC application. It has a log window which can register the operations on event object. The device driver is only a very simple kernel mode device driver. It can operate the event object as the GUI App requries. I you want to run this demo, you must install and start the driver firstly.

Because there are so many tools can install and start device deriver, so I don't include the code to do this work.

If you have any problems and advices, Please notify me.


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

United States United States
No Biography provided

You may also be interested in...


Comments and Discussions

AnswerRe: Isn't it really slow? Pin
DavidR_r7-Jul-04 9:04
memberDavidR_r7-Jul-04 9:04 
GeneralRe: Isn't it really slow? Pin
tomithecat7-Jul-04 9:33
membertomithecat7-Jul-04 9:33 
GeneralRe: Isn't it really slow? Pin
Anonymous5-Nov-04 11:37
sussAnonymous5-Nov-04 11:37 
Generalabout Miniport Driver! Pin
dewen18-Aug-03 10:13
memberdewen18-Aug-03 10:13 
Questionhow to control the power of the display monitor Pin
steven cao17-Aug-03 23:15
membersteven cao17-Aug-03 23:15 
AnswerRe: how to control the power of the display monitor Pin
DeenaA22-Mar-04 18:09
sussDeenaA22-Mar-04 18:09 
GeneralHelp required for Communication b/w an application and kernel mode driver Pin
Muhammad Asif Khan25-Jun-03 22:47
memberMuhammad Asif Khan25-Jun-03 22:47 
QuestionHow can I receive data from Gui Application Pin
Beyond11-Jun-03 17:59
memberBeyond11-Jun-03 17:59 
Questionhow to start Pin
rakeshniranjan15-May-03 22:10
sussrakeshniranjan15-May-03 22:10 
AnswerRe: how to start Pin
Anonymous12-Jun-03 4:08
sussAnonymous12-Jun-03 4:08 
GeneralMore information on NDIS drivers Pin
machiav28-Apr-03 7:51
membermachiav28-Apr-03 7:51 
QuestionHow to use acmFormatChoose Pin
BlkGoat1-Apr-03 1:03
memberBlkGoat1-Apr-03 1:03 
GeneralModems in VC++ Pin
venkat_vs_12326-Feb-03 21:05
membervenkat_vs_12326-Feb-03 21:05 
GeneralDisplay Device Drivers Pin
vikrams24-Feb-03 20:20
membervikrams24-Feb-03 20:20 
GeneralRe: Display Device Drivers Pin
mamata12-Mar-03 9:09
membermamata12-Mar-03 9:09 
Questionhow call dll function in device driver? Pin
hrp9-Feb-03 18:42
memberhrp9-Feb-03 18:42 
AnswerRe: how call dll function in device driver? Pin
vjairam27-Feb-03 16:20
membervjairam27-Feb-03 16:20 
GeneralOther Security Issues Pin
Anonymous26-Aug-02 7:11
sussAnonymous26-Aug-02 7:11 
Generalcompilation error Pin
suguna30-Jul-02 19:11
susssuguna30-Jul-02 19:11 
GeneralRe: compilation error Pin
LeeSangMo19-Aug-02 23:33
sussLeeSangMo19-Aug-02 23:33 
Generalcompilation error Pin
Anonymous30-Jul-02 19:03
sussAnonymous30-Jul-02 19:03 
GeneralRe: compilation error Pin
Msftone23-Sep-03 14:15
memberMsftone23-Sep-03 14:15 
QuestionHow can I read data from GUI in this driver? Pin
Anonymous22-Jul-02 2:56
sussAnonymous22-Jul-02 2:56 
Generalcannot compile! please help Pin
John Wong2-Jul-02 4:57
memberJohn Wong2-Jul-02 4:57 
GeneralRe: cannot compile! please help Pin
Anonymous22-Jul-02 5:19
sussAnonymous22-Jul-02 5:19 
GeneralIt's just a thing of security... Pin
Daniel Lohmann27-Mar-02 22:54
memberDaniel Lohmann27-Mar-02 22:54 
GeneralRe: It's just a thing of security... Pin
Anonymous28-Mar-02 0:53
memberAnonymous28-Mar-02 0:53 
GeneralRe: It's just a thing of security... Pin
Anonymous1-Apr-02 11:09
memberAnonymous1-Apr-02 11:09 
GeneralRe: It's just a thing of security... Pin
müsli20-Jul-03 0:47
membermüsli20-Jul-03 0:47 
GeneralIt's actually pretty simple Pin
Gal Diskin10-Nov-03 3:36
sussGal Diskin10-Nov-03 3:36 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170713.1 | Last Updated 27 Mar 2002
Article Copyright 2002 by lizhiwei
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid