windows内核编程 第一章步骤

更多精彩内容,请见:http://www.16boke.com


 by zxy,QQ群:168424095

虚拟机软件:

快捷键:右边的Ctrl+F键切换到全屏模式,右边的Ctrl+L键切换到无缝模式,右边的Ctrl+C键切换到比例模式,菜单显示是按右边的Ctrl+Home键,holt键就是右Ctrl键。

(1)安装WDK
(2)建立first目录,写一个first.c文件,写一个名为makefile的文件,和一个名为sources的文件。
first.c
///
///@file first.c
///@author zxy
///@date2011-10-25
///

#include <ntddk.h>

//提供一个Unload函数只是为了让这个程序能动态加载,方便调试
VOID DriverUnload(PDRIVER_OBJECT driver)
{
 //什么都不做,只打印一句话
 DbgPrint("first:Our driver is Unloading...\r\n");
}

//DriverEntry,入口函数。相当于main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING reg_path)
{
#if DBG
 _asm int 3//一句汇编指令,执行到它的时候程序会断下来,等于手工设置了一个断点。
  //但是这样的代码如果不是调试状态执行就会直接蓝屏,所以加上宏DBG测试,
  //保证只有调试版本这条语句才被编译。
#endif
 //内核模块的入口,在这里可以写想写的东西,这里就打印一句话
 DbgPrint("first:Hello!\r\n");

 //设置一个卸载函数,便于这个函数退出
 driver->DriverUnload=DriverUnload;
    return STATUS_SUCCESS;
}
//上面的DriverEntry是每个内核模块的入口,在加载这个模块时被系统进程System调用一次。
//在其中我们设置了DriverUnload的函数指针,这样这个模块可以被动态地卸载(方便调试);
//如果没有设置DriverUnload函数指针,则一个内核模块一旦被加载就不能卸载了。

makefile
!IF 0
Copyright (C) Microsoft Corporation,1999-2002
Module Name:
    makefile.
Notes:
    DO NOT EDIT THIS FILES!!! Edit.\sources.if you want to add a new source file to this component.This file merely indirects     to the real make file that is shared by all the components of Windows NT(DDK)
!ENDIF
!INCLUDE $(NTMAKEENV)\makefile.def

sources
TARGETNAME=first
TARGETTYPE=DRIVER
TARGETPATH=obj
SOURCES=first.c

(3)开始->程序->Windows Driver Kits->WDK的版本(这里"WDK 7600.16385.1")->"Build Enviroments"->"Windows XP"->
出现一个控制台,这个控制台已经配置好编译环境。输入cd命令,进入先前建立的first目录,进入之后,输入build命令。
(4)编译结束后,first.sys出现在\first\objchk_wxp_x86\i386下。这个文件不像普通exe文件双击执行,需要安装一个安装工具进行安装。
(5)如何安装并运行first.sys
双击srvinstw.exe安装服务->下一步->本地计算机->下一步(输入服务名称,随意输入,但不可和已有服务冲突,为了便于记忆可以和文件名相同)->输入sys文件的路径->选择设备驱动->输入".NT驱动器目标名"(不要输入任何内容)->启动类型选择"手动"。
(6)运行和查看输出信息
DebugView.exe可以捕获各种输出,要把Capture Kernel勾上,才能看到内核输出。
(7)开始->程序->附件->命令提示符输入net start first就可以启动first.sys。反之,输入net stop first来停止运行。此时,可以看到DebugView中输出结果。


更多精彩内容,请见:http://www.16boke.com

你可能感兴趣的:(编程,windows,Microsoft,makefile,Components)