阅读:2021回复:18
关于Ds生成的程序框架的问题
我用DriverStudio2.6生成的程序框架(2000下)(ISA或不控制硬件).我不做任何修改,想要用Monitor载入,起先,出现Starttype=4,在改过了Start=2后,出现0xc0000034错误,是STATUS_OBJECT_NAME_NOT_FOUND .我不知道到底是那里出的问题.在程序里它已经声明了设备类,在adddevice里有把设备名传入.
Help me!Help Me...... |
|
最新喜欢:szzts |
沙发#
发布于:2002-06-18 19:11
首先象安装硬件一样安装驱动,monitor才能加载。
[编辑 - 6/18/02 by llshi] |
|
板凳#
发布于:2002-06-18 19:12
首先象安装硬件一样安装驱动,monitor才能加载。
|
|
地板#
发布于:2002-06-19 09:41
在它的资料里有介绍说.在2000下,monitor能够实现自动的加载.但这不是主要问题.我用softice调试发现,驱动在AddDevice时创建设备对象出现错误.具体反馈是
MSR LastExceptionFromIp=F06413A0 MSR LastExceptionToIp=80401AE9 |
|
地下室#
发布于: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;就出现错误. |
|
5楼#
发布于:2002-06-19 10:59
可定不是因为这。
看起来是对的。 |
|
6楼#
发布于:2002-06-19 11:01
我错了。
你写的有错。 ObjectName是个pointer,你还没有为他分配空间! |
|
7楼#
发布于:2002-06-19 11:04
试试
UNICODE_STRING ObjectName; RtlZeroMemory(ObjectName, sizeof(UNICODE_STRING) + sizeof(L\"\\\\...\")); RtlInitUnicodeString(&ObjectName,L\"\\\\Device\\\\ParallelPort0\"); |
|
8楼#
发布于:2002-06-24 16:52
那对于一个PDEVICE_OBJECT它的分配内存也同样是用这个函数吗,还是给他分配nonpage pool.这两个有什么区别
|
|
9楼#
发布于:2002-06-24 17:01
用它RtlZeroMemory(ObjectName, sizeof(UNICODE_STRING) + sizeof(L\"\\\\...\")); 会直接重起,后来我用RtlZeroMemory(ObjectName, sizeof(PUNICODE_STRING));好了.
thanks |
|
10楼#
发布于:2002-06-25 08:46
no thanks :D
|
|
11楼#
发布于:2002-06-25 08:53
但是我用IoGetDeviceObjectPointer时也出同样的错误.我想知道的是:是不是这里的设备对象也要初始化,如果是,我该怎样初始化.
我用同样的Rtlzeromemory不行,想用IoCreateDevice(),可是觉得这样不太合适.又要麻烦了 :P |
|
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是指针呀。 |
|
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] |
|
14楼#
发布于:2002-06-26 09:22
|
|
15楼#
发布于:2002-06-27 16:37
是我在贴子里写错了,在我的程序里是用PUNICODE_STRING.如果不是用它,编译都会通不过的.我不知道还有没有其他的得到并口设备的方法.
我为得到这一步都快要自杀了.....痛苦 真是不好意思. [编辑 - 6/27/02 by i11usi0n] |
|
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\"); |
|
|
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] |
|
18楼#
发布于:2002-06-27 18:26
我已经知道为什么了
原因是我没有定义FileObject而直接给了它NULL 谢谢tigerzd和arthurtu了 |
|