阅读:2581回复:9
如何在内核态弹出对话框?
我最近在学习编写驱动程序,现在有个疑问是驱动程序是运行在ring0级的,如何在这个级别弹出对话框呢?以前写的都是应用层的程序,感觉在内核态下不能在直接用诸如CreateWindowEx ,以及DialogBox这种函数了。请高手指点一下,谢谢!
|
|
沙发#
发布于:2007-02-04 15:37
引用第4楼s0beit于2007-01-15 18:33发表的“”: 改了还是祗有一种类型! |
|
板凳#
发布于:2007-01-18 10:36
反正都驱动了,那就自己画窗体(写屏,写屏),消息需要的话处理鼠标和键盘(Attatch到他们驱动上,XX~)
|
|
|
地板#
发布于:2007-01-17 22:49
queue a APC to a user mode process, say explorer.exe
|
|
地下室#
发布于:2007-01-17 22:00
谢谢楼上两位,这些函数虽然能够实现,但是我想达到的效果是以后弹出的对话框可以自己加一些比如复选框之类的控件,现在我暂时用进程间通信的方法搞定它
|
|
5楼#
发布于:2007-01-17 17:05
以前写WIN98下的VXD驱动时,有个内核对话框函数SHELL_MESSAGEBOX。清华大学出的早期VXD编程书中的第一个例子就是将弹出内核对话框的,建立楼主参考一下。后来没有用过,就不知道XP下怎么样。
|
|
|
6楼#
发布于:2007-01-15 18:33
有个undocumented的方法,通过用STATUS_SERVICE_NOTIFICATION的方法调用NtRaiseHardError就可以了。
ULONG pUnicodeArguments[] = {0, 0, 0}; ULONG ReturnValue; RtlInitUnicodeString(&uniText, L"Work?"); RtlInitUnicodeString(&uniCaption, L"Text"); pUnicodeArguments[0] = (ULONG)&uniText; pUnicodeArguments[1] = (ULONG)&uniCaption; ZwRaiseHardError(0x50000018, 3, 3, pUnicodeArguments, 1, &ReturnValue); 第5个参数是弹出的对话框的类型。 |
|
7楼#
发布于:2007-01-09 18:03
引用第2楼WQXNETQIQI于2007-01-09 17:31发表的“”: 我看不到代码啊,能不能帮忙帖上来,谢谢 |
|
8楼#
发布于:2007-01-09 17:31
|
|
|
9楼#
发布于:2007-01-09 17:22
老兄,我觉得内核态是非图形界面的吧?做个Linux的人应该清楚吧。
|
|
|