源文件:
#include "stdafx.h"
#include "hotfix.h"
int _tmain(int argc, _TCHAR* argv[])
{
//WmiInit();
Hotfix h[200];
int counts=Gethotfix(h);
std::cout < < "Hotfix Begin:" <
源文件:
#include "stdafx.h"
#include "hotfix.h"
int _tmain(int argc, _TCHAR* argv[])
{
//WmiInit();
Hotfix h[200];
int counts=Gethotfix(h);
std::cout < < "Hotfix Begin:" <
一、安装VS2008
二、安装Visual Assist (这不是必需的)但它确是我们开发时不可多得的好工具
三、安装WDK
四、安装DDKWizard
下载地址:http://ddkwizard.assarbad.net/
需要下载的文件有
1、ddkwizard_setup.exe
2、ddkbuild_bat.zip
3、ddkbuild_cmd.zip
安装第一个文件跟安装普通程序一样只需要按默认设置即可
2、3两个文件只需要解压copy到我们的wdk所有的根目录即可
接下来的我们便要设置环境变量了
需要设置的地方有两个
1、path
需将D:\WinDDK添加到Path变量中
否则编译时会出现找不到命令的错误
Keydata=Irp->AssociatedIrp.SystemBuffer;
numKeys=Irp->IoStatus.Information / Sizeof(KEYBOARD_INPUT_DATA);
for ( i=0;i<numKeys;i++)
{
DbgPrint(("numKeys : %d ",numKeys));
DbgPrint(("Scan code : %x ",KeyData->MakeCode));
DbgPrint(("%s\n",KeyData->Flags? "up":"down"));
MyPrintKeyStroke((UCHAR)KeyData->MakeCode);
if (KeyData->MakeCode==CAPS_LOCK)
{
KeyData->MakeCode=LCONTROL;
}
}
以上是书上的源代码,整个循环体只遍历了第一个结构体,后面的并没有进行操作,虽然有个循环但是并没有什么实质的作用,正确的遍历代码应该是下面的样子。程序代码所在页面Page-73
Keydata=Irp->AssociatedIrp.SystemBuffer;
numKeys=Irp->IoStatus.Information / Sizeof(KEYBOARD_INPUT_DATA);
for ( i=0;i<numKeys;i++,numKeys++)
{
DbgPrint(("numKeys : %d ",numKeys));
DbgPrint(("Scan code : %x ",KeyData->MakeCode));
DbgPrint(("%s\n",KeyData->Flags? "up":"down"));
MyPrintKeyStroke((UCHAR)KeyData->MakeCode);
if (KeyData->MakeCode==CAPS_LOCK)
{
KeyData->MakeCode=LCONTROL;
}
}