fuq_dddd
驱动老牛
驱动老牛
  • 注册日期2002-10-15
  • 最后登录2009-10-09
  • 粉丝0
  • 关注0
  • 积分331分
  • 威望57点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
阅读:2825回复:6

NdisMRegisterDevice 驱动与应用的通信流程问题

楼主#
更多 发布于:2002-11-06 11:07
各位大侠:

在前面的帖子里看到在PASSTHRU里不能用IOCREATEDEVICE来建立设备,
而且查DDK帮助文档也是这么说的。
所以我用NdisMRegisterDevice建立设备,但发现在应用中无法它,

我的调用方法如下:
Status = NdisMRegisterDevice(
WrapperHandle,  //
&win32DeviceName,//\"\\\\Device\\\\Packet\"
&ntDeviceName, //\"\\\\DosDevices\\\\Packet\"
DriverObject->MajorFunction,
&deviceObject,
&NdisDeviceHandle
);
    DriverObject->MajorFunction[IRP_MJ_CREATE] = PacketOpen;
    DriverObject->MajorFunction[IRP_MJ_CLOSE]  = PacketClose;
    DriverObject->MajorFunction[IRP_MJ_READ]   = PacketRead;
    DriverObject->MajorFunction[IRP_MJ_WRITE]  = PacketWrite;
    DriverObject->MajorFunction[IRP_MJ_CLEANUP]  = PacketCleanup;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]  = PacketIoControl;
    DriverObject->DriverUnload = NULL;   //

打开设备用的方法如下:
hFile=CreateFile(TEXT(\"\\\\\\\\.\\\\Packet\"), /// Open device
                GENERIC_WRITE | GENERIC_READ,
                0,
                NULL,
                OPEN_EXISTING,
                FILE_FLAG_OVERLAPPED,
                0
                );

这是为什么?请高手们解救

最新喜欢:

txysptxysp
星星之火 可以燎原 每一个光亮 都可能是黎明 [img]http://joke.tom.com/img/assets/1/gaoxiao_80_910.gif[/img]
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
沙发#
发布于:2002-11-06 13:23
CreateFile 出错码是多少?
用SoftICE跟踪一下你的PacketOpen是否返回了成功?
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-06 16:00
各位大侠:

在前面的帖子里看到在PASSTHRU里不能用IOCREATEDEVICE来建立设备,
而且查DDK帮助文档也是这么说的。
所以我用NdisMRegisterDevice建立设备,但发现在应用中无法它,

我的调用方法如下:
Status = NdisMRegisterDevice(
WrapperHandle,  //
&win32DeviceName,//\"\\\\Device\\\\Packet\"
&ntDeviceName, //\"\\\\DosDevices\\\\Packet\"
DriverObject->MajorFunction,
&deviceObject,
&NdisDeviceHandle
);
    DriverObject->MajorFunction[IRP_MJ_CREATE] = PacketOpen;
    DriverObject->MajorFunction[IRP_MJ_CLOSE]  = PacketClose;
    DriverObject->MajorFunction[IRP_MJ_READ]   = PacketRead;
    DriverObject->MajorFunction[IRP_MJ_WRITE]  = PacketWrite;
    DriverObject->MajorFunction[IRP_MJ_CLEANUP]  = PacketCleanup;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]  = PacketIoControl;
    DriverObject->DriverUnload = NULL;   //

打开设备用的方法如下:
hFile=CreateFile(TEXT(\"\\\\\\\\.\\\\Packet\"), /// Open device
                GENERIC_WRITE | GENERIC_READ,
                0,
                NULL,
                OPEN_EXISTING,
                FILE_FLAG_OVERLAPPED,
                0
                );

这是为什么?请高手们解救
 

MINIPORT Driver
DriverObject 里的MajorFunc表是不能改的。
我思故我在,脑袋不会坏.
fuq_dddd
驱动老牛
驱动老牛
  • 注册日期2002-10-15
  • 最后登录2009-10-09
  • 粉丝0
  • 关注0
  • 积分331分
  • 威望57点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-07 15:45
 
MINIPORT Driver
DriverObject 里的MajorFunc表是不能改的。

如果是这样,那么NdisMRegisterDevice中的第四个参数放什么?
我曾经自己建立了一个MajorFunc数组,来存放dispatch函数,
结果是一样的,?

 
CreateFile 出错码是多少?
用SoftICE跟踪一下你的PacketOpen是否返回了成功?
 

CreateFile 出错码是:hFile=0xFFFFFFFF,GetLastError = 2,
帮助分析一下,
另外,在2000下我安装的SoftICE不是很好用,能给我推荐一个好的版本吗?
星星之火 可以燎原 每一个光亮 都可能是黎明 [img]http://joke.tom.com/img/assets/1/gaoxiao_80_910.gif[/img]
fuq_dddd
驱动老牛
驱动老牛
  • 注册日期2002-10-15
  • 最后登录2009-10-09
  • 粉丝0
  • 关注0
  • 积分331分
  • 威望57点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-08 09:47
两位斑竹,救命啊!

是否有这方面的简单代码示例,参考以下也好!

郁闷!!!!迷茫!!!!!!
星星之火 可以燎原 每一个光亮 都可能是黎明 [img]http://joke.tom.com/img/assets/1/gaoxiao_80_910.gif[/img]
fuq_dddd
驱动老牛
驱动老牛
  • 注册日期2002-10-15
  • 最后登录2009-10-09
  • 粉丝0
  • 关注0
  • 积分331分
  • 威望57点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-08 12:30

现在我发现是NdisMRegisterDevice这个函数没有成功执行,

现在有一个问题希望得到大侠的指点,

DriverEntry中传入的DriverObject已经和NDIS驱动连接起来了,
新建的虚拟设备与哪个DriverObject连接呐?
如果是同一个的话,就存在gjpland斑竹所说的问题MajorFunction会乱掉,
在这里,我不是很清楚,请高人指点

谢谢!!!
星星之火 可以燎原 每一个光亮 都可能是黎明 [img]http://joke.tom.com/img/assets/1/gaoxiao_80_910.gif[/img]
kaput
驱动中牛
驱动中牛
  • 注册日期2002-06-26
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-08 13:50
你的MajorFunction表应该在NdisMRegisterDevice()调用之前建立。

你可以参照xppassthru:
MajorFunc表用PtDispatch()代替了,xppassthru在PtDispatch()处理来自应用层命令。
可以修改原始的xppassthru,在IRP_MJ_CREATE加入调试语句,察看应用层CreateFile()的响应。




[编辑 -  11/8/02 by  kaput]
天下风云出我辈 一入江湖岁月催 鸿图霸业谈笑中 不胜人生一场醉......
游客

返回顶部