亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tapdrvr.c

?? 一個(gè)Windows下的Linux專用虛擬機(jī)
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
/* *  TAP-Win32 -- A kernel driver to provide virtual tap device *               functionality on Windows.  Originally derived *               from the CIPE-Win32 project by Damion K. Wilson, *               with extensive modifications by James Yonan. * *  All source code which derives from the CIPE-Win32 project is *  Copyright (C) Damion K. Wilson, 2003, and is released under the *  GPL version 2 (see below). * *  All other source code is Copyright (C) 2002-2005 OpenVPN Solutions LLC, *  and is released under the GPL version 2 (see below). * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License version 2 *  as published by the Free Software Foundation. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program (see the file COPYING included with this *  distribution); if not, write to the Free Software Foundation, Inc., *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *///======================================================// This driver is designed to work on Win 2000 or higher// versions of Windows.//// It is SMP-safe and handles NDIS 5 power management.//// By default we operate as a "tap" virtual ethernet// 802.3 interface, but we can emulate a "tun"// interface (point-to-point IPv4) through the// TAP_IOCTL_CONFIG_POINT_TO_POINT or// TAP_IOCTL_CONFIG_TUN ioctl.//======================================================#define NDIS_MINIPORT_DRIVER#define BINARY_COMPATIBLE 0#define NDIS50_MINIPORT 1#define NDIS_WDM 0#define NDIS50 1#define NTSTRSAFE_LIB// Debug info output#define ALSO_DBGPRINT           1#define DEBUGP_AT_DISPATCH      0//========================================================// Check for truncated IPv4 packets, log errors if found.//========================================================#define PACKET_TRUNCATION_CHECK 0 // JYFIXME//========================================================// EXPERIMENTAL -- Configure TAP device object to be// accessible from non-administrative accounts, based// on an advanced properties setting.//// Duplicates the functionality of OpenVPN's// --allow-nonadmin directive.//========================================================#define ENABLE_NONADMIN 1         // JYFIXME#include <ndis.h>#include <ntstrsafe.h>#include <ntddk.h>#include "lock.h"#include "constants.h"#include "common.h"#include "proto.h"#include "error.h"#include "endian.h"#include "dhcp.h"#include "types.h"#include "prototypes.h"#include "mem.c"#include "macinfo.c"#include "error.c"#include "dhcp.c"#include "instance.c"#define IS_UP(ta) \  ((ta)->m_InterfaceIsRunning && (ta)->m_Extension.m_TapIsRunning)#define INCREMENT_STAT(s) ++(s)#define NAME_BUFFER_SIZE 80//========================================================//                            Globals//========================================================NDIS_HANDLE g_NdisWrapperHandle;const UINT g_SupportedOIDList[] = {  OID_GEN_HARDWARE_STATUS,  OID_GEN_MEDIA_SUPPORTED,  OID_GEN_MEDIA_IN_USE,  OID_GEN_MAXIMUM_LOOKAHEAD,  OID_GEN_MAC_OPTIONS,  OID_GEN_LINK_SPEED,  OID_GEN_TRANSMIT_BLOCK_SIZE,  OID_GEN_RECEIVE_BLOCK_SIZE,  OID_GEN_VENDOR_DESCRIPTION,  OID_GEN_DRIVER_VERSION,  OID_GEN_XMIT_OK,  OID_GEN_RCV_OK,  OID_GEN_XMIT_ERROR,  OID_GEN_RCV_ERROR,  OID_802_3_PERMANENT_ADDRESS,  OID_802_3_CURRENT_ADDRESS,  OID_GEN_RCV_NO_BUFFER,  OID_802_3_RCV_ERROR_ALIGNMENT,  OID_802_3_XMIT_ONE_COLLISION,  OID_802_3_XMIT_MORE_COLLISIONS,  OID_802_3_MULTICAST_LIST,  OID_802_3_MAXIMUM_LIST_SIZE,  OID_GEN_VENDOR_ID,  OID_GEN_CURRENT_LOOKAHEAD,  OID_GEN_CURRENT_PACKET_FILTER,  OID_GEN_PROTOCOL_OPTIONS,  OID_GEN_MAXIMUM_TOTAL_SIZE,  OID_GEN_TRANSMIT_BUFFER_SPACE,  OID_GEN_RECEIVE_BUFFER_SPACE,  OID_GEN_MAXIMUM_FRAME_SIZE,  OID_GEN_VENDOR_DRIVER_VERSION,  OID_GEN_MAXIMUM_SEND_PACKETS,  OID_GEN_MEDIA_CONNECT_STATUS,  OID_GEN_SUPPORTED_LIST};//============================================================//                         Driver Entry//============================================================#pragma NDIS_INIT_FUNCTION (DriverEntry)NTSTATUSDriverEntry (IN PDRIVER_OBJECT p_DriverObject,	     IN PUNICODE_STRING p_RegistryPath){  NDIS_STATUS l_Status = NDIS_STATUS_FAILURE;  NDIS_MINIPORT_CHARACTERISTICS *l_Properties = NULL;  //========================================================  // Notify NDIS that a new miniport driver is initializing.  //========================================================  NdisMInitializeWrapper (&g_NdisWrapperHandle,			  p_DriverObject,			  p_RegistryPath, NULL);  //======================  // Global initialization  //======================#if DBG  MyDebugInit (10000); // Allocate debugging text space#endif  if (!InitInstanceList ())    {      DEBUGP (("[TAP] Allocation failed for adapter instance list\n"));      goto cleanup;    }  //=======================================  // Set and register miniport entry points  //=======================================  l_Properties = MemAlloc (sizeof (NDIS_MINIPORT_CHARACTERISTICS), TRUE);  if (l_Properties == NULL)    {      DEBUGP (("[TAP] Allocation failed for miniport entry points\n"));      goto cleanup;    }  l_Properties->MajorNdisVersion = TAP_NDIS_MAJOR_VERSION;  l_Properties->MinorNdisVersion = TAP_NDIS_MINOR_VERSION;  l_Properties->InitializeHandler = AdapterCreate;  l_Properties->HaltHandler = AdapterHalt;  l_Properties->ResetHandler = AdapterReset;               /* DISPATCH_LEVEL */  l_Properties->TransferDataHandler = AdapterReceive;      /* DISPATCH_LEVEL */  l_Properties->SendHandler = AdapterTransmit;             /* DISPATCH_LEVEL */  l_Properties->QueryInformationHandler = AdapterQuery;    /* DISPATCH_LEVEL */  l_Properties->SetInformationHandler = AdapterModify;     /* DISPATCH_LEVEL */  switch (l_Status =	  NdisMRegisterMiniport (g_NdisWrapperHandle, l_Properties,				 sizeof (NDIS_MINIPORT_CHARACTERISTICS)))    {    case NDIS_STATUS_SUCCESS:      {	DEBUGP (("[TAP] version [%d.%d] %s %s registered miniport successfully\n",		 TAP_DRIVER_MAJOR_VERSION,		 TAP_DRIVER_MINOR_VERSION,		 __DATE__,		 __TIME__));	DEBUGP (("Registry Path: '%S'\n", p_RegistryPath->Buffer));	break;      }    case NDIS_STATUS_BAD_CHARACTERISTICS:      {	DEBUGP (("[TAP] Miniport characteristics were badly defined\n"));	NdisTerminateWrapper (g_NdisWrapperHandle, NULL);	break;      }    case NDIS_STATUS_BAD_VERSION:      {	DEBUGP	  (("[TAP] NDIS Version is wrong for the given characteristics\n"));	NdisTerminateWrapper (g_NdisWrapperHandle, NULL);	break;      }    case NDIS_STATUS_RESOURCES:      {	DEBUGP (("[TAP] Insufficient resources\n"));	NdisTerminateWrapper (g_NdisWrapperHandle, NULL);	break;      }    default:    case NDIS_STATUS_FAILURE:      {	DEBUGP (("[TAP] Unknown fatal registration error\n"));	NdisTerminateWrapper (g_NdisWrapperHandle, NULL);	break;      }    } cleanup:  if (l_Properties)    MemFree (l_Properties, sizeof (NDIS_MINIPORT_CHARACTERISTICS));  if (l_Status == NDIS_STATUS_SUCCESS)    NdisMRegisterUnloadHandler (g_NdisWrapperHandle, TapDriverUnload);  else    TapDriverUnload (p_DriverObject);  return l_Status;}//============================================================//                         Driver Unload//============================================================VOID TapDriverUnload (IN PDRIVER_OBJECT p_DriverObject){  DEBUGP (("[TAP] version [%d.%d] %s %s unloaded, instances=%d, imbs=%d\n",	   TAP_DRIVER_MAJOR_VERSION,	   TAP_DRIVER_MINOR_VERSION,	   __DATE__,	   __TIME__,	   NInstances(),	   InstanceMaxBucketSize()));  FreeInstanceList ();  //==============================  // Free debugging text space  //==============================#if DBG  MyDebugFree ();#endif}//==========================================================//                            Adapter Initialization//==========================================================NDIS_STATUS AdapterCreate  (OUT PNDIS_STATUS p_ErrorStatus,   OUT PUINT p_MediaIndex,   IN PNDIS_MEDIUM p_Media,   IN UINT p_MediaCount,   IN NDIS_HANDLE p_AdapterHandle,   IN NDIS_HANDLE p_ConfigurationHandle){  TapAdapterPointer l_Adapter = NULL;  NDIS_MEDIUM l_PreferredMedium = NdisMedium802_3; // Ethernet  BOOLEAN l_MacFromRegistry = FALSE;  UINT l_Index;  NDIS_STATUS status;#if ENABLE_NONADMIN  BOOLEAN enable_non_admin = FALSE;#endif  //====================================  // Make sure adapter type is supported  //====================================  for (l_Index = 0;       l_Index < p_MediaCount && p_Media[l_Index] != l_PreferredMedium;       ++l_Index);  if (l_Index == p_MediaCount)    {      DEBUGP (("[TAP] Unsupported adapter type [wanted: %d]\n",	       l_PreferredMedium));      return NDIS_STATUS_UNSUPPORTED_MEDIA;    }  *p_MediaIndex = l_Index;  //=========================================  // Allocate memory for TapAdapter structure  //=========================================  l_Adapter = MemAlloc (sizeof (TapAdapter), TRUE);  if (l_Adapter == NULL)    {      DEBUGP (("[TAP] Couldn't allocate adapter memory\n"));      return NDIS_STATUS_RESOURCES;    }  //==========================================  // Inform the NDIS library about significant  // features of our virtual NIC.  //==========================================  NdisMSetAttributesEx    (p_AdapterHandle,     (NDIS_HANDLE) l_Adapter,     16,     NDIS_ATTRIBUTE_DESERIALIZE     | NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT     | NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT     | NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND,     NdisInterfaceInternal);  //=====================================  // Initialize simple Adapter parameters  //=====================================  l_Adapter->m_Lookahead = DEFAULT_PACKET_LOOKAHEAD;  l_Adapter->m_Medium = l_PreferredMedium;  l_Adapter->m_DeviceState = '?';  l_Adapter->m_MiniportAdapterHandle = p_AdapterHandle;  //==================================  // Allocate spinlock for controlling  // access to multicast address list.  //==================================  NdisAllocateSpinLock (&l_Adapter->m_MCLock);  l_Adapter->m_MCLockAllocated = TRUE;  //====================================================  // Register a shutdown handler which will be called  // on system restart/shutdown to halt our virtual NIC.  //====================================================  NdisMRegisterAdapterShutdownHandler (p_AdapterHandle, l_Adapter,				       AdapterHalt);  l_Adapter->m_RegisteredAdapterShutdownHandler = TRUE;  //============================================  // Get parameters from registry which were set  // in the adapter advanced properties dialog.  //============================================  {    NDIS_STATUS status;    NDIS_HANDLE configHandle;    NDIS_CONFIGURATION_PARAMETER *parm;    // set defaults in case our registry query fails    l_Adapter->m_MTU = ETHERNET_MTU;    l_Adapter->m_MediaStateAlwaysConnected = FALSE;    l_Adapter->m_MediaState = FALSE;    NdisOpenConfiguration (&status, &configHandle, p_ConfigurationHandle);    if (status != NDIS_STATUS_SUCCESS)      {	  DEBUGP (("[TAP] Couldn't open adapter registry\n"));	  AdapterFreeResources (l_Adapter);	  return status;      }    //====================================    // Allocate and construct adapter name    //====================================    {      NDIS_STRING key = NDIS_STRING_CONST("MiniportName");      NdisReadConfiguration (&status, &parm, configHandle, &key, NdisParameterString);      if (status == NDIS_STATUS_SUCCESS)	{	  if (parm->ParameterType == NdisParameterString)	    {	      DEBUGP (("[TAP] NdisReadConfiguration (MiniportName=%s)\n", parm->ParameterData.StringData.Buffer));	      if (RtlUnicodeStringToAnsiString (			&l_Adapter->m_NameAnsi,			&parm->ParameterData.StringData,			TRUE) != STATUS_SUCCESS)		{		  DEBUGP (("[TAP] RtlUnicodeStringToAnsiString MiniportName failed\n"));		  status = NDIS_STATUS_RESOURCES;		}	    }	} else {	  /* "MiniportName" is available only XP and above.  Not on Windows 2000. */	  NDIS_STRING key = NDIS_STRING_CONST("NdisVersion");	  NdisReadConfiguration (&status, &parm, configHandle, &key, NdisParameterInteger);	  if (status == NDIS_STATUS_SUCCESS)	    {	      if (parm->ParameterData.IntegerData == 0x50000)		{		  /* Fallback for Windows 2000 with NDIS version 5.00.00		     Don't use this on Vista, 'NDIS_MINIPORT_BLOCK' was changed! */		  DEBUGP (("[TAP] NdisReadConfiguration NdisVersion (Int=%X)\n", parm->ParameterData.IntegerData));		  if (RtlUnicodeStringToAnsiString (			&l_Adapter->m_NameAnsi,			&((PNDIS_MINIPORT_BLOCK) p_AdapterHandle)->MiniportName,			TRUE) != STATUS_SUCCESS)		    {		      DEBUGP (("[TAP] RtlUnicodeStringToAnsiString MiniportName (W2K) failed\n"));		      status = NDIS_STATUS_RESOURCES;		    }		}	    }	}    }    /* Can't continue without name (see macro 'NAME') */    if (status != NDIS_STATUS_SUCCESS || !l_Adapter->m_NameAnsi.Buffer)      {	NdisCloseConfiguration (configHandle);	AdapterFreeResources (l_Adapter);	return NDIS_STATUS_RESOURCES;      }	/* Read MTU setting from registry */	{	  NDIS_STRING key = NDIS_STRING_CONST("MTU");	  NdisReadConfiguration (&status, &parm, configHandle,				 &key, NdisParameterInteger);	  if (status == NDIS_STATUS_SUCCESS)	    {	      if (parm->ParameterType == NdisParameterInteger)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久在线观看免费| 国产综合色视频| 99国产精品99久久久久久| 日本一区二区三区在线不卡| 精品一区二区三区的国产在线播放| 欧美一区二区三区四区久久| 日韩在线一区二区| 欧美视频一区在线| 蜜臀久久99精品久久久画质超高清 | 在线免费一区三区| 亚洲欧美日韩一区| 欧美日韩精品免费| 免费观看久久久4p| 国产欧美日韩三级| 欧美在线你懂得| 日本一区中文字幕 | 国产一区中文字幕| 国产清纯在线一区二区www| eeuss鲁一区二区三区| 亚洲精品大片www| 欧美电视剧在线观看完整版| 国产.欧美.日韩| 有坂深雪av一区二区精品| 欧美日韩一区三区| 精久久久久久久久久久| 亚洲欧美另类图片小说| 日韩一区二区三区精品视频| 国产91丝袜在线播放0| 亚洲精品国产精华液| 日韩一区二区三区在线观看| 成人高清免费观看| 调教+趴+乳夹+国产+精品| 日本一二三不卡| 欧美视频在线播放| 成人在线综合网站| 亚洲电影你懂得| 国产精品嫩草99a| 6080国产精品一区二区| 不卡的电影网站| 久久国产精品色| 亚洲综合色噜噜狠狠| 久久久久国产一区二区三区四区 | 色屁屁一区二区| 国产高清一区日本| 日韩电影免费在线看| 亚洲天堂中文字幕| 国产午夜精品一区二区三区嫩草| 色噜噜狠狠色综合欧洲selulu| 国内精品嫩模私拍在线| 丝袜国产日韩另类美女| 玉足女爽爽91| 亚洲色欲色欲www| 国产欧美一区二区三区沐欲| 欧美一级一级性生活免费录像| 日本黄色一区二区| 色综合天天综合色综合av| 国产成人综合自拍| 国产精品911| 国产999精品久久| 国产精品自拍在线| 久久99这里只有精品| 免费不卡在线观看| 另类小说一区二区三区| 日韩精品一级中文字幕精品视频免费观看| 中文字幕制服丝袜一区二区三区| 久久久99免费| 国产亚洲一区二区三区四区| 欧美一级久久久| 精品日韩成人av| 久久综合九色综合欧美98| 精品国产自在久精品国产| 精品国产百合女同互慰| 精品久久久久久久久久久久包黑料| 欧美日本在线看| 欧美精品自拍偷拍| 91精品国产综合久久久蜜臀粉嫩| 7777精品伊人久久久大香线蕉经典版下载| 精品视频在线免费观看| 欧美日韩综合色| 91麻豆精品国产91| 久久综合九色综合97_久久久| 久久色.com| 亚洲精品少妇30p| 午夜免费欧美电影| 蜜臀av一级做a爰片久久| 九九精品一区二区| 岛国一区二区在线观看| 在线中文字幕一区二区| 在线不卡的av| 国产日韩欧美一区二区三区综合| 国产女人18毛片水真多成人如厕| 久久久久久久一区| 亚洲三级在线播放| 日本一不卡视频| 国产精品一区专区| 91尤物视频在线观看| 欧美精品自拍偷拍| 国产精品网站在线播放| 婷婷一区二区三区| 成年人国产精品| 日韩欧美一区二区视频| 亚洲国产成人自拍| 日韩高清一级片| 91麻豆123| 欧美大黄免费观看| 亚洲三级在线看| 国内外成人在线| 欧美日韩在线精品一区二区三区激情| 26uuu欧美| 亚洲成人av一区| 99国产欧美另类久久久精品| 日韩一区二区三区av| 亚洲色图制服诱惑| 国产成人一区在线| 91精品国产综合久久香蕉麻豆| 欧美国产日韩在线观看| 日本不卡视频在线观看| 色老头久久综合| 欧美国产日韩精品免费观看| 美女脱光内衣内裤视频久久影院| 972aa.com艺术欧美| 久久久久久久久久久久久久久99| 五月天欧美精品| 欧美视频完全免费看| 亚洲欧洲中文日韩久久av乱码| 国产成人精品亚洲日本在线桃色| 91精品国产入口| 五月天网站亚洲| 欧美吻胸吃奶大尺度电影| 中文字幕一区不卡| 成人蜜臀av电影| 国产精品色噜噜| 国产mv日韩mv欧美| 国产女人水真多18毛片18精品视频| 久88久久88久久久| 亚洲精品在线免费播放| 久久国产生活片100| 精品国产免费人成在线观看| 久久超级碰视频| 精品国产欧美一区二区| 国产精品自产自拍| 国产日韩欧美综合一区| 不卡的av中国片| 亚洲激情自拍偷拍| 欧美日韩成人综合| 日本在线不卡一区| 日韩亚洲欧美高清| 精品一区二区成人精品| 久久人人爽爽爽人久久久| 国产一区二区网址| 国产精品久久久久久久久图文区| 国产成人免费在线视频| 国产精品你懂的| 色综合久久88色综合天天| 亚洲资源中文字幕| 欧美精选一区二区| 国内精品伊人久久久久av影院| 久久精品亚洲国产奇米99| 成人av先锋影音| 亚洲成人综合在线| 欧美sm美女调教| 91婷婷韩国欧美一区二区| 日韩精品一卡二卡三卡四卡无卡| 精品国产伦一区二区三区观看方式| 国产福利一区在线| 亚洲综合清纯丝袜自拍| 欧美电影免费提供在线观看| 国产乱子伦视频一区二区三区| 日本一区二区免费在线| 色综合天天性综合| 视频一区视频二区在线观看| 欧美videossexotv100| 成人免费视频国产在线观看| 亚洲欧美综合色| 欧美午夜视频网站| 九色|91porny| 亚洲免费在线观看| 91麻豆精品国产综合久久久久久| 久久97超碰国产精品超碰| 国产精品国产三级国产aⅴ中文 | 91精品国产高清一区二区三区蜜臀| 老司机免费视频一区二区三区| 中文字幕一区二区视频| 欧美丰满少妇xxxxx高潮对白| 国产福利一区二区三区视频在线| 亚洲视频免费在线观看| 91精品国产色综合久久ai换脸 | 国产一区二区在线影院| 中文字幕日韩一区| 91精品国产综合久久久久久| 国产麻豆视频一区二区| 婷婷中文字幕一区三区| 中文字幕国产一区| 精品日韩99亚洲| 欧美高清视频在线高清观看mv色露露十八| 亚洲成人自拍偷拍| 久久久久久97三级| 欧美日韩午夜影院| 成人精品高清在线| 日韩va亚洲va欧美va久久|