bigbian
驱动牛犊
驱动牛犊
  • 注册日期2003-08-23
  • 最后登录2013-01-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望74点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
阅读:1728回复:12

〖求助〗在调试程序的时候老是蓝屏请大家帮忙看看(附部分代码)

楼主#
更多 发布于:2005-01-31 21:58
驱动程序代码是基于DDK的passthru例子的,我修改的部分如下:
#include "prexsim.h"
#pragma hdrstop

//用NDIS_INIT_FUNCTION宏标识DriverEntry函数只运行一次

#pragma NDIS_INIT_FUNCTION(DriverEntry)

NDIS_PHYSICAL_ADDRESS HighestAcceptableMax
= NDIS_PHYSICAL_ADDRESS_CONST(-1, -1);
NDIS_HANDLE ProtHandle = NULL;
NDIS_HANDLE DriverHandle = NULL;
NDIS_MEDIUM MediumArray[3] =
{
NdisMedium802_3, // Ethernet
NdisMedium802_5, // Token-ring
NdisMediumFddi // Fddi
};
PADAPT pAdaptList = NULL;
NDIS_HANDLE WrapperHandle = NULL;


//主程序入口
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
NDIS_STATUS Status;
PNDIS_CONFIGURATION_PARAMETER Param;
UNICODE_STRING ntDeviceName;

DBGPRINT("==> DriverEntry...n");


//自己加的代码
RtlInitUnicodeString(&ntDeviceName,NT_DEVICE_NAME);

Status = IoCreateDevice (
DriverObject,
0,
&ntDeviceName,
FILE_DEVICE_UNKNOWN,
0,
TRUE,
&pDeviceObject
);

if (!NT_SUCCESS (Status))
{
if( pDeviceObject )
IoDeleteDevice( pDeviceObject );
return Status;
}


RtlInitUnicodeString ( &win32DeviceName, DOS_DEVICE_NAME );

Status = IoCreateSymbolicLink ( &win32DeviceName, &ntDeviceName );

if ( !NT_SUCCESS ( Status ) )
{
if( pDeviceObject )
IoDeleteDevice( pDeviceObject );
return Status;
}

DriverObject->MajorFunction[IRP_MJ_CREATE] = DispCreate;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispDeviceControl;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispClose;
    DriverObject->MajorFunction[IRP_MJ_CLEANUP] = DispCleanUp;
DriverObject->DriverUnload = DriverUnload;


//自己的代码结束
    NdisMInitializeWrapper(&WrapperHandle, DriverObject, RegistryPath, NULL);

Status = MPRegisterAsMiniport(DriverObject, RegistryPath);

ASSERT(Status == NDIS_STATUS_SUCCESS);

NdisMRegisterUnloadHandler(WrapperHandle, PtUnload);

Status = PtRegisterAsProtocol(DriverObject, RegistryPath);

ASSERT(Status == NDIS_STATUS_SUCCESS);

NdisIMAssociateMiniport(DriverHandle, ProtHandle);

DBGPRINT("<== NdisIMAssociateMiniport.n");

return(Status);
}

VOID
DriverUnload( IN PDRIVER_OBJECT DriverObject )
{
           IoDeleteSymbolicLink(&win32DeviceName);
IoDeleteDevice(pDeviceObject);
}

NTSTATUS
DispCreate
( IN PDEVICE_OBJECT DeviceObject,
  IN PIRP Irp)

{
Irp->IoStatus.Status = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;
    IoCompleteRequest( Irp, IO_NO_INCREMENT );
    return STATUS_SUCCESS;
}

NTSTATUS
DispDeviceControl
( IN PDEVICE_OBJECT DeviceObject,
  IN PIRP Irp)

{
PIO_STACK_LOCATION irpsp;
NTSTATUS status;
int i;

irpsp = IoGetCurrentIrpStackLocation( Irp );
switch ( irpsp->Parameters.DeviceIoControl.IoControlCode )
   {
   case IOCTL_GET_MY_DRIVER :
  {
  Irp->IoStatus.Information = 0;
  Irp->IoStatus.Status = STATUS_SUCCESS;
  status = Irp->IoStatus.Status;
  break;
  }
case IOCTL_GET_MY_PAKETINF :
  Irp->IoStatus.Information = 0;
  Irp->IoStatus.Status = STATUS_SUCCESS;
  status = Irp->IoStatus.Status;
  break;
default:
  {
  DbgPrint("进入default...");
      status = STATUS_SUCCESS;
         break;
  }
    }

IoCompleteRequest( Irp, IO_NO_INCREMENT );
return status;
}

NTSTATUS
DispClose
( IN PDEVICE_OBJECT DeviceObject,
  IN PIRP Irp)

{
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}

NTSTATUS
DispCleanUp
( IN PDEVICE_OBJECT DeviceObject,
  IN PIRP Irp)

{
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}

//win32调试程序,目的是连接驱动,为和驱动通信作准备
HANDLE h;
h = CreateFile(\\\\.\\xpassthru",
                          GENERIC_READ | GENERIC_WRITE,
                          0,
                          NULL,
                          OPEN_EXISTING,
                          FILE_ATTRIBUTE_NORMAL,
                          NULL
                          );
if (h == INVALID_HANDLE_VALUE )
{
MessageBox("Drvier Error");
CloseHandle(h);
}
else
{
MessageBox("Opened Driver");
CloseHandle(h);
}

    驱动和win32调试程序在编译时没有错误。驱动程序编译安装后也正常截获包。但是运行win32调试程序后蓝屏。提示:内核模式程序出现一个没法处理的异常。大家帮忙看看哪里错了。
做人要厚道
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-02 09:29
没有处理完善,处理的太简单了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
bigbian
驱动牛犊
驱动牛犊
  • 注册日期2003-08-23
  • 最后登录2013-01-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望74点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-04 00:11
我是个新手,能进一步指点一下么?
做人要厚道
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-04 15:33
我是个新手,能进一步指点一下么?

看看我给你发的mail中的提示
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-02-05 10:00
关注。。。
Ideas for life!
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-02-05 13:43
我是个新手,能进一步指点一下么?

问题解决了吗?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
bigbian
驱动牛犊
驱动牛犊
  • 注册日期2003-08-23
  • 最后登录2013-01-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望74点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-02-09 15:06
555,你给我发的邮件被当作“可疑”邮件,被163干掉了,能再发一次么。小弟多谢了。
做人要厚道
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-02-11 22:33
555,你给我发的邮件被当作“可疑”邮件,被163干掉了,能再发一次么。小弟多谢了。

mail又发了一下,你看看先
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
bigbian
驱动牛犊
驱动牛犊
  • 注册日期2003-08-23
  • 最后登录2013-01-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望74点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-02-12 09:39
多谢你。邮件已经收到了,我研究一下。
做人要厚道
bigbian
驱动牛犊
驱动牛犊
  • 注册日期2003-08-23
  • 最后登录2013-01-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望74点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-02-16 21:54
问题解决了,不过用的是另一种办法。
做人要厚道
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-02-16 22:17
问题解决了,不过用的是另一种办法。

恭喜
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-02-18 09:17
怎么解决的?能说说吗?
Ideas for life!
bigbian
驱动牛犊
驱动牛犊
  • 注册日期2003-08-23
  • 最后登录2013-01-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望74点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-02-18 19:34
在allenzh指出错误后,我参考了论坛里以前关于ndis im 的帖子,做了修改。你搜索一下以前的帖子有很多正确地代码。
做人要厚道
游客

返回顶部