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

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

?? hooked_fn.c

?? 開源的防火墻代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	OUT	PNDIS_STATUS			OpenErrorStatus,
	OUT	PNDIS_HANDLE			NdisBindingHandle,
	OUT	PUINT					SelectedMediumIndex,
	IN	PNDIS_MEDIUM			MediumArray,
	IN	UINT					MediumArraySize,
	IN	NDIS_HANDLE				NdisProtocolHandle,
	IN	NDIS_HANDLE				ProtocolBindingContext,
	IN	PNDIS_STRING			AdapterName,
	IN	UINT					OpenOptions,
	IN	PSTRING					AddressingInformation OPTIONAL)
{
	struct PROTOCOL_CHARS *pchars = NULL;
	KIRQL irql;
	struct ADAPTER_PROTOCOL *adapter = NULL;
	ULONG size;
	UINT i;
	NTSTATUS status;
	
	// working at PASSIVE_LEVEL - can use UNICODE %S to output (see DbgPrint documentation)
	KdPrint(("[ndis_hk] new_NdisOpenAdapter: %S (context = 0x%x)\n", AdapterName->Buffer,
		ProtocolBindingContext));

	__try {
		
		/*
		 * search MeduimArray for NdisMedium802_3 or NdisMediumWan
		 */
		
		for (i = 0; i < MediumArraySize; i++) {
			if (MediumArray[i] == NdisMedium802_3 || MediumArray[i] == NdisMediumWan)
				break;
		}
		
		if (i >= MediumArraySize) {
			
			// not found
			KdPrint(("[ndis_hk] new_NdisOpenAdapter: unsupported medium for this adapter\n"));
			
			// anyway call original handler
			*Status = NDIS_STATUS_SUCCESS;
			__leave;
		}
		
		// get pchars
		pchars = (struct PROTOCOL_CHARS *)get_av(NdisProtocolHandle, PROTOCOL_TO_PCHARS, &irql);
		if (pchars == NULL) {
			
			KdPrint(("[ndis_hk] new_NdisOpenAdapter: get_av(PROTOCOL_TO_PCHARS)!\n"));
			
			// This protocol is not for us. Call original handler but don't call our function.
			*Status = NDIS_STATUS_SUCCESS;
			__leave;
		}
		
		// allocate ADAPTER_PROTOCOL
		size = sizeof(*adapter) + (wcslen(AdapterName->Buffer) + 1) * sizeof(wchar_t);
		adapter = (struct ADAPTER_PROTOCOL *)malloc_np(size);
		if (adapter == NULL) {
			
			KdPrint(("[ndis_hk] new_NdisOpenAdapter: get_av(PROTOCOL_TO_PCHARS)!\n"));
			
			*Status = NDIS_STATUS_RESOURCES;
			__leave;
		}
		memset(adapter, 0, size);
		
		// save copy of AdapterName
		wcscpy(adapter->adapter_name, AdapterName->Buffer);
		
		// save ProtocolBindingContext
		adapter->ProtocolBindingContext = ProtocolBindingContext;
		
		// link adapter with pchars
		adapter->next = pchars->adapter;
		pchars->adapter = adapter;
		
		adapter->pchars = pchars;
		
		if (MediumArraySize > 1) {
			// save temporary pointers
			adapter->pMediumArray = MediumArray;
			adapter->pSelectedMediumIndex = SelectedMediumIndex;
		} else {
			// we have only one index and one chance to choose. do it now.
			adapter->medium = MediumArray[0];
		}
		
		adapter->pNdisBindingHandle = NdisBindingHandle;	// in completion we'll have NdisBindingHandler here
		
		// that's all
		*Status = NDIS_STATUS_SUCCESS;
		
	} __except((*Status = GetExceptionCode(), EXCEPTION_EXECUTE_HANDLER)) {
		KdPrint(("[ndis_hk] new_NdisOpenAdapter: exception 0x%x!\n", *Status));
	}
	
	// cleanup
	if (pchars != NULL)
		KeReleaseSpinLock(&g_av_hash_guard, irql);

	if (*Status != NDIS_STATUS_SUCCESS)
		return;			// no need to call original handler - our errors

	// call original handler
	HOOKED_OLD_FN(NdisOpenAdapter)(Status, OpenErrorStatus, NdisBindingHandle,
		SelectedMediumIndex, MediumArray, MediumArraySize, NdisProtocolHandle,
		ProtocolBindingContext, AdapterName, OpenOptions, AddressingInformation);

	KdPrint(("[ndis_hk] new_NdisOpenAdapter: 0x%x\n", *Status));

	if (*Status == NDIS_STATUS_SUCCESS) {

		/*
		 * support only 802.3 and Wan adapters
		 */
		if (MediumArray[*SelectedMediumIndex] == NdisMedium802_3 ||
			MediumArray[*SelectedMediumIndex] == NdisMediumWan) {

			/*
			 * a little magic: call completion with NDIS_STATUS_PENDING
			 * it means don't call original completion and return status to us
			 */

			if (pchars != NULL)
				new_OpenAdapterCompleteHandler(pchars, ProtocolBindingContext, NDIS_STATUS_PENDING, 0);

			// don't delete adapter
			adapter = NULL;
		}

	} else if (*Status == NDIS_STATUS_PENDING) {

		// don't delete adapter
		adapter = NULL;

	}

	if (adapter != NULL) {

		/* destroy created ADAPTER_PROTOCOL */

		// unlink it from pchars
		pchars = (struct PROTOCOL_CHARS *)get_av(NdisProtocolHandle, PROTOCOL_TO_PCHARS, &irql);
		if (pchars != NULL) {
			// find adapter by pointer
			struct ADAPTER_PROTOCOL *a, *prev_a;
			for (prev_a = NULL, a = pchars->adapter; a != NULL; a = a->next) {
				if (a == adapter) {
					if (prev_a == NULL)
						pchars->adapter = adapter->next;
					else
						prev_a->next = adapter->next;
				}
				prev_a = a;
			}
			KeReleaseSpinLock(&g_av_hash_guard, irql);
		}
	
		// and free
		free(adapter);
	}
}

