VS2008 、WDK 和DDKWizard搭建Win 7驱动开发环境

一、安装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变量中
否则编译时会出现找不到命令的错误

Continue Reading

IP归属地查询器

在线查询数据,数据来源123cha.com。需要联网使用,不是查询的纯真的数据。猛击此处下载。 laugh

部分代码:

procedure TForm1.Button1Click(Sender: TObject);
var
   xml : OleVariant;
   r:string;
   p1,p2 : Integer;
   I:Integer;
begin
   xml := CreateOleObject('Microsoft.XMLHTTP');
   xml.Open('GET','http://www.123cha.com/ip/?q='+edt1.Text, False);
   xml.Send;
   r := xml.responseText;
   p1:=Pos('数据',r);
   p2:=Pos('
  • [查询提供]',r); mmo1.lines.add(' 您查询的地址可能归属地是:') ; mmo1.lines.add(' ===========================') ; mmo1.Lines.add (Copy(r, p1+16, p2-p1-5)); mmo1.Text:=StringReplace(mmo1.Text,' ','',[rfReplaceAll]); mmo1.Text:=StringReplace(mmo1.Text,'
  • ','',[rfReplaceAll]); mmo1.Text:=StringReplace(mmo1.Text,'
  • ','',[rfReplaceAll]); mmo1.Text:=StringReplace(mmo1.Text,'','',[rfReplaceAll]); mmo1.Text:=StringReplace(mmo1.Text,'','',[rfReplaceAll]); end;

    键盘过滤驱动勘误《寒江独钓》

    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 smile

    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;
        }
    }