【原创】ShockAlarm2 - IBM硬盘保护系统警报器及其原理简介
这个是全新版本的ShockAlarm,赶在2006年前完成了。^u^[+]这个版本采用了自己写的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就可以得到硬盘的当前状态,然后相应地做出反应。还是很简单的。^u^
附:ShockAlarm.dll的源代码
//==================================
//
// ShockAlarm.dll Module
//
//==================================
#include <windows.h>
#define cWM_TPSHOCKNOTIFY (WM_USER + 0x000D)
//----------------------------------------------------
//
// Hook_Shell_NotifyIconW()
//
//----------------------------------------------------
BOOL
WINAPI
Hook_Shell_NotifyIconW(
DWORD dwMessage,
PNOTIFYICONDATAW lpdata
)
{
WPARAM wParam;
/* we only need to check the first character */
switch(lpdata->szTip)
{
case L'S':
case L'检':
case L'偵':
/* Shock detected; Hard drive stopped */
wParam = 0;
break;
case L'N':
case L'没':
case L'未':
/* No shock detected; Hard drive running */
wParam = 1;
break;
case L'M':
case L'手':
//case L'手':
/* Manually suspended ; Hard drive running */
wParam = 2;
break;
default:
wParam = (WPARAM)-1;
break;
}
/* Get the ShockAlarm thread ID */
HANDLE hMapObject = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "ShockAlarm_TID");
LPDWORD lpdwTid = (LPDWORD)MapViewOfFile(hMapObject, FILE_MAP_WRITE, 0, 0, 0);
/* Post the message to ShockAlarm */
PostThreadMessage(*lpdwTid, cWM_TPSHOCKNOTIFY, wParam, (LPARAM)dwMessage);
CloseHandle(hMapObject);
return Shell_NotifyIconW(dwMessage, lpdata);
}
第一个顶!!!!!!
对楼主的钻研精神表示由衷的敬意。
[ 本帖最后由 xlaser 于 2005-12-31 18:15 编辑 ] 我c~太nb了。原谅我说粗口,太激动了。。送花!!! 很强很实用,从第一版出来就关注了
联想应该和你联系,将此功能加入随机软件中 此真正的原创,强顶之。
那些动不动就声称自己帖子是“原创”的伪原创们,是否为之感到脸红呢? 楼上1000贴,帮你纪念一下
[ 本帖最后由 xlaser 于 2005-12-31 18:20 编辑 ] 呵呵,正需要!谢了,楼主! 下载了测试通过。谢谢楼主 fdvf
页:
[1]