阅读:1728回复:12
〖求助〗在调试程序的时候老是蓝屏请大家帮忙看看(附部分代码)
驱动程序代码是基于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调试程序后蓝屏。提示:内核模式程序出现一个没法处理的异常。大家帮忙看看哪里错了。 |
|
|
沙发#
发布于:2005-02-02 09:29
没有处理完善,处理的太简单了
|
|
|
板凳#
发布于:2005-02-04 00:11
我是个新手,能进一步指点一下么?
|
|
|
地板#
发布于:2005-02-04 15:33
我是个新手,能进一步指点一下么? 看看我给你发的mail中的提示 |
|
|
地下室#
发布于:2005-02-05 10:00
关注。。。
|
|
|
5楼#
发布于:2005-02-05 13:43
我是个新手,能进一步指点一下么? 问题解决了吗? |
|
|
6楼#
发布于:2005-02-09 15:06
555,你给我发的邮件被当作“可疑”邮件,被163干掉了,能再发一次么。小弟多谢了。
|
|
|
7楼#
发布于:2005-02-11 22:33
555,你给我发的邮件被当作“可疑”邮件,被163干掉了,能再发一次么。小弟多谢了。 mail又发了一下,你看看先 |
|
|
8楼#
发布于:2005-02-12 09:39
多谢你。邮件已经收到了,我研究一下。
|
|
|
9楼#
发布于:2005-02-16 21:54
问题解决了,不过用的是另一种办法。
|
|
|
10楼#
发布于:2005-02-16 22:17
问题解决了,不过用的是另一种办法。 恭喜 |
|
|
11楼#
发布于:2005-02-18 09:17
怎么解决的?能说说吗?
|
|
|
12楼#
发布于:2005-02-18 19:34
在allenzh指出错误后,我参考了论坛里以前关于ndis im 的帖子,做了修改。你搜索一下以前的帖子有很多正确地代码。
|
|
|