找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 1440|回复: 4

编码技巧系列之二:装逼的艺术

[复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2014-7-17 10:47:07 | 显示全部楼层 |阅读模式
装逼其实是一门很高深的学问,在什么领域都有各自不同的装逼方法。下面来演示一下,怎么不用MessageBox系列函数而弹出一个对话框。
  1. VOID NTAPI InternalNtMessageBox(IN LPCTSTR lpCaption,IN LPCTSTR lpText)
  2. {
  3.         typedef enum _HARDERROR_RESPONSE_OPTION
  4.         {
  5.                 OptionAbortRetryIgnore,
  6.                 OptionOk,
  7.                 OptionOkCancel,
  8.                 OptionRetryCancel,
  9.                 OptionYesNo,
  10.                 OptionYesNoCancel,
  11.                 OptionShutdownSystem
  12.         } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
  13.         typedef enum _HARDERROR_RESPONSE
  14.         {
  15.                 ResponseReturnToCaller,
  16.                 ResponseNotHandled,
  17.                 ResponseAbort,
  18.                 ResponseCancel,
  19.                 ResponseIgnore,
  20.                 ResponseNo,
  21.                 ResponseOk,
  22.                 ResponseRetry,
  23.                 ResponseYes
  24.         } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
  25.         typedef NTSTATUS (NTAPI *PFNNtRaiseHardError)
  26.                 (
  27.                 IN NTSTATUS                ErrorStatus,
  28.                 IN SIZE_T                NumberOfParameters,
  29.                 IN SIZE_T                UnicodeStringParameterMask OPTIONAL,
  30.                 IN PVOID                Parameters,
  31.                 IN ULONG                ResponseOption,
  32.                 OUT PULONG                Response
  33.                 );
  34.         PFNNtRaiseHardError pfnNtRaiseHardError = (PFNNtRaiseHardError)GetProcAddress(GetModuleHandleW(L"ntdll.dll"),"NtRaiseHardError");
  35.         //TEST
  36.         SIZE_T pUnicodeArguments[] = {0, 0, 0};
  37.         ULONG ReturnValue=0;
  38.         UNICODE_STRING uniText,uniCaption;
  39.         RtlInitUnicodeString(&uniText, lpText);        //L"Text"
  40.         RtlInitUnicodeString(&uniCaption, lpCaption);        //L"Caption"
  41.         pUnicodeArguments[0] = (SIZE_T)&uniText;
  42.         pUnicodeArguments[1] = (SIZE_T)&uniCaption;
  43.         pfnNtRaiseHardError(0x50000018, 3, 3, pUnicodeArguments, 1, &ReturnValue);
  44. }
复制代码

把这个函数用在代码里,当开代码审查会的时候,会让很多初级程序员投来膜拜羡慕和妒忌的目光。

0

主题

18

回帖

0

精华

铂金会员

积分
2252
发表于 2014-7-17 13:57:21 | 显示全部楼层
这是内核弹框吗?{:soso_e130:}

点评

不是,在RING3用的。内核直接弹出可能要改改。  发表于 2014-7-17 21:24

3

主题

52

回帖

0

精华

金牌会员

积分
1043
发表于 2014-7-17 20:03:23 | 显示全部楼层
我还以为是用CreateWindowEx做到的

点评

这个装逼程度不够高。  发表于 2014-7-17 21:24
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表