Luwei_8508
驱动牛犊
驱动牛犊
  • 注册日期2009-07-02
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2005回复:0

准菜鸟,请教问题。。。。。

楼主#
更多 发布于:2009-07-02 15:03
请问前辈,小弟的代码怎么不能启动驱动呢?
望指导。。。。

#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;
}
游客

返回顶部