////////////////////////////////////////////////////////////////////////// //初始化 NTSTATUS InitFW() { InitializeListHead(&g_AcceptedPortListHeader.Next); NdisInitializeReadWriteLock(&g_AcceptedPortListLock2); //使用共享读,互斥写锁 InitializeListHead(&g_AskUserConnectListHeader); KeInitializeSpinLock(&g_AskUserConnectListLock); InitializeListHead(&g_HookTcpipFireWallList.Next); NdisInitializeReadWriteLock(&g_HookTcpipFireWallLock); return STATUS_SUCCESS; }
NDIS_STATUS MpAllocateOldRWLock( PMP_READ_WRITE_LOCK Lock, NDIS_HANDLE Handle ) { UNREFERENCED_PARAMETER(Handle); NdisInitializeReadWriteLock(&Lock->OldRWLock); return NDIS_STATUS_SUCCESS; }
NTSTATUS DriverEntry( __in PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath ) /*++ Routine Description: In the context of its DriverEntry function, a miniport driver associates itself with NDIS, specifies the NDIS version that it is using, and registers its entry points. Arguments: PVOID DriverObject - pointer to the driver object. PVOID RegistryPath - pointer to the driver registry path. Return Value: NTSTATUS code --*/ { NTSTATUS status; UNREFERENCED_PARAMETER(RegistryPath); DEBUGP (("[TAP] --> DriverEntry; version [%d.%d] %s %s\n", TAP_DRIVER_MAJOR_VERSION, TAP_DRIVER_MINOR_VERSION, __DATE__, __TIME__)); DEBUGP (("[TAP] Registry Path: '%wZ'\n", RegistryPath)); // // Initialize any driver-global variables here. // NdisZeroMemory(&GlobalData, sizeof(GlobalData)); // // The ApaterList in the GlobalData structure is used to track multiple // adapters controlled by this miniport. // NdisInitializeListHead(&GlobalData.AdapterList); // // This lock protects the AdapterList. // NdisInitializeReadWriteLock(&GlobalData.Lock); do { NDIS_MINIPORT_DRIVER_CHARACTERISTICS miniportCharacteristics; NdisZeroMemory(&miniportCharacteristics, sizeof(miniportCharacteristics)); {C_ASSERT(sizeof(miniportCharacteristics) >= NDIS_SIZEOF_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2);} miniportCharacteristics.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS; miniportCharacteristics.Header.Size = NDIS_SIZEOF_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2; miniportCharacteristics.Header.Revision = NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2; miniportCharacteristics.MajorNdisVersion = TAP_NDIS_MAJOR_VERSION; miniportCharacteristics.MinorNdisVersion = TAP_NDIS_MINOR_VERSION; miniportCharacteristics.MajorDriverVersion = TAP_DRIVER_MAJOR_VERSION; miniportCharacteristics.MinorDriverVersion = TAP_DRIVER_MINOR_VERSION; miniportCharacteristics.Flags = 0; //miniportCharacteristics.SetOptionsHandler = MPSetOptions; // Optional miniportCharacteristics.InitializeHandlerEx = AdapterCreate; miniportCharacteristics.HaltHandlerEx = AdapterHalt; miniportCharacteristics.UnloadHandler = TapDriverUnload; miniportCharacteristics.PauseHandler = AdapterPause; miniportCharacteristics.RestartHandler = AdapterRestart; miniportCharacteristics.OidRequestHandler = AdapterOidRequest; miniportCharacteristics.SendNetBufferListsHandler = AdapterSendNetBufferLists; miniportCharacteristics.ReturnNetBufferListsHandler = AdapterReturnNetBufferLists; miniportCharacteristics.CancelSendHandler = AdapterCancelSend; miniportCharacteristics.CheckForHangHandlerEx = AdapterCheckForHangEx; miniportCharacteristics.ResetHandlerEx = AdapterReset; miniportCharacteristics.DevicePnPEventNotifyHandler = AdapterDevicePnpEventNotify; miniportCharacteristics.ShutdownHandlerEx = AdapterShutdownEx; miniportCharacteristics.CancelOidRequestHandler = AdapterCancelOidRequest; // // Associate the miniport driver with NDIS by calling the // NdisMRegisterMiniportDriver. This function returns an NdisDriverHandle. // The miniport driver must retain this handle but it should never attempt // to access or interpret this handle. // // By calling NdisMRegisterMiniportDriver, the driver indicates that it // is ready for NDIS to call the driver's MiniportSetOptions and // MiniportInitializeEx handlers. // DEBUGP (("[TAP] Calling NdisMRegisterMiniportDriver...\n")); //NDIS_DECLARE_MINIPORT_DRIVER_CONTEXT(TAP_GLOBAL); status = NdisMRegisterMiniportDriver( DriverObject, RegistryPath, &GlobalData, &miniportCharacteristics, &GlobalData.NdisDriverHandle ); if (NDIS_STATUS_SUCCESS == status) { DEBUGP (("[TAP] Registered miniport successfully\n")); } else { DEBUGP(("[TAP] NdisMRegisterMiniportDriver failed: %8.8X\n", status)); TapDriverUnload(DriverObject); status = NDIS_STATUS_FAILURE; break; } } while(FALSE); DEBUGP (("[TAP] <-- DriverEntry; status = %8.8X\n",status)); return status; }