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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tapdrvr.c

?? 一個Windows下的Linux專用虛擬機
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* *  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)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米一区二区三区| 91麻豆精品久久久久蜜臀| 欧美日韩一区高清| 国产精品久久久久久久久搜平片| 亚洲成人一区在线| 91在线视频网址| 国产欧美在线观看一区| 日本亚洲免费观看| 91豆麻精品91久久久久久| 中文字幕不卡一区| 国产一区二区三区久久悠悠色av | 日韩一二三区不卡| 亚洲精品免费在线| 成人动漫一区二区在线| 2024国产精品| 激情久久五月天| 欧美一区二区精品久久911| 亚洲一区二区三区四区中文字幕| 成人h动漫精品一区二区 | 91精品国产一区二区三区| 一区二区三区在线观看国产| 成人激情动漫在线观看| 国产婷婷一区二区| 国产精品一区二区三区乱码| 2020国产精品自拍| 激情综合色播五月| 精品av久久707| 国内精品久久久久影院薰衣草| 日韩一级二级三级精品视频| 日韩 欧美一区二区三区| 欧美天天综合网| 午夜欧美大尺度福利影院在线看 | 日韩精品一区二区三区视频| 人人精品人人爱| 日韩美女视频一区二区在线观看| 美女视频黄频大全不卡视频在线播放| 欧美综合亚洲图片综合区| 亚洲一区欧美一区| 欧美日韩亚洲国产综合| 日本特黄久久久高潮| 精品福利视频一区二区三区| 韩国三级在线一区| 日本一二三四高清不卡| www.av亚洲| 亚洲一二三专区| 欧美一区在线视频| 国产乱码精品一区二区三区av | 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 不卡区在线中文字幕| 亚洲精品成人少妇| 在线成人免费视频| 国产一区二区三区高清播放| 国产精品美女一区二区三区| 色诱亚洲精品久久久久久| 亚洲成人精品一区| 精品国产3级a| 色综合久久天天| 日韩综合一区二区| 欧美国产日韩一二三区| 91久久精品国产91性色tv | 成人高清av在线| 亚洲国产综合在线| 久久尤物电影视频在线观看| 9l国产精品久久久久麻豆| 午夜精品久久久久久久99水蜜桃| 2023国产精品自拍| 欧美专区日韩专区| 成人永久看片免费视频天堂| 亚洲成人免费影院| 国产精品系列在线| 91精品国产免费| 99精品视频一区二区三区| 蜜臀av一区二区| 亚洲一线二线三线视频| 国产网红主播福利一区二区| 欧美二区乱c少妇| 91网上在线视频| 精品制服美女久久| 亚洲一区二区免费视频| 国产精品美女一区二区三区 | 一区二区三区在线视频播放 | 91亚洲国产成人精品一区二区三| 裸体歌舞表演一区二区| 一二三四区精品视频| 欧美国产激情二区三区| 欧美一区二区三区色| 99精品黄色片免费大全| 国产一区二区三区在线看麻豆| 亚洲在线免费播放| 国产精品久久久久久久久久久免费看| 日韩精品资源二区在线| 精品视频一区 二区 三区| 91在线视频网址| 成人国产亚洲欧美成人综合网 | 韩国成人福利片在线播放| 香蕉久久一区二区不卡无毒影院| 亚洲丝袜美腿综合| 亚洲国产成人一区二区三区| 精品精品欲导航| 欧美精品99久久久**| 欧美色涩在线第一页| 色噜噜狠狠色综合欧洲selulu| www.一区二区| av不卡在线播放| 福利一区福利二区| 国产成人免费在线观看| 国产精品一区一区| 国产伦精品一区二区三区免费迷 | 国产精品乱人伦一区二区| 欧美精品一区二区三| 日韩西西人体444www| 欧美一区二区三区人| 欧美日韩视频在线第一区 | 91亚洲资源网| 色婷婷狠狠综合| 91成人在线免费观看| 欧美偷拍一区二区| 欧美一区二区视频在线观看 | 欧美一区二区二区| 日韩免费观看高清完整版| 精品国产凹凸成av人网站| 精品国产一区二区三区不卡 | 国产日韩欧美综合一区| 国产亚洲精品免费| 国产精品三级av在线播放| 国产精品成人在线观看| 夜夜精品视频一区二区| 亚洲国产精品一区二区久久恐怖片| 亚洲一区二区视频在线观看| 午夜精品123| 国内精品久久久久影院色| 成人爱爱电影网址| 欧美日韩一区久久| 精品国产乱码久久久久久蜜臀| 久久网站热最新地址| 国产精品国产三级国产有无不卡| 亚洲男人的天堂av| 午夜久久久影院| 国产伦精品一区二区三区在线观看| 成人午夜碰碰视频| 精品1区2区3区| 久久网站最新地址| 亚洲一二三专区| 韩国一区二区视频| 在线观看国产日韩| 精品少妇一区二区三区日产乱码| 中文字幕不卡在线观看| 丝袜美腿成人在线| 国产1区2区3区精品美女| 欧美在线免费视屏| 久久精品在线免费观看| 亚洲精品欧美在线| 国产麻豆精品在线观看| 欧洲生活片亚洲生活在线观看| 日韩欧美亚洲国产精品字幕久久久| 欧美韩国日本综合| 美腿丝袜在线亚洲一区| 99精品久久免费看蜜臀剧情介绍| 日韩视频免费观看高清完整版在线观看| 久久精品日韩一区二区三区| 午夜精品在线看| 99精品欧美一区二区三区小说 | 亚洲大片在线观看| 不卡的看片网站| 日韩欧美国产1| 亚洲aⅴ怡春院| 91丨porny丨蝌蚪视频| 精品少妇一区二区三区在线播放| 亚洲图片欧美激情| 国产高清视频一区| 精品第一国产综合精品aⅴ| 亚洲第一狼人社区| 一本一本久久a久久精品综合麻豆| 精品电影一区二区三区| 日韩电影网1区2区| 欧美性色综合网| 亚洲乱码中文字幕| 成人美女在线视频| 久久久久久久久久久久久久久99 | bt7086福利一区国产| 欧美精品一区二区蜜臀亚洲| 免费高清成人在线| 欧美色图天堂网| 亚洲综合激情小说| 色婷婷久久久久swag精品| 中文字幕在线观看一区| 国产精品1区2区| 亚洲精品在线网站| 国产在线精品国自产拍免费| 日韩视频免费观看高清完整版在线观看| 亚洲成在人线免费| 欧美精品v国产精品v日韩精品| 亚洲国产毛片aaaaa无费看 | 91国模大尺度私拍在线视频| 中文字幕中文乱码欧美一区二区| 成人免费视频网站在线观看| 久久九九国产精品| 成人精品鲁一区一区二区| 国产精品无码永久免费888| 国产成人在线色|