/**
 * Hooked NdisCloseAdapter.
 * Finds and frees ADAPTER_PROTOCOL by NdisBindingHandle
 */
VOID
new_NdisCloseAdapter(
	OUT	PNDIS_STATUS			Status,
	IN	NDIS_HANDLE				NdisBindingHandle)
{
	struct ADAPTER_PROTOCOL *adapter, *a, *prev_a;
	KIRQL irql;
	struct PROTOCOL_CHARS *pchars;

	__try {
		
		// get adapter by NdisBindingHandle
		adapter = get_av(NdisBindingHandle, BINDING_TO_ADAPTER, &irql);
		if (adapter == NULL) {
			KdPrint(("[ndis_hk] new_NdisCloseAdapter: get_av(BINDING_TO_ADAPTER)!\n"));
			__leave;
		}
		
		// unlink it from pchars
		pchars = adapter->pchars;
		for (prev_a = NULL, a = pchars->adapter; a != NULL; a = a->next) {
			if (a == adapter) {
				if (prev_a == NULL)
					pchars->adapter = adapter->next;
				else
					prev_a->next = adapter->next;
			}
			prev_a = a;
		}
		
		// delete adapter
		del_av(NdisBindingHandle, BINDING_TO_ADAPTER, TRUE);
		
	} __finally {
		if (adapter != NULL)
			KeReleaseSpinLock(&g_av_hash_guard, irql);
	}

	// call original handler
	HOOKED_OLD_FN(NdisCloseAdapter)(Status, NdisBindingHandle);
}

/*
 * --- NDIS functions from NDIS_PROTOCOL_CHARACTERISTICS ---
 */


/**
 * Hooked OpenAdapterCompleteHandler from NDIS_PROTOCOL_CHARACTERISTICS.
 * Function can be called using ASM stub in case of pending of NdisOpenAdapter or
 * function can be called by hooked NdisOpenAdapter when NdisOpenAdapter returns NDIS_STATUS_SUCCESS.
 * In last case Status == NDIS_STATUS_PENDING
 */
