cityhunter
驱动牛犊
驱动牛犊
  • 注册日期2002-06-07
  • 最后登录2003-07-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1658回复:7

请问列位高手:如何在WIN2000驱动程序中显示(弹出)对话框?

楼主#
更多 发布于:2003-06-21 23:17
请问:如何在WIN2000驱动程序中显示(弹出)对话框?
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
沙发#
发布于:2003-06-22 00:13
非正式对
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-09 23:43
不知道行不行,虽然,ring3可以采用某种机制跳到ring0去,但如果包含了ui操作,不知道还能不能正常运行
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
地板#
发布于:2003-07-10 03:30
int _cdecl _vsnprintf(PCHAR, LONG, PCHAR, PULONG);

#pragma warning(disable : 4212) // disable warning about non-standard extension

void _cdecl PopupDrvMsgBox(PCHAR format,long args)
{
    UNICODE_STRING uString;
    ANSI_STRING aString;
    UCHAR   aBuffer[256];

    //
    // sprintf format to an ASCII string for display.
    //
    _vsnprintf( aBuffer, 256, format, &args);

    //
    // Now convert from ASCII to Unicode.
    //
    RtlInitAnsiString( &aString, aBuffer);
    if (STATUS_SUCCESS!=RtlAnsiStringToUnicodeString( &uString, &aString, TRUE))
return;

     // Post a GUI pop-up message box with the string.
    // NOTE: STATUS_SERVICE_NOTIFICATION stopped working after Service Pack 3.
    
    IoRaiseInformationalHardError( STATUS_FATAL_APP_EXIT, &uString, NULL);
    //   IoRaiseInformationalHardError( 1, &uString, NULL);

    RtlFreeUnicodeString( &uString);
}

这样就可用了

PopupDrvMsgBox(\" KeSetEvent status is %X \\n\",status);
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-10 14:59
楼上,那可是产生硬件错误,恐怕不是楼主想要的。 :D
cityhunter
驱动牛犊
驱动牛犊
  • 注册日期2002-06-07
  • 最后登录2003-07-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-17 21:49
根据msdn在线所述,IoRaiseInformationalHardError的行为不是程序员所想象的那样。
症状如下:
IoRaiseInformationalHardError原型为:
VOID IoRaiseInformationalHardError(
         IN NTSTATUS  ErrorStatus,
         IN PUNICODE_STRING  String,  /* optional */
         IN PKTHREAD  Thread          /* optional */
         );
此函数的作用是向用户弹出一个消息框,对设备i/o错误发出警告,表明用户i/o请求为何失败。
原因:
许多程序员企图传递一个由驱动程序定义的错误状态,同时/或者在一个弹出式消息框中显示一个程序员希望的字符串。但事实并非如此,该API的实际行为如下:
(1)对任何在%DDK%\\inc\\ntstatus.h之外定义的ErrorStatus,弹出式消息框显示的文本为:\"Unknown Hard Error\",无论String参数如何;
(2)对任何在ntstatus.h中定义的ErrorStatus,弹出式消息框显示的文本对应于ntstatus.h中的MessageText,无论String参数如何;
(3)当Thread参数在某个应用程序的上下文中,弹出式消息框的标题为:\"ApplicationName.exe - System Error.\"
(4)当Thread参数为NULL或者在任意system上下文中,弹出式消息框的标题为:\"System Process - System Error,\" 并且MessageText写入事件日志(Event Log)――如果ErrorStatus在ntstatus.h中有定义。
解决办法:
使用Event Log APIs 将驱动程序定义的事件字串通知用户。(参考 section 16.6, Error Logging and NTSTATUS Values, in the Kernel-mode Driver Design Guide, and the sample in %DDK%\\src\\general\\errorlog for more information on this technique.
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
6楼#
发布于:2003-07-18 01:47
[quote]非正式对
johndeng
驱动牛犊
驱动牛犊
  • 注册日期2003-06-06
  • 最后登录2004-06-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-06 20:23
I think so. IOCTL interface
游客

返回顶部