硬编码是啥?
好像更难吧 回复 33# ok100fen
比如说sizeof(ULONG)在XP系统上结果是4 在驱动中就不用写sizeof(ULONG)而是4 看了好几遍你的那个驱动模板了
不明白什么意思
再举一个比较生动的例子吧
有点实用价值的
谢谢
我这个 ...
ok100fen 发表于 2010-1-24 00:07 http://www.m5home.com/bbs/images/common/back.gif
好吧,写给你。 谢谢斑竹
你太好了 本帖最后由 HoviDelphic 于 2010-1-25 01:50 编辑
回复 36# ok100fen
ok大哥,我写了一会,真的写不出来,因为那个驱动模板里面“restore kernel function by name”其实就是VB向驱动里传递字符串的例子,“Get EPROCESS By Process ID”就是VB向驱动里传递数字以及驱动向VB传递数字的例子。
你若真的还不明白我就真的没办法了,xiaoly99网友在解释上比我清楚,你去问他吧,我给你加点分当作精神损失费吧。:L 这么理解对不对
驱动相当于一个程序,这个程序不使用vb写的,可能是用c写的,比如像*.sys这样的。能够隐藏进程或者是键盘记录这样的比较底层的小程序。
而用vb调用这样的驱动,其实vb起到一个调用的作用
也就是说vb写不了*.sys这样的程序
不知道我这样理解对不对~~ 对 驱动是Native Exe vb也能写 都是pe文件 但是vb写不出什么有用的 对 驱动是Native Exe
xiaoly99 发表于 2010-1-25 12:13 http://www.m5home.com/bbs/images/common/back.gif
Native Exe,这是什么意思? 原生exe 跟原生Api一样 不能在Ring3调用/操作 需要通过sysenter 晕几天不来 出了这么多!!!!!:L 回复 19# ok100fen
所谓驱动,其实我觉得Windows的“驱动”的叫法不太准确,容易让人混淆,我觉得Linux里的内核模块或者内核程序的叫法更准确些,
驱动就是在内核里运行的程序
什么是内核:操作系统本身就叫内核,比如hal.dll,ntoskernel.exe(这两个实际上是两个动态链接库,也就是标准DLL)这几个是整个windows的核心部分,Windows里成千上万的程序都是靠它在运行,我们看到的桌面等等所有可见不可见的东西,最终都是直接或间接调用的这两个文件里的函数,驱动是直接调用这两个文件里的函数的,普通的程序,不能直接调用这两个文件里的函数。普通程序通常会调用user32.dll这种类型的DLL里的函数,比如VB里:
Declare Sub MessageBox Alias "MessageBoxA" lib user32(byval hwnd as long,byval pcstr as long,byval pcstr as long,byval Flags as long )
这个就是VB里msgbox最终实现时调用的函数,这个MessageBoxA是位于user32.dll这个文件里的,而MessageBoxA最终又通过某种方式,调用了ntoskernel.exe这个文件里的N个函数 比如CreateFile这个函数位于kernel32.dll这个文件里,事实上,这个程序会最终调用内核函数zwCreateFile,但在内核程序里(驱动),我们可以直接使用zwCreateFile(不过这个函数事实上也不是最终调用,最终zwCreateFile被内核里的IO管理器转变成了IRP发到了相应设备上) 所谓驱动通信,就是让VB有一种途径可以把自己的数据传给驱动程序处理,还可以通过这种途径获得驱动提供的数据 回复ok100fen
所谓驱动,其实我觉得Windows的“驱动”的叫法不太准确,容易让人混淆,我觉得L ...
364589886 发表于 2010-1-27 17:26 http://www.m5home.com/bbs/images/common/back.gif
msgbox貌似和ntoskrnl.exe无关,和win32k.sys有关。 回复 47# HoviDelphic
你说的这个在以前,MS是放在用户态的,后来为了提高效率(因为这个文件是关于GDI等操作的,用户能直接感觉到),所以才转移到了内核(不过这种做法违背了windows微内核的架构原则),但最终还是通过调用ntoskernel.exe和hal.dll这两个文件里的函数来实现的,只不过从内核进行调用而已。
另外,几乎所有(除非自己完全二进制实现)的windows函数,最终都是由ntoskernel.exe和hal.dll这两个文件实现的。所以实质上所谓的windows系统,也就只有这两个文件。。。。不过这种说法不是太精确 ls解释得非常通俗易懂
喜欢这样的教程
希望版主继续
看来这个论坛虽然人不多,但是高手很多 看完就顶,好的习惯! 回复HoviDelphic
有段时间琢磨了好久给驱动传构造类型,弄了半天,都没成功,最后还是一个个传好……
TengAttack 发表于 2010-1-21 23:22 http://www.m5home.com/bbs/images/common/back.gif
所谓的构造类型就是自定义类型吧?很好传递的:
VB:
Private Type RsData
TarAddr As Long
RsLength As Long
OriDat(259) As Byte
End Type
Dim xx As RsData '自定义类型
With DrvController
.IoControl .CTL_CODE_GEN(&H1), VarPtr(xx), Len(xx), 0, 0 '函数名称
End With
Driver:
typedef struct _Unhook {
ULONG TarAddr; //目标地址
ULONG Length; //需要覆盖的长度
BYTE OrigiData;//原始数据
} UNHOOK, *PUNHOOK;
switch(uIoControlCode)
{
case IOCTL_UnHook:
{
UNHOOK UnHook={0};
memcpy(&UnHook,InputBuffer,sizeof(UNHOOK));
MemOpen();
memcpy((PVOID)UnHook.TarAddr,UnHook.OrigiData,UnHook.Length);
MemClose();
ntStatus = STATUS_SUCCESS;
break;
}
}
回复 49# ok100fen
建议去FreeBasic板块看下相关文章,我打算用BASIC讲驱动了。。。当然不是VB,VB没法写驱动,FB基本可以做C能做的所有事 回复 51# HoviDelphic
呵呵,MemOpen();,这个以前都没见过…… 我刚开始学驱动开发,模板能不能给一个,要不学起来太费劲了 很好很强大 重新看了一遍
觉得好多了 重新看了一遍
觉得好多了 好东西。。受益匪浅。。 先回了再看
页:
1
[2]