VOID
new_OpenAdapterCompleteHandler(
	struct PROTOCOL_CHARS *pchars,				/* added by ASM stub */
	IN NDIS_HANDLE  ProtocolBindingContext,
    IN NDIS_STATUS  Status,
    IN NDIS_STATUS  OpenErrorStatus)
{
	struct ADAPTER_PROTOCOL *adapter;

	_CHECK_PCHARS(pchars);

	KdPrint(("[ndis_hk] new_OpenAdapterComplete: 0x%x (context = 0x%x)\n", Status,
		ProtocolBindingContext));
	
	__try {

		if (Status != NDIS_STATUS_SUCCESS &&
			Status != NDIS_STATUS_PENDING)		// PENGING is a _magic_ value see above
			__leave;
		
		// get adapter
		for (adapter = pchars->adapter; adapter != NULL; adapter = adapter->next) {
			if (adapter->ProtocolBindingContext == ProtocolBindingContext)
				break;
		}
		
		if (adapter == NULL) {
			
			KdPrint(("[ndis_hk] new_OpenAdapterComplete: adapter not found\n"));
			
			// This adapter is not for us.
			__leave;
		}
		
		// save stuff from temporary storage & set temporary storage to zero
		
		adapter->NdisBindingHandle = *(adapter->pNdisBindingHandle);
		adapter->pNdisBindingHandle = NULL;
		
		if (adapter->pMediumArray != NULL &&
			adapter->pSelectedMediumIndex != NULL) {
			
			adapter->medium = adapter->pMediumArray[*(adapter->pSelectedMediumIndex)];
			
			adapter->pMediumArray = NULL;
			adapter->pSelectedMediumIndex = NULL;
		}
		
		if (adapter->medium == NdisMedium802_3 || adapter->medium == NdisMediumWan) {
			PNDIS_OPEN_BLOCK nob;
			
			// assign adapter index
			adapter->adapter_index = add_adapter(adapter->adapter_name);
			if (adapter->adapter_index == 0) {
				KdPrint(("[ndis_hk] new_OpenAdapterComplete: add_adapter!\n"));
				// panic()?
			}
			
			// save mapping NdisBindingHandle -> struct ADAPTER_PROTOCOL
			if (add_av(adapter->NdisBindingHandle, adapter, BINDING_TO_ADAPTER, FALSE) != STATUS_SUCCESS) {
				KdPrint(("[ndis_hk] new_OpenAdapterComplete: add_av!\n"));
				// panic()?
			}
			
			// can't use UNICODE %S to output (see DbgPrint documentation)
			KdPrint(("[ndis_hk] new_OpenAdapterComplete: (index = %d)\n",
				adapter->adapter_index));
			
			// and now hook SendHandler & SendPacketsHandler in (PNDIS_OPEN_BLOCK)NdisBindingHandle
			nob = (PNDIS_OPEN_BLOCK)adapter->NdisBindingHandle;
			
			adapter->old_SendHandler = nob->SendHandler;
			GENERATE_ASM_STUB(adapter, SendHandler);
			nob->SendHandler = (SEND_HANDLER)adapter->asm_SendHandler;
			
			KdPrint(("[ndis_hk] new_OpenAdapterCompleteHandler: SendHandler: old 0x%x new 0x%x\n",
				adapter->old_SendHandler, adapter->asm_SendHandler));
			
			if (PCHARS_OLD_CHARS(pchars)->MajorNdisVersion >= 4) {
				
				adapter->old_SendPacketsHandler = nob->SendPacketsHandler;
				GENERATE_ASM_STUB(adapter, SendPacketsHandler);
				nob->SendPacketsHandler = (SEND_PACKETS_HANDLER)adapter->asm_SendPacketsHandler;
				
				KdPrint(("[ndis_hk] new_OpenAdapterCompleteHandler: SendPacketsHandler: old 0x%x new 0x%x\n",
					adapter->old_SendPacketsHandler, adapter->asm_SendPacketsHandler));
			}
			
			// and NdisTransferData too
			adapter->old_TransferDataHandler = nob->TransferDataHandler;
			GENERATE_ASM_STUB(adapter, TransferDataHandler);
			nob->TransferDataHandler = (TRANSFER_DATA_HANDLER)adapter->asm_TransferDataHandler;
		}
		
	} __finally {

		if (Status != NDIS_STATUS_PENDING) {
			// call original handler anyway
			PCHARS_OLD_CHARS(pchars)->OpenAdapterCompleteHandler(ProtocolBindingContext,
				Status, OpenErrorStatus);
		}
	
	}
}

