阅读:4543回复:29
如何拦截gdi.dll中的api函数StartDocA或StartDocW
这两个函数打印相关。
不要以为这可以在应用层做,----呵呵,我指的是98哦。 那么在内核怎么实现呢? 关于vxd,大家都知道如何截获文件的api操作如删除啦改名啦等等。 但是,打印是不一样的,这里截获的是一个进程的打印api,我也不太懂,还望高手指点啊。 |
|
|
沙发#
发布于:2004-05-26 13:08
怎么没人能回答,是不是给钱太少。
如果能解决,10分+1000块 |
|
|
板凳#
发布于:2004-05-27 09:19
SetWindowsHookEx这种函数不行吗
|
|
|
地板#
发布于:2004-05-27 09:21
参考DDK里的PRINTMON,可以在打印监视器这里进行拦截。。。。。。
|
|
|
地下室#
发布于:2004-05-27 10:37
to SNOWSTART
不行 |
|
|
5楼#
发布于:2004-05-27 16:05
wowocock,我再xpddk中没找到啊。我能够用像在应用层中截取API一样的方法实现内核中api的截取吗?我有完整的应用层截取程序,只是因为在98下,一个进程的线程无法访问另一个进程的内存,才导致我的程序无法正常运行。应用层的过程大致是,首先得到应用被监视进程的线程,然后修改动态连接库gdi32.dll中的StartDocW函数在该线程中映射的内存地址,用自定义的函数代替。这种方法在内核中能照葫芦画瓢吗?
|
|
|
6楼#
发布于:2004-05-29 15:26
在98下一个进程是可以访问其他进程的空间的,所以从理论上来说应该更好做,根本不用远程注入之类了
|
|
7楼#
发布于:2004-05-29 16:59
楼上说的没错,比如:
HMODULE hModule=LoadLibrary(\"gdi.exe\"); FARPROC myStartDoc=GetProcAddress(hModule,\"StartDoc\"); int myStartDoc( HDC hdc, // handle to DC CONST DOCINFO* lpdi // contains file names ) { //add your code } 不知道能不能满足你的要求 [编辑 - 5/29/04 by snowStart] |
|
|
8楼#
发布于:2004-05-29 18:34
to ttzwater:你说得好象有点值得怀疑,呵呵,以下一段话,觉得跟你说的不一致。
In Windows 2000, the memory belonging to the operating system itself is also hidden from the running thread, which means that the thread cannot accidentally access the operating system\'s data. In Windows 98, the memory belonging to the operating system is not hidden from the running thread. Therefore, the running thread could accidentally access the operating system\'s data and corrupt the operating system (potentially causing it to crash). It is not possible in Windows 98 for one process\'s thread to access memory belonging to another process. |
|
|
9楼#
发布于:2004-05-29 18:51
snowstart,你给出的代码很好懂,但是,你将StartDocA的地址给了MyStartDocA了,这就相当于这两个函数都用一个地址,系统调用的时候会选择哪一个呢?是不是应该将StartDocA的地址改一下,不知道你能不能补充一下。
|
|
|
10楼#
发布于:2004-05-29 22:32
我靠,怎么讨论到最后全变味了?
你开始不是说一定要在VXD中做的吗?怎么讨论到最后又变成Win32的API Hook技术? 如果是WIN32 API Hook,非常Easy。具体可以参考《Windows核心编程》附带的源代码。 当然如果你Money足够多,也可以出钱请人帮你写,比如我 :D :o :D |
|
11楼#
发布于:2004-05-30 11:55
是用vxd做啊。并不是所有hook api的工作都能在应用层做的,比如98下hook kernel32.dll 和gdi32.dll中的api.
上面有两位给出了一些回答,我也不知道他们是针对应用层还是针对驱动的。 |
|
|
12楼#
发布于:2004-05-30 12:05
是用vxd做啊。并不是所有hook api的工作都能在应用层做的,比如98下hook kernel32.dll 和gdi32.dll中的api. 引用“.......98下hook kernel32.dll 和gdi32.dll中的api......” 谁说98下不能Hook???到www.csdn.net的VC版去问吧,答案可以把你压扁。:D 这个论坛是不会有人回复这种问题di。 |
|
13楼#
发布于:2004-05-30 12:25
楼上的说话听起来不太爽啊,呵呵。
没关系,想啥说啥吧,下面有一段话,不知道是不是真的 On Windows 98, the main Windows DLLs (Kernel32, AdvAPI32, User32, and GDI32) are protected in such a way that an application cannot overwrite their code pages. You can get around this by writing a virtual device driver (VxD). |
|
|
14楼#
发布于:2004-05-30 12:44
楼上的说话听起来不太爽啊,呵呵。 呵呵,那只能说明你犯了战略性方向错误 :D :D :D 一座山挡在你前面,难道你不懂得绕山而行,非得要炸山不成??? 我再次建议,仔细看看《Wnidows核心编程》,里边有你需要的全部东西。 |
|
15楼#
发布于:2004-05-30 12:59
好的,等我去弄个水落石出
|
|
|
16楼#
发布于:2004-05-31 09:46
看了一下,感觉还是解决不了。
有没有人再说两句啊 给分了。 |
|
|
17楼#
发布于:2004-05-31 10:48
当然可以解决,象pcAnywhere等就使用了相应技术,我也曾经在TOP2000 IP Class中使用了相应技术,在9x下你还需要16位的编译器(如VC++1.5和95 DDK等)。
|
|
|
18楼#
发布于:2004-05-31 12:58
98下HOOK API的方法很多,也很容易.
|
|
|
19楼#
发布于:2004-05-31 16:56
是的Hook一般的API是很多,但要Hook 16位的API,比如:楼主的要求就不一定了那么简单了
|
|
|
上一页
下一页