阅读:2005回复:0
准菜鸟,请教问题。。。。。
请问前辈,小弟的代码怎么不能启动驱动呢?
望指导。。。。 #include <ndis.h> #include <ntddndis.h> #include <wdm.h> #define MP_NDIS_MAJOR_VERSION 5 #define MP_NDIS_MINOR_VERSION 0 typedef struct _MP_GLOBAL_DATA { LIST_ENTRY AdapterList; NDIS_SPIN_LOCK Lock; } MP_GLOBAL_DATA; MP_GLOBAL_DATA GlobalData; NDIS_HANDLE MPWrapperHandle; //DRIVER_UNLOAD MPUnload;/*卸载句柄*/ NDIS_STATUS MPInitialize( OUT PNDIS_STATUS OpenErrorStatus, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, IN UINT MediumArraySize, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE WrapperConfigurationContext) { DbgPrint("Entry MpInitalize funtion!\n"); return STATUS_SUCCESS; } VOID MPHalt( IN NDIS_HANDLE MiniportAdapterContext ) { DbgPrint("Entry MPHalt funtion!\n"); } NDIS_STATUS MPSetInformation( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, __in_bcount(InformationBufferLength) IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesRead, OUT PULONG BytesNeeded) { DbgPrint("Entry MPSetinformation! \n"); return STATUS_SUCCESS; } NDIS_STATUS MPQueryInformation( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesWritten, OUT PULONG BytesNeeded) { DbgPrint("Entry MPQueryInformation! \n"); return STATUS_SUCCESS; } VOID MPSendPackets( IN NDIS_HANDLE MiniportAdapterContext, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets) { DbgPrint("Entry MPSendPackets ! \n"); } VOID MPReturnPacket( IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet) { DbgPrint("Entry MPReturnPacket ! \n"); } NDIS_STATUS MPReset( OUT PBOOLEAN AddressingReset, IN NDIS_HANDLE MiniportAdapterContext ) { DbgPrint("Entry MPReset! \n"); return STATUS_SUCCESS; } BOOLEAN MPCheckForHang( IN NDIS_HANDLE MiniportAdapterContext ) { return FALSE; } VOID MPCancelSendPackets( IN NDIS_HANDLE MiniportAdapterContext, IN PVOID CancelId ) { DbgPrint("Entry MPCancelSendPackets! \n"); } VOID MPPnPEventNotify( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_DEVICE_PNP_EVENT PnPEvent, IN PVOID InformationBuffer, IN ULONG InformationBufferLength ) { DbgPrint("Entry MPPnPEventNotify! \n"); } VOID MPShutdown( IN NDIS_HANDLE MiniportAdapterContext ) { DbgPrint("Entry MPShutdown! \n"); } VOID MPUnload( IN PDRIVER_OBJECT DriverObject ) { DbgPrint("Entry MPUnload! \n"); ASSERT(IsListEmpty(&GlobalData.AdapterList));/*清空driver请求链表*/ NdisFreeSpinLock(&GlobalData.Lock);/*释放自旋锁*/ DbgPrint("quit MPUnload! \n"); } NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) { UNICODE_STRING ntDeviceName; PDEVICE_OBJECT deviceObject = NULL; NTSTATUS status = STATUS_SUCCESS; NDIS_MINIPORT_CHARACTERISTICS MPChar; DbgPrint("My First driver.........Entry Driver!\n"); NdisMInitializeWrapper(&MPWrapperHandle,pDriverObject,pRegistryPath,NULL);/*得到微端口驱动句柄*/ if(!MPWrapperHandle) { DbgPrint("Install NdisMinitializeWrapper error !\n"); return NDIS_STATUS_FAILURE; } #if 1 NdisZeroMemory(&MPChar,sizeof(MPChar)); MPChar.MajorNdisVersion = MP_NDIS_MAJOR_VERSION; MPChar.MinorNdisVersion = MP_NDIS_MINOR_VERSION; MPChar.InitializeHandler = MPInitialize; MPChar.HaltHandler = MPHalt; MPChar.SetInformationHandler = MPSetInformation; MPChar.QueryInformationHandler = MPQueryInformation; MPChar.SendPacketsHandler = MPSendPackets; MPChar.ReturnPacketHandler = MPReturnPacket; MPChar.ResetHandler = MPReset; MPChar.CheckForHangHandler = MPCheckForHang; MPChar.CancelSendPacketsHandler = MPCancelSendPackets; MPChar.PnPEventNotifyHandler = MPPnPEventNotify; MPChar.AdapterShutdownHandler = MPShutdown; DbgPrint("Entry Calling NdisMRegisterMiniport...\n"); status = NdisMRegisterMiniport(MPWrapperHandle,&MPChar,sizeof(NDIS_MINIPORT_CHARACTERISTICS)); if(status != STATUS_SUCCESS) { DbgPrint("register NdisMRegisterMiniport Error...\n"); NdisTerminateWrapper(MPWrapperHandle,NULL); } else { NdisAllocateSpinLock(&GlobalData.Lock);/*创建一个自旋锁,来保护数据结构或代码片段,在某个时刻只允许一个进程访问临界区内的代码*/ NdisInitializeListHead(&GlobalData.AdapterList);/*初始化driver请求LIST*/ NdisMRegisterUnloadHandler(MPWrapperHandle,MPUnload); } #endif /* status = IoCreateDevice(pDriverObject, 0, &ntDeviceName, FILE_DEVICE_NETWORK, FILE_DEVICE_SECURE_OPEN, FALSE, &deviceObject);*/ return status; } |
|