/**
 * Hooked ReceiveHandler from NDIS_PROTOCOL_CHARACTERISTICS.
 * Function is called when NDIS miniport adapter indicated incoming data using old scheme.
 * If we get LookaheadBuffer smaller than PacketSize (for old PIO based network cards) we
 * call original NdisTransferData manually to get the whole packet.
 * We call original ReceiveHandler with our buffer as MacReceiveContext. If protocol driver want to
 * call hooked NdisTransferData we extract data for him from this buffer.
 */
NDIS_STATUS
new_ReceiveHandler(
	struct PROTOCOL_CHARS *pchars,				/* added by ASM stub */
    IN NDIS_HANDLE  ProtocolBindingContext,
    IN NDIS_HANDLE  MacReceiveContext,
    IN PVOID  HeaderBuffer,
    IN UINT  HeaderBufferSize,
    IN PVOID  LookaheadBuffer,
    IN UINT  LookaheadBufferSize,
    IN UINT  PacketSize)
{
	struct ADAPTER_PROTOCOL *adapter;
	BOOLEAN result = FALSE;
	NDIS_STATUS status;
	PNDIS_PACKET packet = NULL;
	PNDIS_BUFFER hdr_buffer = NULL, data_buffer = NULL;
	void *buf = NULL;
	ULONG bytes;

	_CHECK_PCHARS(pchars);
	
	__try {
		
		// get adapter
		for (adapter = pchars->adapter; adapter != NULL; adapter = adapter->next) {
			if (adapter->ProtocolBindingContext == ProtocolBindingContext)
				break;
		}
			
		if (adapter == NULL) {
			KdPrint(("[ndis_hk] new_ReceiveHandler: adapter not found!\n"));
			__leave;
		}
		
		// can't use UNICODE %S to output (see DbgPrint documentation)
		KdPrint(("[ndis_hk] new_ReceiveHandler: (%d) hdr %u; look %u; pkt %u\n",
			adapter->adapter_index,
			HeaderBufferSize, LookaheadBufferSize, PacketSize));
		
		if (LookaheadBufferSize == PacketSize) {
			// already got the whole frame!
			
			// prepare packet for filtering

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费人成精品欧美精品| 久久成人久久鬼色| 精品久久久久久久久久久久久久久久久 | 婷婷开心激情综合| 精品国产电影一区二区| 91黄色在线观看| 国产激情视频一区二区在线观看| 亚洲精品中文在线影院| 久久久久久电影| 91麻豆精品91久久久久久清纯| eeuss鲁一区二区三区| 日韩不卡一区二区| 夜夜嗨av一区二区三区四季av| 国产亚洲自拍一区| 欧美一区二区免费观在线| 日本二三区不卡| 成人午夜激情视频| 久久成人羞羞网站| 天天色天天爱天天射综合| 亚洲老司机在线| 国产欧美日韩不卡| www国产精品av| 91麻豆精品国产自产在线| 欧美亚洲丝袜传媒另类| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产精品69毛片高清亚洲| 日日嗨av一区二区三区四区| 亚洲精品国产视频| 亚洲欧洲在线观看av| 欧美国产日本韩| 国产欧美精品一区二区三区四区| 日韩欧美国产一区二区在线播放| 欧美日韩免费观看一区二区三区 | 欧美电视剧免费观看| 欧美日韩国产在线观看| 色哟哟日韩精品| 一本到不卡精品视频在线观看| 成人一区二区三区视频在线观看 | 91久久香蕉国产日韩欧美9色| 99re这里都是精品| 白白色 亚洲乱淫| 99视频超级精品| av电影天堂一区二区在线观看| 国产精品18久久久| 国产一区免费电影| 国产成人免费在线| 国产91丝袜在线观看| 国产精品亚洲视频| 高清国产一区二区| 成人精品视频一区| 99re亚洲国产精品| 91久久精品一区二区| 91福利精品第一导航| 欧美亚洲综合另类| 欧美女孩性生活视频| 欧美一区二区三区视频在线 | 精品免费国产二区三区| 久久久午夜电影| 欧美国产日韩a欧美在线观看| 中文字幕在线观看一区| 一区二区三区在线观看国产| 亚洲国产欧美在线人成| 日本怡春院一区二区| 国精产品一区一区三区mba视频 | 亚洲自拍另类综合| 丝袜国产日韩另类美女| 久久99精品国产麻豆婷婷| 国产成人精品三级| 在线亚洲精品福利网址导航| 69p69国产精品| 26uuu另类欧美| 国产精品日韩成人| 一区二区三区不卡视频在线观看| 亚洲大片一区二区三区| 国产一区二区在线影院| 91在线观看高清| 欧美精品1区2区3区| 国产视频一区二区在线观看| 有坂深雪av一区二区精品| 日韩成人午夜电影| 成人美女视频在线观看18| 精品视频免费看| 2020国产精品| 伊人色综合久久天天| 美国精品在线观看| 一本色道a无线码一区v| 欧美videos大乳护士334| |精品福利一区二区三区| 日韩电影免费在线| 91麻豆蜜桃一区二区三区| 日韩一本二本av| 《视频一区视频二区| 久久精品国产网站| 色综合久久精品| 亚洲精品一区二区三区99| 一区二区三区在线免费播放| 韩国精品久久久| 欧美视频一区在线| 欧美韩国一区二区| 久久精品国产免费看久久精品| 91麻豆福利精品推荐| 久久精品一区二区三区四区| 亚洲午夜久久久久久久久电影网| 国产成人啪午夜精品网站男同| 在线不卡欧美精品一区二区三区| 国产女主播一区| 美女www一区二区| 欧美色视频在线| 亚洲国产成人午夜在线一区| 日本aⅴ免费视频一区二区三区| 91免费看片在线观看| 久久久久久久久久久久久女国产乱| 性做久久久久久| 色婷婷一区二区| 国产清纯白嫩初高生在线观看91| 美日韩一区二区三区| 在线观看av一区| 国产精品久久久久7777按摩| 国模套图日韩精品一区二区| 欧美一区二区三区系列电影| 亚洲黄色在线视频| 91视频在线看| 国产精品剧情在线亚洲| 国产99久久久久| 国产午夜精品久久久久久久 | 亚洲一区二区三区精品在线| eeuss影院一区二区三区| 亚洲国产成人午夜在线一区| 国产精品一区免费在线观看| 欧美不卡一二三| 首页国产欧美久久| 欧美日韩免费观看一区二区三区| 亚洲另类中文字| 在线影视一区二区三区| 亚洲三级在线观看| 91丨porny丨最新| 一区二区三区.www| 在线精品国精品国产尤物884a| 亚洲日本va午夜在线影院| 99国产精品久久久久久久久久久| 国产精品久久久久久亚洲伦| 99久久伊人久久99| 亚洲欧美日韩国产手机在线| 色婷婷久久99综合精品jk白丝| 一区二区三区免费观看| 在线看国产一区二区| 性欧美大战久久久久久久久| 欧美日本在线观看| 美国精品在线观看| 久久精品欧美日韩精品 | 555www色欧美视频| 免费人成黄页网站在线一区二区| 欧美电影免费观看高清完整版 | 国产精品国产精品国产专区不蜜| av不卡在线播放| 亚洲一区免费观看| 欧美一区二区在线免费观看| 极品少妇一区二区| 中文字幕精品—区二区四季| www.在线欧美| 亚洲成人午夜电影| 欧美成人精精品一区二区频| 国产91丝袜在线观看| 亚洲欧美另类小说| 日韩欧美专区在线| 成人涩涩免费视频| 一区二区三区在线观看动漫| 欧美一区二区三级| 国产美女在线观看一区| 国产精品久99| 欧美挠脚心视频网站| 久久99精品国产.久久久久| 国产精品激情偷乱一区二区∴| 欧美自拍偷拍一区| 精品中文字幕一区二区| 亚洲国产成人在线| 欧美午夜在线一二页| 精油按摩中文字幕久久| 亚洲人成网站色在线观看| 欧美日韩国产综合久久| 国产成人在线影院| 亚洲在线观看免费视频| 久久久久久99久久久精品网站| 在线免费观看日本一区| 国内精品久久久久影院色| 亚洲美女视频在线| 26uuuu精品一区二区| 在线精品视频一区二区三四 | 麻豆成人免费电影| 自拍偷在线精品自拍偷无码专区| 欧美电影一区二区| 成人激情av网| 奇米色777欧美一区二区| 欧美久久久久久蜜桃| 日韩专区在线视频| 亚洲国产精品激情在线观看| 91精品国产色综合久久不卡电影 | 亚洲第一福利视频在线| 国产精品欧美久久久久一区二区| 欧美日韩在线观看一区二区|