阅读:2296回复:16
请问如何在Ndis驱动中起内核线程啊?
我是用Driver Studio 写的,但,用KSystemThread时,头文件总是不正确,请问如何解决?
|
|
论坛版主
|
沙发#
发布于:2003-12-22 16:04
PsCreateSystemThread,不能用?
|
|
板凳#
发布于:2003-12-22 16:44
也是头文件问题
不知道怎么搞的 好像ds把ddk里的好多东西都重新定义了, 一旦包含了ntddk.h就会大量重复定义 |
|
地板#
发布于:2003-12-22 17:00
不要直接 #include <ntddk.h> 或 <wdm.h>, 试试在你自己的头文件里 #include<ndis.h> 之前加一句:
#define NDIS_WDM 看看行不行 |
|
|
地下室#
发布于:2003-12-22 17:25
好像不行
我自己声明此外部函数, 编译不过 郁闷 |
|
5楼#
发布于:2003-12-22 20:06
不行吗?奇怪了。
DS生成Source文件吗?如果生成,你给里面加一句: C_DEFINES=$(C_DEFINES) -DNDIS_WDM 并且不要在你的代码的任何地方include ntddk.h和wdm.h,如果这 样都不行的话,我就不知道了。:-( 或者把你的出错信息帖上来看看。 [编辑 - 12/22/03 by cool-net] |
|
|
6楼#
发布于:2003-12-22 20:31
我是用Driver Studio 写的,但,用KSystemThread时,头文件总是不正确,请问如何解决? 参考DS\\EXAMPLES下的threads例子。 |
|
|
论坛版主
|
7楼#
发布于:2003-12-23 00:28
我想起来了,我遇到过,直接包含NTDDK.H就是不行,他说重定义什么的,记不清了,我用的是
NTSTATUS ZwOpenSymbolicLinkObject( OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes ); NTSTATUS ZwQuerySymbolicLinkObject( IN HANDLE LinkHandle, IN OUT PUNICODE_STRING LinkTarget, OUT PULONG ReturnedLength OPTIONAL ); 本来NTDDK.H里面有声明,但是DEFINE NDIS_WDM 1后就是认不到,没办法我在我的头文件里面自己声明了一下就好了,不知道为何,哪个兄弟知道的? |
|
8楼#
发布于:2003-12-23 01:03
我想起来了,我遇到过,直接包含NTDDK.H就是不行,他说重定义什么的,记不清了,我用的是 NDIS_WDM会包含<wdm.h>,但不会包含<ntddk.h>,而你说的那个Native API正好是在ntddk.h里有定义而wdm.h是没有,这样的API还有好多个(尤其是ZwXXX,真是见鬼),在使用时最好注意看看DDK文档里的说明。 ZwOpenSymbolicLinkObject . . . Headers Declared in ntddk.h. Include ntddk.h. . . . PsCreateSystemThread . . . Headers Declared in wdm.h and ntddk.h. Include wdm.h or ntddk.h. . . . |
|
|
9楼#
发布于:2003-12-23 08:47
我想起来了,我遇到过,直接包含NTDDK.H就是不行,他说重定义什么的,记不清了,我用的是 空说大家都不知道怎么回事,把你的CPP文件包含头文件部分贴出来好不好。 |
|
10楼#
发布于:2003-12-23 09:00
郁闷,我现在就是要起一个线程(Ndis程序)。
用KSystemThread或者PsCreateSystemThread都行 可就是头文件包含问题解决不了 一旦包含了ntddk或者vdw.h就出现大量的重复定义 真不知道如何处理 请各位帮帮忙 谢谢 |
|
11楼#
发布于:2003-12-23 10:07
ntddk.h不知道是否有什么lib可以连接啊?
我把我要用到的相关定义全部扣出来了 就差一个lib |
|
12楼#
发布于:2003-12-23 10:59
>> 郁闷,我现在就是要起一个线程(Ndis程序)。
>> 用KSystemThread或者PsCreateSystemThread都行 >> 可就是头文件包含问题解决不了 KSystemThread就别想了,除非你改DS的头文件,否则没戏. >> 一旦包含了ntddk或者vdw.h就出现大量的重复定义 >> 真不知道如何处理 当然,DDK里所有类型的miniport(SCSI,NDIS...)都有这毛病,你 不会不知道吧? NDIS好一点儿,可以通过定义NDIS_WDM来解决一部份,千万不要 想直接包含ntddk或wdm,那样肯定会有重定义(vdw出问题的原因 应该也是由于它包含了ntddk或wdm). >> ntddk.h不知道是否有什么lib可以连接啊? >> 我把我要用到的相关定义全部扣出来了 >> 就差一个lib ntoskrnl.lib,就是它. PS:原因很简单,MS不想让你在miniport里使用Native API(要不怎 么能叫\"MINIPORT\"呢?),所以MS在每个miniport的header里把所有 的基础数据类型和结构之类的又定义了一遍(如UCHAR, ULONG之类 的东东)以迷补不能包含ntddk和wdm的不足,两个都include不出重 复定义错才怪. |
|
|
13楼#
发布于:2003-12-23 13:11
终于让我弄好了
重新定义了一下 extern \"C\" __declspec(dllimport) NTSTATUS PsCreateSystemThread( OUT PHANDLE ThreadHandle, IN ULONG DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ProcessHandle OPTIONAL, OUT PCLIENT_ID ClientId OPTIONAL, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext ); |
|
论坛版主
|
14楼#
发布于:2003-12-23 22:07
对阿,那我不包含头文件,就简单自己定义一下它怎么知道连接的时候怎么找啊,我也没搞懂:)
|
|
论坛版主
|
15楼#
发布于:2003-12-23 22:16
对了,那个DEFINE NDIS_WDM 1不是把NTDDK.H 和 WDM.H包含进来?
|
|
16楼#
发布于:2003-12-24 08:35
应该是dll接口的基本方法吧
lib由编译器自己找 呵呵 :D |
|