fumo2003
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2296回复:16

请问如何在Ndis驱动中起内核线程啊?

楼主#
更多 发布于:2003-12-22 15:23
 我是用Driver Studio 写的,但,用KSystemThread时,头文件总是不正确,请问如何解决?
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-22 16:04
PsCreateSystemThread,不能用?
根据地的兄弟们,团结就是力量
fumo2003
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-22 16:44
也是头文件问题
不知道怎么搞的

好像ds把ddk里的好多东西都重新定义了,
一旦包含了ntddk.h就会大量重复定义
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-22 17:00
不要直接 #include <ntddk.h> 或 <wdm.h>, 试试在你自己的头文件里 #include<ndis.h> 之前加一句:

#define NDIS_WDM
看看行不行
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
fumo2003
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-22 17:25
好像不行

我自己声明此外部函数,
编译不过
郁闷

cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
LitteSW
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-22 20:31
我是用Driver Studio 写的,但,用KSystemThread时,头文件总是不正确,请问如何解决?


参考DS\\EXAMPLES下的threads例子。
穿梭于都市高楼之间,总是孜孜不倦地追寻着自由,蓦然回首,去发现已陷入深深的枷锁之中
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
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后就是认不到,没办法我在我的头文件里面自己声明了一下就好了,不知道为何,哪个兄弟知道的?
根据地的兄弟们,团结就是力量
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-23 01:03
我想起来了,我遇到过,直接包含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后就是认不到,没办法我在我的头文件里面自己声明了一下就好了,不知道为何,哪个兄弟知道的?


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.
.
.
.
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
lonelyeagle
驱动牛犊
驱动牛犊
  • 注册日期2003-10-29
  • 最后登录2006-04-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-12-23 08:47
我想起来了,我遇到过,直接包含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后就是认不到,没办法我在我的头文件里面自己声明了一下就好了,不知道为何,哪个兄弟知道的?

空说大家都不知道怎么回事,把你的CPP文件包含头文件部分贴出来好不好。
fumo2003
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-23 09:00
郁闷,我现在就是要起一个线程(Ndis程序)。
用KSystemThread或者PsCreateSystemThread都行
可就是头文件包含问题解决不了

一旦包含了ntddk或者vdw.h就出现大量的重复定义
真不知道如何处理

请各位帮帮忙
谢谢
fumo2003
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-12-23 10:07
ntddk.h不知道是否有什么lib可以连接啊?
我把我要用到的相关定义全部扣出来了
就差一个lib
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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不出重
复定义错才怪.
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
fumo2003
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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
    );
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-12-23 22:07
对阿,那我不包含头文件,就简单自己定义一下它怎么知道连接的时候怎么找啊,我也没搞懂:)
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-12-23 22:16
对了,那个DEFINE NDIS_WDM 1不是把NTDDK.H 和 WDM.H包含进来?
根据地的兄弟们,团结就是力量
fumo2003
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-12-24 08:35
 应该是dll接口的基本方法吧
 lib由编译器自己找
 呵呵 :D
游客

返回顶部