i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:2021回复:18

关于Ds生成的程序框架的问题

楼主#
更多 发布于:2002-06-18 15:04
我用DriverStudio2.6生成的程序框架(2000下)(ISA或不控制硬件).我不做任何修改,想要用Monitor载入,起先,出现Starttype=4,在改过了Start=2后,出现0xc0000034错误,是STATUS_OBJECT_NAME_NOT_FOUND .我不知道到底是那里出的问题.在程序里它已经声明了设备类,在adddevice里有把设备名传入.

Help me!Help Me......

最新喜欢:

szztsszzts
llshi
驱动老牛
驱动老牛
  • 注册日期2001-05-05
  • 最后登录2016-01-16
  • 粉丝0
  • 关注0
  • 积分5300分
  • 威望26500点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-18 19:11
首先象安装硬件一样安装驱动,monitor才能加载。


[编辑 -  6/18/02 by  llshi]
llshi
驱动老牛
驱动老牛
  • 注册日期2001-05-05
  • 最后登录2016-01-16
  • 粉丝0
  • 关注0
  • 积分5300分
  • 威望26500点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-18 19:12
首先象安装硬件一样安装驱动,monitor才能加载。
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-19 09:41
在它的资料里有介绍说.在2000下,monitor能够实现自动的加载.但这不是主要问题.我用softice调试发现,驱动在AddDevice时创建设备对象出现错误.具体反馈是
MSR LastExceptionFromIp=F06413A0
MSR LastExceptionToIp=80401AE9
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-19 09:48
根据跟踪发现:程序已经进入了设备的构造器里.在我初始化一个
PUNICODE_STRING后,程序就终止了
程序行如下:
t<<\"here0\\n\";
PUNICODE_STRING ObjectName;
t<<\"here1\\n\";
RtlInitUnicodeString(ObjectName,L\"\\\\Device\\\\ParallelPort0\");
t<<\"here2\\n\";

ice中输出只到here1;就出现错误.
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-06-19 10:59
可定不是因为这。
看起来是对的。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-06-19 11:01
我错了。

你写的有错。
ObjectName是个pointer,你还没有为他分配空间!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-06-19 11:04
试试
UNICODE_STRING ObjectName;
RtlZeroMemory(ObjectName, sizeof(UNICODE_STRING) + sizeof(L\"\\\\...\"));
RtlInitUnicodeString(&ObjectName,L\"\\\\Device\\\\ParallelPort0\");
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-06-24 16:52
那对于一个PDEVICE_OBJECT它的分配内存也同样是用这个函数吗,还是给他分配nonpage pool.这两个有什么区别
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-06-24 17:01
用它RtlZeroMemory(ObjectName, sizeof(UNICODE_STRING) + sizeof(L\"\\\\...\")); 会直接重起,后来我用RtlZeroMemory(ObjectName, sizeof(PUNICODE_STRING));好了.

thanks

arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2002-06-25 08:46
no thanks :D
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-06-25 08:53
但是我用IoGetDeviceObjectPointer时也出同样的错误.我想知道的是:是不是这里的设备对象也要初始化,如果是,我该怎样初始化.
我用同样的Rtlzeromemory不行,想用IoCreateDevice(),可是觉得这样不太合适.又要麻烦了 :P
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2002-06-25 09:10
看样子你要再复习C语言了。
你自己create的pointer,没有赋值就用的话,当然会出问题的。
如:
int *pn;

printf(\"%d\", *pn);   // what\'s *pn?

// should be
int *pn;
int i = 9;
*pn = i;  // or pn = &i;
printf(\"%d\", *pn);  // display is 9

PUNICODE_STRING是指针呀。
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-06-26 08:53
哦,不好意思,我没有说清.现在不是PUNICODE的问题了,而是PDeviceObject的问题,我的程序是如下


PDEVICE_OBJECT   bdo;
PUNICODE_STRING  objn;
NTSTATUS status = STATUS_SUCCESS;

RtlZeroMemory(objn,sizeof(PUNICODE_STRING));
RtlInitUnicodeString(objn,L\"\\\\Device\\\\ParallelPort0\");

status=IoGetDeviceObjectPointer(
objn,
FILE_ALL_ACCESS,
NULL,
&bdo);
if( ! NT_SUCCESS(status))
{
IoDeleteDevice(bdo);
}

RtlFreeUnicodeString(objn);
程序运行到IoGetDeviceObjectPointer时出错,Ice里报page fault.
但是我在ntddk里的parclass里看到他那里并不要对bdo初始化.在我这里它不行,我是这用Rtlzeromemory(bdo,...),可是不行.是不是我要得到底层的设备对象bdo还要IocreateDevice()它,还是该怎么做.

[编辑 -  6/27/02 by  i11usi0n]
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2002-06-26 09:22

// 既然不是指针了,不这样也可以了。
RtlZeroMemory(objn,sizeof(PUNICODE_STRING));
RtlInitUnicodeString(objn,L\"\\\\Device\\\\ParallelPort0\");
// 第一个参数是PUNICODE_STRING呀,你给的是UNICODE_STRING!
status=IoGetDeviceObjectPointer(
objn,   // &objn ?
FILE_ALL_ACCESS,
NULL,
&bdo);
if( ! NT_SUCCESS(status))
{
IoDeleteDevice(bdo);
}

RtlFreeUnicodeString(objn);
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-06-27 16:37
是我在贴子里写错了,在我的程序里是用PUNICODE_STRING.如果不是用它,编译都会通不过的.我不知道还有没有其他的得到并口设备的方法.

我为得到这一步都快要自杀了.....痛苦

真是不好意思.

[编辑 -  6/27/02 by  i11usi0n]
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-06-27 16:54
PUNICODE_STRING ObjectName;
RtlInitUnicodeString(ObjectName,L\"\\\\Device\\\\ParallelPort0\");
指针没有赋值肯定出错。
UNICODE_STRING ObjectName;
RtlInitUnicodeString(&ObjectName,L\"\\\\Device\\\\ParallelPort0\");

PUNICODE_STRING ObjectName;
ObjectName = (PUNICODE_STRING)ExAllocatePool(NonPagedPool,sizeof(UNICODE_STRING));
RtlInitUnicodeString(ObjectName,L\"\\\\Device\\\\ParallelPort0\");



犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-06-27 17:26
PUNICODE_STRING ObjectName;
ObjectName = (PUNICODE_STRING)ExAllocatePool(NonPagedPool,sizeof(UNICODE_STRING));
RtlInitUnicodeString(ObjectName,L\"\\\\Device\\\\ParallelPort0\");
我试过了,情况相同
后来我又给PDEVICE_OBJECT分配非分页内存
bdo=(PDEVICE_OBJCET)ExAllocatePool(NonPagedPool,sizeof(DEVICE_OBJECT));
以为这下万事大吉了.可是在IoGetDeviceObjectPointer的地方还是出错page fault.

天啦,

[编辑 -  6/27/02 by  i11usi0n]
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-06-27 18:26
我已经知道为什么了
原因是我没有定义FileObject而直接给了它NULL
谢谢tigerzd和arthurtu了
游客

返回顶部