您的位置:首页 > 编程语言

一个刚接触几天驱动编程菜鸟对驱动的理解.

2008-11-20 23:16 344 查看
    为了需要.这一星期以来天天啃驱动代码.看大概原理.把人累得不行了.说一下子对驱动编程一点点的理解.其实似乎对它有个大概的认识了.首先,我们都知道win32程序都要调用一些API.win32程序一般都是调用user32.dll...等等一些dll里的函数的.就打个比方要调用CreateFile这个函数来创建一个文件.看看win32程序的创建这个文件的工作流程.win32->kernel32.dll->ntdll.dll->ntkrnlpa.exe 就差不多把这个创建文件的工作完成了.win32程序调用的CreateFile接口放在kernel32.dll里面.然而kernel32.dll接到这个创建文件的指令之后它也没有去实施.而是继续转发给ntdll.dll这个ntdll.dll就是"城里城外看SSDT"里说的城门.以前傻傻的有些不太理解.当ntdll.dll接到指令之后就调用NtCreateFile了.但是他还是没有去直接执行创建文件的任务.而是进了ring0的门了而已.剩下的操作就是给ntkrnlpa.exe里去执行了.ntkrnlpa.exe是一个内核程序.它接收到NtCreateFile的指令之后就去查找相应的服务号(这个服务号到底是什么我也不知道,希望有人知道可以跟我说下好吗?)完成操作.这就是win32程序创建一个文件的大概流程.    对于驱动也就没那么麻烦了.而是一步就到ntdll.dll的门口了.接着就直接进到ntkrnlpa.exe操作内核了.杀软HOOK的了就是Nt系列的函数完成它们所谓的主动防御.直接进入内核了就天下第一了.但是关键点就是杀软把你扼杀在摇篮里面.你还没成为英雄.刚出生时就把你Kill掉了.很郁闷.其他的不说了.用win32的眼光看看驱动吧...
   首先声明一个函数原形.这个函数是NTDDK.h里面的.我们现在win32下.不是驱动.typedef unsigned long NTSTATUS;  //NTSTATUS 的定义.在win32下可以理解成void或者int之类的吧

typedef NTSTATUS (__stdcall *pZwCreateFile)(        //ZwCreateFile跟NtCreateFile是一样.哪个更底层我觉得应该是NtCreateFile.但是我们在ntdll.dll中调用就不管了.在这个文件里面他们俩的地址是一样的.    OUT PHANDLE  FileHandle,    IN ACCESS_MASK  DesiredAccess,    IN POBJECT_ATTRIBUTES  ObjectAttributes,    OUT PIO_STATUS_BLOCK  IoStatusBlock,    IN PLARGE_INTEGER  AllocationSize  OPTIONAL,    IN ULONG  FileAttributes,    IN ULONG  ShareAccess,    IN ULONG  CreateDisposition,    IN ULONG  CreateOptions,    IN PVOID  EaBuffer  OPTIONAL,    IN ULONG  EaLength);

HINSTANCE hNtDll = LoadLibrary ("NTDLL");  //加载ntdll.dll if (!hNtDll)    return 0;pZwCreateFile  ZwCreateFile = (ZWCREATEFILE)GetProcAddress ("NTDLL","ZwCreateFile");  //获取NtCreateFile地址   有了函数原形有了函数地下跟用普通win32程序也就没什么区别了...其实要想在win32下在直接调用稍微底层的一些函数还有好多东西要定义.比如像UNICODE_STRING 的原型.等等之类的..但是要想在win32下感觉感觉这些函数也是没办法的事.至少对有些免杀比较有效果.像驱动程序中的派遣例程之内的我感觉有些像windows中的消息机制一样...呵呵..还在学习当中.自己blog东西太少了.写着自己玩玩.希望不会误人子弟.   看了驱动之后...感觉微软有毛病.把什么都包装起来.还得一层层的转下去.保护得也太厉害了.有句话说得真没错.没有微软硬件也不会发展得如此之快.微软让一台5000RMB的电脑变成了只值2000RMB.而Linux让2000RMB的电脑变成了5000RMB的东西..呵呵...的确有些像.而且还很像...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: