找回密码
 注册
快捷导航
查看: 2888|回复: 8

【原创】ShockAlarm2 - IBM硬盘保护系统警报器及其原理简介

[复制链接] |自动提醒
阅读字号:

1221

回帖

40

积分

4385

资产值

钻石会员 Rank: 3Rank: 3Rank: 3

注册时间
2004-5-30
发表于 2005-12-31 17:13:54| 字数 1,691| - 中国–四川–绵阳 联通 | 显示全部楼层 |阅读模式
这个是全新版本的ShockAlarm,赶在2006年前完成了。

[+]这个版本采用了自己写的API hook来监控硬盘的状态,
[+]对使用中文繁简体用户界面的支持

详细的使用说明可以参考:
http://www.thinkpad.cn/forum/viewthread.php?tid=206440&fpage=1&highlight=

实现原理:
下面把上个帖子中没有写的实现原理部分补充完整(假定了解Win32和C/C++编程)

这个程序利用了一个user mode的API hook来实现对硬盘的监控。
当IBM硬盘保护系统(kernel mode部分)监测到足够强的震动时,
将硬盘挂起,同时通知user mode的程序Tpshocks.exe,而这个程序
将调用一个API函数,Shell_NotifyIconW相应地改变系统托盘的图标。

我的这个程序ShockAlarm.exe, 将一个API hook driver(ShockAlarm.dll)注入到
Tpshocks.exe,并实现对Shell_NotifyIconW的hook, 使得每当Tpshocks.exe调用
Shell_NotifyIconW来改变图标时ShockAlarm.exe就会收到一个自定义的windows消息
这样ShockAlarm.exe就可以得到硬盘的当前状态,然后相应地做出反应。还是很简单的。

附:ShockAlarm.dll的源代码

  1. //==================================
  2. //
  3. //        ShockAlarm.dll Module
  4. //
  5. //==================================
  6. #include <windows.h>

  7. #define cWM_TPSHOCKNOTIFY        (WM_USER + 0x000D)
  8. //----------------------------------------------------
  9. //
  10. //        Hook_Shell_NotifyIconW()
  11. //
  12. //----------------------------------------------------
  13. BOOL
  14. WINAPI
  15. Hook_Shell_NotifyIconW(
  16.                                            DWORD dwMessage,
  17.                                            PNOTIFYICONDATAW lpdata
  18.                                            )
  19. {
  20.         WPARAM wParam;
  21.         /* we only need to check the first character */
  22.         switch(lpdata->szTip[0])
  23.         {
  24.         case L'S':
  25.         case L'检':
  26.         case L'偵':
  27.                 /* Shock detected; Hard drive stopped */
  28.                 wParam = 0;
  29.                 break;

  30.         case L'N':
  31.         case L'没':
  32.         case L'未':
  33.                 /* No shock detected; Hard drive running */
  34.                 wParam = 1;
  35.                 break;

  36.         case L'M':
  37.         case L'手':
  38.         //case L'手':
  39.                 /* Manually suspended [0.5 min]; Hard drive running */
  40.                 wParam = 2;
  41.                 break;

  42.         default:
  43.                 wParam = (WPARAM)-1;
  44.                 break;
  45.         }

  46.         /* Get the ShockAlarm thread ID */
  47.         HANDLE hMapObject = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "ShockAlarm_TID");
  48.         LPDWORD lpdwTid = (LPDWORD)MapViewOfFile(hMapObject, FILE_MAP_WRITE, 0, 0, 0);

  49.         /* Post the message to ShockAlarm */
  50.         PostThreadMessage(*lpdwTid, cWM_TPSHOCKNOTIFY, wParam, (LPARAM)dwMessage);
  51.         CloseHandle(hMapObject);

  52.         return Shell_NotifyIconW(dwMessage, lpdata);
  53. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
http://chris.wu.yale.googlepages.com/home

2434

回帖

1

积分

5447

资产值

初级会员 Rank: 1

注册时间
2005-6-3
发表于 2005-12-31 17:34:06| 字数 57| - 中国–广东–广州–白云区 电信 | 显示全部楼层
第一个顶!!!!!!

对楼主的钻研精神表示由衷的敬意。

[ 本帖最后由 xlaser 于 2005-12-31 18:15 编辑 ]
回复 支持 反对

使用道具 举报

6407

回帖

2

积分

9783

资产值

初级会员 Rank: 1

注册时间
2003-9-16
铜牌荣誉勋章(注册8年以上会员)
发表于 2005-12-31 17:48:39| 字数 26| - 中国–北京–北京–海淀区 教育网/北京大学 | 显示全部楼层
我c~太nb了。原谅我说粗口,太激动了。。送花!!!
X40-6KC
T400-2765MT3
5D 24-105
回复 支持 反对

使用道具 举报

446

回帖

0

积分

2148

资产值

入门会员 Rank: 1

注册时间
2003-12-12
发表于 2005-12-31 18:10:14| 字数 36| - 中国–广东–深圳 电信 | 显示全部楼层
很强很实用,从第一版出来就关注了
联想应该和你联系,将此功能加入随机软件中
T42 2373-6YA Dothan1.7/DDR333 1G/5400.3 160G/R7500/15'SXGA+/BMDC200b/mini dock
回复 支持 反对

使用道具 举报

3316

回帖

50

积分

7293

资产值

钻石会员 Rank: 3Rank: 3Rank: 3

注册时间
2003-3-14
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2005-12-31 18:16:22| 字数 44| - 中国–江苏–南京 电信 | 显示全部楼层
此真正的原创,强顶之。

那些动不动就声称自己帖子是“原创”的伪原创们,是否为之感到脸红呢?
thinking...
回复 支持 反对

使用道具 举报

2434

回帖

1

积分

5447

资产值

初级会员 Rank: 1

注册时间
2005-6-3
发表于 2005-12-31 18:19:21| 字数 45| - 中国–广东–广州–白云区 电信 | 显示全部楼层
楼上1000贴,帮你纪念一下

[ 本帖最后由 xlaser 于 2005-12-31 18:20 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

4506

回帖

51

积分

1万

资产值

钻石会员 Rank: 3Rank: 3Rank: 3

注册时间
2005-9-15
银牌荣誉勋章(注册10年以上会员)
发表于 2007-2-6 23:22:02| 字数 13| - 西班牙 | 显示全部楼层
呵呵,正需要!谢了,楼主!
强迫症
回复 支持 反对

使用道具 举报

bush-911 - 助理站长

6万

回帖

678

积分

17万

资产值

天下无敌I Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

注册时间
2007-5-15
银牌荣誉勋章(注册10年以上会员)年全勤勋章2022铜牌荣誉勋章(注册8年以上会员)月全勤勋章年全勤勋章2023年全勤勋章2024
发表于 2007-7-20 19:19:12| 字数 12| - 中国–重庆–重庆–南岸区 电信 | 显示全部楼层
下载了测试通过。谢谢楼主
回复 支持 反对

使用道具 举报

1

回帖

0

积分

11

资产值

入门会员 Rank: 1

注册时间
2008-7-31
发表于 2008-7-31 02:10:54| 字数 4| - 中国–江西–新余 电信 | 显示全部楼层
fdvf
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.5 © 2001-2023 Comsenz Inc

GMT+8, 2025-2-1 15:47 , Processed in 0.123295 second(s), 47 queries , Gzip On, OPcache On.

手机版|小黑屋|安卓客户端|iOS客户端|Archiver|备用网址1|备用网址2|在线留言|专门网

返回顶部