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

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

?? tapdrvr.c

?? 一個Windows下的Linux專用虛擬機
?? C
?? 第 1 頁 / 共 5 頁
字號:
		{		  int mtu = parm->ParameterData.IntegerData;		  if (mtu < MINIMUM_MTU)		    mtu = MINIMUM_MTU;		  if (mtu > MAXIMUM_MTU)		    mtu = MAXIMUM_MTU;		  l_Adapter->m_MTU = mtu;		}	    }	}	/* Read Media Status setting from registry */	{	  NDIS_STRING key = NDIS_STRING_CONST("MediaStatus");	  NdisReadConfiguration (&status, &parm, configHandle,				 &key, NdisParameterInteger);	  if (status == NDIS_STATUS_SUCCESS)	    {	      if (parm->ParameterType == NdisParameterInteger)		{		  if (parm->ParameterData.IntegerData)		    {		      l_Adapter->m_MediaStateAlwaysConnected = TRUE;		      l_Adapter->m_MediaState = TRUE;		    }		}	    }	}#if ENABLE_NONADMIN	/* Read AllowNonAdmin setting from registry */	{	  NDIS_STRING key = NDIS_STRING_CONST("AllowNonAdmin");	  NdisReadConfiguration (&status, &parm, configHandle,				 &key, NdisParameterInteger);	  if (status == NDIS_STATUS_SUCCESS)	    {	      if (parm->ParameterType == NdisParameterInteger)		{		  if (parm->ParameterData.IntegerData)		    {			enable_non_admin = TRUE;		    }		}	    }	}#endif	/* Read optional MAC setting from registry */	{	  NDIS_STRING key = NDIS_STRING_CONST("MAC");	  ANSI_STRING mac_string;	  NdisReadConfiguration (&status, &parm, configHandle,				 &key, NdisParameterString);	  if (status == NDIS_STATUS_SUCCESS)	    {	      if (parm->ParameterType == NdisParameterString)		{		  if (RtlUnicodeStringToAnsiString (&mac_string, &parm->ParameterData.StringData, TRUE) == STATUS_SUCCESS)		    {		      l_MacFromRegistry = ParseMAC (l_Adapter->m_MAC, mac_string.Buffer);		      RtlFreeAnsiString (&mac_string);		    }		}	    }	}	NdisCloseConfiguration (configHandle);    DEBUGP (("[%s] MTU=%d\n", NAME (l_Adapter), l_Adapter->m_MTU));  }  //==================================  // Store and update MAC address info  //==================================  if (!l_MacFromRegistry)    GenerateRandomMac (l_Adapter->m_MAC, NAME (l_Adapter));  DEBUGP (("[%s] Using MAC %x:%x:%x:%x:%x:%x\n",	    NAME (l_Adapter),	    l_Adapter->m_MAC[0], l_Adapter->m_MAC[1], l_Adapter->m_MAC[2],	    l_Adapter->m_MAC[3], l_Adapter->m_MAC[4], l_Adapter->m_MAC[5]));  //==================  // Set broadcast MAC  //==================  {    int i;    for (i = 0; i < sizeof (MACADDR); ++i)      l_Adapter->m_MAC_Broadcast[i] = 0xFF;  }  //====================================  // Initialize TAP device  //====================================  {    NDIS_STATUS tap_status;    tap_status = CreateTapDevice (&l_Adapter->m_Extension, NAME (l_Adapter));    if (tap_status != NDIS_STATUS_SUCCESS)      {	AdapterFreeResources (l_Adapter);	return tap_status;      }  }  if (!AddAdapterToInstanceList (l_Adapter))    {      NOTE_ERROR ();      TapDeviceFreeResources (&l_Adapter->m_Extension);      AdapterFreeResources (l_Adapter);      return NDIS_STATUS_RESOURCES;    }  l_Adapter->m_InterfaceIsRunning = TRUE;#if ENABLE_NONADMIN  if (enable_non_admin)    AllowNonAdmin (&l_Adapter->m_Extension);#endif  return NDIS_STATUS_SUCCESS;}VOIDAdapterHalt (IN NDIS_HANDLE p_AdapterContext){  BOOLEAN status;  TapAdapterPointer l_Adapter = (TapAdapterPointer) p_AdapterContext;  NOTE_ERROR ();  l_Adapter->m_InterfaceIsRunning = FALSE;  DEBUGP (("[%s] is being halted\n", NAME (l_Adapter)));    DestroyTapDevice (&l_Adapter->m_Extension);  // Free resources  DEBUGP (("[%s] Freeing Resources\n", NAME (l_Adapter)));  AdapterFreeResources (l_Adapter);  status = RemoveAdapterFromInstanceList (l_Adapter);  DEBUGP (("[TAP] RemoveAdapterFromInstanceList returned %d\n", (int) status));  DEBUGP (("[TAP] version [%d.%d] %s %s AdapterHalt returning\n",	   TAP_DRIVER_MAJOR_VERSION,	   TAP_DRIVER_MINOR_VERSION,	   __DATE__,	   __TIME__));}VOIDAdapterFreeResources (TapAdapterPointer p_Adapter){  MYASSERT (!p_Adapter->m_CalledAdapterFreeResources);  p_Adapter->m_CalledAdapterFreeResources = TRUE;  if (p_Adapter->m_NameAnsi.Buffer)    RtlFreeAnsiString (&p_Adapter->m_NameAnsi);    if (p_Adapter->m_RegisteredAdapterShutdownHandler)    NdisMDeregisterAdapterShutdownHandler (p_Adapter->m_MiniportAdapterHandle);  if (p_Adapter->m_MCLockAllocated)    NdisFreeSpinLock (&l_Adapter->m_MCLock);}VOIDDestroyTapDevice (TapExtensionPointer p_Extension){  DEBUGP (("[%s] Destroying tap device\n", p_Extension->m_TapName));  //======================================  // Let clients know we are shutting down  //======================================  p_Extension->m_TapIsRunning = FALSE;  p_Extension->m_TapOpens = 0;  p_Extension->m_Halt = TRUE;  //=====================================  // If we are concurrently executing in  // TapDeviceHook or AdapterTransmit,  // give those calls time to finish.  // Note that we must be running at IRQL  // < DISPATCH_LEVEL in order to call  // NdisMSleep.  //=====================================  NdisMSleep (500000);  //===========================================================  // Exhaust IRP and packet queues.  Any pending IRPs will  // be cancelled, causing user-space to get this error  // on overlapped reads:  //   The I/O operation has been aborted because of either a  //   thread exit or an application request.   (code=995)  // It's important that user-space close the device handle  // when this code is returned, so that when we finally  // do a NdisMDeregisterDevice, the device reference count  // is 0.  Otherwise the driver will not unload even if the  // the last adapter has been halted.  //===========================================================  FlushQueues (p_Extension);  NdisMSleep (500000); // give user space time to respond to IRP cancel  TapDeviceFreeResources (p_Extension);}VOIDTapDeviceFreeResources (TapExtensionPointer p_Extension){  MYASSERT (p_Extension);  MYASSERT (!p_Extension->m_CalledTapDeviceFreeResources);  p_Extension->m_CalledTapDeviceFreeResources = TRUE;  if (p_Extension->m_PacketQueue)    QueueFree (p_Extension->m_PacketQueue);  if (p_Extension->m_IrpQueue)    QueueFree (p_Extension->m_IrpQueue);  if (p_Extension->m_CreatedUnicodeLinkName)    RtlFreeUnicodeString (&p_Extension->m_UnicodeLinkName);  //==========================================================  // According to DDK docs, the device is not actually deleted  // until its reference count falls to zero.  That means we  // still need to gracefully fail TapDeviceHook requests  // after this point, otherwise ugly things would happen if  // the device was disabled (e.g. in the network connections  // control panel) while a userspace app still held an open  // file handle to it.  //==========================================================    if (p_Extension->m_TapDevice)    {      BOOLEAN status;      status = (NdisMDeregisterDevice (p_Extension->m_TapDeviceHandle)		== NDIS_STATUS_SUCCESS);      DEBUGP (("[TAP] Deregistering TAP device, status=%d\n", (int)status));    }  if (p_Extension->m_TapName)    MemFree (p_Extension->m_TapName, NAME_BUFFER_SIZE);    if (p_Extension->m_AllocatedSpinlocks)    NdisFreeSpinLock (&p_Extension->m_QueueLock);}//========================================================================//                             Tap Device Initialization//========================================================================NDIS_STATUSCreateTapDevice (TapExtensionPointer p_Extension, const char *p_Name){# define SIZEOF_DISPATCH (sizeof(PDRIVER_DISPATCH) * (IRP_MJ_MAXIMUM_FUNCTION + 1))  PDRIVER_DISPATCH *l_Dispatch = NULL;  ANSI_STRING l_TapString, l_LinkString;  UNICODE_STRING l_TapUnicode;  BOOLEAN l_FreeTapUnicode = FALSE;  NTSTATUS l_Status, l_Return = NDIS_STATUS_SUCCESS;  const char *l_UsableName;  DEBUGP (("[TAP] version [%d.%d] creating tap device: %s\n",	   TAP_DRIVER_MAJOR_VERSION,	   TAP_DRIVER_MINOR_VERSION,	   p_Name));  NdisZeroMemory (p_Extension, sizeof (TapExtension));  INIT_MUTEX (&p_Extension->m_OpenCloseMutex);  l_LinkString.Buffer = NULL;  l_TapString.Buffer = NULL;  l_TapString.MaximumLength = l_LinkString.MaximumLength = NAME_BUFFER_SIZE;  //=======================================  // Set TAP device entry points  //=======================================  if ((l_Dispatch = MemAlloc (SIZEOF_DISPATCH, TRUE)) == NULL)    {      DEBUGP (("[%s] couldn't alloc TAP dispatch table\n", p_Name));      l_Return = NDIS_STATUS_RESOURCES;      goto cleanup;    }  l_Dispatch[IRP_MJ_DEVICE_CONTROL] = TapDeviceHook;  l_Dispatch[IRP_MJ_READ] = TapDeviceHook;  l_Dispatch[IRP_MJ_WRITE] = TapDeviceHook;  l_Dispatch[IRP_MJ_CREATE] = TapDeviceHook;  l_Dispatch[IRP_MJ_CLOSE] = TapDeviceHook;  //==================================  // Find the beginning of the GUID  //==================================  l_UsableName = p_Name;  while (*l_UsableName != '{')    {      if (*l_UsableName == '\0')	{	  DEBUGP (("[%s] couldn't find leading '{' in name\n", p_Name));	  l_Return = NDIS_STATUS_RESOURCES;	  goto cleanup;	}      ++l_UsableName;    }  //==================================  // Allocate pool for TAP device name  //==================================  if ((p_Extension->m_TapName = l_TapString.Buffer =       MemAlloc (NAME_BUFFER_SIZE, TRUE)) == NULL)    {      DEBUGP (("[%s] couldn't alloc TAP name buffer\n", p_Name));      l_Return = NDIS_STATUS_RESOURCES;      goto cleanup;    }  //================================================  // Allocate pool for TAP symbolic link name buffer  //================================================  if ((l_LinkString.Buffer =       MemAlloc (NAME_BUFFER_SIZE, TRUE)) == NULL)    {      DEBUGP (("[%s] couldn't alloc TAP symbolic link name buffer\n",	       p_Name));      l_Return = NDIS_STATUS_RESOURCES;      goto cleanup;    }  //=======================================================  // Set TAP device name  //=======================================================  l_Status = RtlStringCchPrintfExA    (l_TapString.Buffer,     l_TapString.MaximumLength,     NULL,     NULL,     STRSAFE_FILL_BEHIND_NULL | STRSAFE_IGNORE_NULLS,     "%s%s%s",     SYSDEVICEDIR,     l_UsableName,     TAPSUFFIX);  if (l_Status != STATUS_SUCCESS)    {      DEBUGP (("[%s] couldn't format TAP device name\n",	       p_Name));      l_Return = NDIS_STATUS_RESOURCES;      goto cleanup;    }  l_TapString.Length = (USHORT) strlen (l_TapString.Buffer);  DEBUGP (("TAP DEV NAME: '%s'\n", l_TapString.Buffer));  //=======================================================  // Set TAP link name  //=======================================================  l_Status = RtlStringCchPrintfExA    (l_LinkString.Buffer,     l_LinkString.MaximumLength,     NULL,     NULL,     STRSAFE_FILL_BEHIND_NULL | STRSAFE_IGNORE_NULLS,     "%s%s%s",     USERDEVICEDIR,     l_UsableName,     TAPSUFFIX);  if (l_Status != STATUS_SUCCESS)    {      DEBUGP (("[%s] couldn't format TAP device symbolic link\n",	       p_Name));      l_Return = NDIS_STATUS_RESOURCES;      goto cleanup;    }  l_LinkString.Length = (USHORT) strlen (l_LinkString.Buffer);  DEBUGP (("TAP LINK NAME: '%s'\n", l_LinkString.Buffer));  //==================================================  // Convert strings to unicode  //==================================================  if (RtlAnsiStringToUnicodeString (&l_TapUnicode, &l_TapString, TRUE) !=      STATUS_SUCCESS)    {      DEBUGP (("[%s] couldn't alloc TAP unicode name buffer\n",		p_Name));      l_Return = NDIS_STATUS_RESOURCES;      goto cleanup;    }  l_FreeTapUnicode = TRUE;  if (RtlAnsiStringToUnicodeString      (&p_Extension->m_UnicodeLinkName, &l_LinkString, TRUE)      != STATUS_SUCCESS)    {      DEBUGP	(("[%s] Couldn't allocate unicode string for symbolic link name\n",	 p_Name));      l_Return = NDIS_STATUS_RESOURCES;      goto cleanup;    }  p_Extension->m_CreatedUnicodeLinkName = TRUE;  //==================================================  // Create new TAP device with symbolic  // link and associate with adapter.  //==================================================  l_Status = NdisMRegisterDevice    (g_NdisWrapperHandle,     &l_TapUnicode,     &p_Extension->m_UnicodeLinkName,     l_Dispatch,     &p_Extension->m_TapDevice,     &p_Extension->m_TapDeviceHandle     );  if (l_Status != STATUS_SUCCESS)    {      DEBUGP (("[%s] couldn't be created\n", p_Name));      l_Return = NDIS_STATUS_RESOURCES;      goto cleanup;    }  /* Set TAP device flags */  p_Extension->m_TapDevice->Flags |= DO_DIRECT_IO;  //========================================================  // Initialize Packet and IRP queues.  //  // The packet queue is used to buffer data which has been  // "transmitted" by the virtual NIC, before user space  // has had a chance to read it.  //  // The IRP queue is used to buffer pending I/O requests  // from userspace, i.e. read requests on the TAP device  // waiting for the system to "transmit" something through  // the virtual NIC.  //  // Basically, packets in the packet queue are used

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产黄人亚洲片| 六月丁香综合在线视频| 午夜电影久久久| 国产美女精品人人做人人爽| 欧美丝袜第三区| 国产欧美在线观看一区| 日韩高清一级片| 色综合久久久久综合体桃花网| 日韩亚洲欧美成人一区| 一区2区3区在线看| 国产亚洲欧美色| 色诱亚洲精品久久久久久| 日韩一二三四区| 欧美一级淫片007| 国产精品理伦片| 狠狠色伊人亚洲综合成人| 一本高清dvd不卡在线观看| 久久色在线视频| 免费成人在线网站| 欧美一区二区三区性视频| 亚洲精品一二三| 91污片在线观看| 国产精品久久久久精k8| 成人av免费观看| 国产欧美视频一区二区| 国产一区二区免费在线| 26uuu亚洲综合色| 国产福利91精品| 久久亚区不卡日本| 亚洲精品乱码久久久久久| 国产精品―色哟哟| 在线看国产一区| 亚洲美女一区二区三区| 99久久免费国产| 亚洲色图.com| 色噜噜久久综合| 亚洲va国产天堂va久久en| 欧美日韩综合一区| 日韩av午夜在线观看| 6080午夜不卡| 久久激五月天综合精品| 久久综合av免费| 成人99免费视频| 一区二区三区四区不卡在线 | 粗大黑人巨茎大战欧美成人| 久久久噜噜噜久噜久久综合| 国产精品99久久久久久久vr| 国产女人水真多18毛片18精品视频| 高清在线成人网| 91国偷自产一区二区三区观看 | 精品无码三级在线观看视频| 91精品国产入口在线| 久久精品99久久久| 欧美国产精品v| 日本高清不卡aⅴ免费网站| 天天色综合成人网| 久久久久久影视| 日本韩国欧美三级| 美女视频免费一区| 国产日产欧产精品推荐色| 91香蕉视频污| 麻豆精品一二三| 国产精品久久久久9999吃药| 在线观看一区二区精品视频| 欧美bbbbb| 最新国产成人在线观看| 欧美老女人第四色| 国产91精品入口| 三级欧美在线一区| 国产精品久久久久aaaa| 在线观看区一区二| 国产精品电影一区二区| 欧美日韩免费观看一区二区三区| 天天操天天综合网| 亚洲国产精品t66y| 欧美日韩国产免费一区二区| 丁香六月综合激情| 日韩激情一区二区| 亚洲欧美日本在线| wwwwxxxxx欧美| 欧美性生活一区| 成人动漫一区二区在线| 六月婷婷色综合| 亚洲地区一二三色| 自拍偷拍国产亚洲| 久久精品一区二区三区不卡牛牛 | 亚洲毛片av在线| 2020国产成人综合网| 欧美日韩成人一区二区| 97久久久精品综合88久久| 国产麻豆视频一区| 美国欧美日韩国产在线播放| 色视频成人在线观看免| 日韩一区二区三区免费观看| 精品影院一区二区久久久| 亚洲综合在线观看视频| 欧美韩国日本一区| 精品对白一区国产伦| 在线观看91精品国产麻豆| 色婷婷激情久久| hitomi一区二区三区精品| 国产精品一品视频| 久久国产婷婷国产香蕉| 日欧美一区二区| 午夜精品久久久| 亚洲www啪成人一区二区麻豆| 亚洲天堂久久久久久久| 国产精品久久久久久久浪潮网站 | 在线观看www91| 91精品办公室少妇高潮对白| 本田岬高潮一区二区三区| 国产精品 日产精品 欧美精品| 精品无码三级在线观看视频| 久久国产综合精品| 国产综合久久久久久鬼色| 日韩黄色一级片| 欧美福利一区二区| 99re成人精品视频| 91在线国内视频| 欧洲激情一区二区| 欧美日韩午夜在线视频| 欧美欧美欧美欧美首页| 在线综合亚洲欧美在线视频| 91精品福利在线一区二区三区 | 日韩电影一二三区| 日韩成人午夜精品| 久久精品国产成人一区二区三区| 精品一区二区在线观看| 国产经典欧美精品| 99精品在线观看视频| 91福利视频久久久久| 欧美性极品少妇| 91精品国产综合久久福利| 精品久久久久久久久久久院品网 | 在线综合视频播放| 91精品1区2区| 欧美日韩国产区一| 精品国产三级a在线观看| 久久女同互慰一区二区三区| 国产精品国产精品国产专区不片 | 日本一区二区三区四区| 亚洲精品欧美专区| 青青草国产成人av片免费| 国产麻豆精品95视频| 色偷偷久久一区二区三区| 欧美日韩精品久久久| 久久久亚洲午夜电影| 亚洲美女视频一区| 精品一区二区在线播放| 91丨九色porny丨蝌蚪| 日韩一区二区三区免费观看| 欧美韩日一区二区三区| 丝袜美腿亚洲综合| 成人97人人超碰人人99| 日韩视频国产视频| 最新久久zyz资源站| 免费看欧美美女黄的网站| 不卡视频一二三四| 91.xcao| 国产欧美日韩在线| 日日摸夜夜添夜夜添亚洲女人| 高清成人免费视频| 欧美一区二区在线不卡| 国产精品久久久久久久久免费丝袜 | 26uuuu精品一区二区| 亚洲女厕所小便bbb| 久久激情五月婷婷| 精品视频在线免费看| 日本一区二区三区在线不卡| 丝袜亚洲另类欧美综合| 91在线观看地址| 久久免费看少妇高潮| 奇米影视在线99精品| 日本乱码高清不卡字幕| 欧美精彩视频一区二区三区| 热久久免费视频| 欧美三级日韩三级国产三级| 中文字幕制服丝袜成人av| 寂寞少妇一区二区三区| 欧美精品一二三四| 一区二区三区高清在线| 成人激情小说网站| 久久久蜜桃精品| 精品制服美女丁香| 91精品国产欧美一区二区成人| 欧美日韩精品系列| 五月天久久比比资源色| 日韩亚洲国产中文字幕欧美| 欧美日韩国产美| 国产精品素人视频| 精品一区二区三区香蕉蜜桃| 欧美理论片在线| 午夜精品福利一区二区三区蜜桃| 91视视频在线直接观看在线看网页在线看| 精品少妇一区二区三区在线视频| 天堂成人国产精品一区| 8v天堂国产在线一区二区| 午夜视频在线观看一区| 欧美三级乱人伦电影| 五月婷婷色综合|