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

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

?? hooked_fn.c

?? 開(kāi)源的防火墻代碼
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
			
			NdisAllocateBuffer(&status, &hdr_buffer, g_buffer_pool, HeaderBuffer, HeaderBufferSize);
			if (status != NDIS_STATUS_SUCCESS) {
				KdPrint(("[ndis_hk] new_ReceiveHandler: NdisAllocateBuffer: 0x%x!\n", status));
				
				status = NDIS_STATUS_NOT_ACCEPTED;
				__leave;
			}
			
			NdisAllocateBuffer(&status, &data_buffer, g_buffer_pool, LookaheadBuffer, LookaheadBufferSize);
			if (status != NDIS_STATUS_SUCCESS) {
				KdPrint(("[ndis_hk] new_ReceiveHandler: NdisAllocateBuffer: 0x%x!\n", status));
				
				status = NDIS_STATUS_NOT_ACCEPTED;
				__leave;
			}
			
			NdisAllocatePacket(&status, &packet, g_packet_pool);
			if (status != NDIS_STATUS_SUCCESS) {
				KdPrint(("[ndis_hk] new_ReceiveHandler: NdisAllocatePacket: 0x%x!\n", status));
				
				status = NDIS_STATUS_NOT_ACCEPTED;
				__leave;
			}
			
			NdisChainBufferAtFront(packet, data_buffer);
			NdisChainBufferAtFront(packet, hdr_buffer);
			
			// filter it!
			
			result = filter_packet(DIRECTION_IN, adapter->adapter_index, packet);
			
		} else {
			// get the whole frame! (use NdisTransferData)
			
			// NOTE: NdisTransferData CAN return NDIS_STATUS_PENDING but pointers are only valid
			// in context of current call. That's because we're allocating memory (slow way).
			buf = malloc_np(HeaderBufferSize + PacketSize);
			if (buf == NULL) {
				KdPrint(("[ndis_hk] new_ReceiveHandler: malloc_np!\n"));
				
				status = NDIS_STATUS_NOT_ACCEPTED;
				__leave;
			}
			
			// copy header
			memcpy(buf, HeaderBuffer, HeaderBufferSize);
			
			// make buffer
			
			NdisAllocateBuffer(&status, &hdr_buffer, g_buffer_pool, buf, HeaderBufferSize);
			if (status != NDIS_STATUS_SUCCESS) {
				KdPrint(("[ndis_hk] new_ReceiveHandler: NdisAllocateBuffer: 0x%x!\n", status));
				
				status = NDIS_STATUS_NOT_ACCEPTED;
				__leave;
			}
			
			NdisAllocateBuffer(&status, &data_buffer, g_buffer_pool, (char *)buf + HeaderBufferSize, PacketSize);
			if (status != NDIS_STATUS_SUCCESS) {
				KdPrint(("[ndis_hk] new_ReceiveHandler: NdisAllocateBuffer: 0x%x!\n", status));
				
				status = NDIS_STATUS_NOT_ACCEPTED;
				__leave;
			}
			
			NdisAllocatePacket(&status, &packet, g_packet_pool);
			if (status != NDIS_STATUS_SUCCESS) {
				KdPrint(("[ndis_hk] new_ReceiveHandler: NdisAllocatePacket: 0x%x!\n", status));
				
				status = NDIS_STATUS_NOT_ACCEPTED;
				__leave;
			}
			
			NdisChainBufferAtFront(packet, data_buffer);
			
			PROTOCOL_RESERVED(packet)->buffer = hdr_buffer;		// save hdr_buffer for completion
			
			// call _original_ NdisTransferData (see ndis.h for definition of NdisTransferData)
			
			status = adapter->old_TransferDataHandler(
				((PNDIS_OPEN_BLOCK)(adapter->NdisBindingHandle))->MacBindingHandle,
				MacReceiveContext, 0, PacketSize, packet, &bytes);
			
			if (status == NDIS_STATUS_SUCCESS) {
				// chain header at the first of packet
				NdisChainBufferAtFront(packet, hdr_buffer);
				
				// got the whole packet for filter!
				result = filter_packet(DIRECTION_IN, adapter->adapter_index, packet);
				
			} else if (status == NDIS_STATUS_PENDING) {
				result = FALSE;	// wait for NdisTransferDataComplete to be called
				status = NDIS_STATUS_SUCCESS;
				
				// don't free packet and buffers
				buf = NULL;
				hdr_buffer = NULL;
				data_buffer = NULL;
				packet = NULL;
				
			} else
				result = FALSE;	// drop the packet
			
		}
		
	} __except((status = GetExceptionCode(), EXCEPTION_EXECUTE_HANDLER)) {

		KdPrint(("[ndis_hk] new_ReceiveHandler: exception 0x%x!\n", status));

		status = NDIS_STATUS_NOT_ACCEPTED;
		result = FALSE;
	}
	
	if (result) {
		// call original handler (specify fake MacReceiveContext = buf see new_TransferDataHandler)
		
		if (buf == NULL) {
			
			// LookaheadBufferSize == PacketSize
			status = PCHARS_OLD_CHARS(pchars)->ReceiveHandler(ProtocolBindingContext,
				(NDIS_HANDLE)LookaheadBuffer, HeaderBuffer, HeaderBufferSize,
				LookaheadBuffer, LookaheadBufferSize, LookaheadBufferSize);

		} else {

			// LookaheadBufferSize < PacketSize
			status = PCHARS_OLD_CHARS(pchars)->ReceiveHandler(ProtocolBindingContext,
				(NDIS_HANDLE)((char *)buf + HeaderBufferSize), HeaderBuffer, HeaderBufferSize,
				(char *)buf + HeaderBufferSize, PacketSize, PacketSize);

		}
	
	}
	
	// cleanup
	if (buf != NULL)
		free(buf);
	if (hdr_buffer != NULL)
		NdisFreeBuffer(hdr_buffer);
	if (data_buffer != NULL)
		NdisFreeBuffer(data_buffer);
	if (packet != NULL)
		NdisFreePacket(packet);

	return status;
}

/**
 * Hooked TransferDataCompleteHandler from NDIS_PROTOCOL_CHARACTERISTICS.
 * This function is called _only_ when we manually call original NdisTransferData and this
 * function returns NDIS_STATUS_PENDING. We got the whole packet and call original
 * ReceiveHandler.
 * 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.
 */
VOID
new_TransferDataCompleteHandler(
	struct PROTOCOL_CHARS *pchars,				/* added by ASM stub */
    IN NDIS_HANDLE  ProtocolBindingContext,
    IN PNDIS_PACKET  Packet,
    IN NDIS_STATUS  Status,
    IN UINT  BytesTransferred)
{
	struct ADAPTER_PROTOCOL *adapter;
	PNDIS_BUFFER hdr_buffer, data_buffer;
	void *buf;
	ULONG data_size, hdr_size;

	_CHECK_PCHARS(pchars);

	// XXX Somebody, please test the code below. I never seen it's called
	_TEST_ME_

	// get adapter
	for (adapter = pchars->adapter; adapter != NULL; adapter = adapter->next)
		if (adapter->ProtocolBindingContext == ProtocolBindingContext)
			break;

	// this function can be called only for our packet! (is it true?)
	NdisQueryPacket(Packet, NULL, NULL, &data_buffer, NULL);
	
	hdr_buffer = PROTOCOL_RESERVED(Packet)->buffer;

	// chain header buffer at the begin of packet
	NdisChainBufferAtFront(Packet, hdr_buffer);

	// A HACK! actually NDIS_BUFFER is MDL!
	buf = MmGetSystemAddressForMdl(hdr_buffer);

	NdisQueryBuffer(hdr_buffer, NULL, &hdr_size);
	NdisQueryBuffer(data_buffer, NULL, &data_size);

	if (adapter != NULL) {

		// can't use UNICODE %S to output (see DbgPrint documentation)
		KdPrint(("[ndis_hk] new_TransferDataCompleteHandler: (%d) pkt %u; bytes %u\n",
			adapter->adapter_index,
			hdr_size + data_size, BytesTransferred));

		// filter packet
		if (filter_packet(DIRECTION_IN, adapter->adapter_index, Packet)) {

			// call original receive handler with packet (don't care about status)
			PCHARS_OLD_CHARS(pchars)->ReceiveHandler(ProtocolBindingContext,
				(NDIS_HANDLE)((char *)buf + hdr_size), buf, hdr_size,
				(char *)buf + hdr_size, data_size, data_size);

		}
	}

	// cleanup
	free(buf);
	NdisFreeBuffer(hdr_buffer);
	NdisFreeBuffer(data_buffer);
	NdisFreePacket(Packet);
}

/**
 * Hooked ReceivePacketHandler from NDIS_PROTOCOL_CHARACTERISTICS.
 * NDIS miniport driver indicates packet using new-style packet transfer.
 * We got the whole packet! We can filter it and call original handler if we want.
 */
INT
new_ReceivePacketHandler(
	struct PROTOCOL_CHARS		*pchars,				/* added by ASM stub */
	IN	NDIS_HANDLE				ProtocolBindingContext,
	IN	PNDIS_PACKET			Packet)
{
	struct ADAPTER_PROTOCOL *adapter;

	_CHECK_PCHARS(pchars);

	// get adapter
	for (adapter = pchars->adapter; adapter != NULL; adapter = adapter->next)
		if (adapter->ProtocolBindingContext == ProtocolBindingContext)
			break;

	if (adapter != NULL) {

		// can't use UNICODE %S to output (see DbgPrint documentation)
		KdPrint(("[ndis_hk] new_ReceivePacketHandler: (%d)\n",
			adapter->adapter_index));
		
		if (adapter->adapter_index != 0 &&
			!filter_packet(DIRECTION_IN, adapter->adapter_index, Packet)) {
			KdPrint(("[ndis_hk] new_ReceivePacketHandler: DROP!\n"));
			return 0;
		}
		
	} else
		KdPrint(("[ndis_hk] new_ReceivePacketHandler: adapter not found!\n"));

	// call original handler
	return PCHARS_OLD_CHARS(pchars)->ReceivePacketHandler(ProtocolBindingContext, Packet);
}

/**
 * Hooked SendCompleteHandler from NDIS_PROTOCOL_CHARACTERISTICS.
 * Check if it is completion for our call of NdisSend free our buffer and don't call original handler.
 */
VOID
new_SendCompleteHandler(
	struct PROTOCOL_CHARS *pchars,				/* added by ASM stub */
    IN NDIS_HANDLE  ProtocolBindingContext,
    IN PNDIS_PACKET  Packet,
    IN NDIS_STATUS Status)
{
	struct protocol_reserved *pr = PROTOCOL_RESERVED(Packet);

	_CHECK_PCHARS(pchars);

	/** @todo maybe using magic as ProtocolReserved is not stable solution... */
	if (pr->magic == send_out_packet) {
		// our completion! free buffer & packet

		KdPrint(("[ndis_hk] new_SendCompleteHandler(our packet): Status 0x%x\n", Status));

		free(pr->data);
		NdisFreeBuffer(pr->buffer);
		NdisFreePacket(Packet);

	} else {
		// call original handler
		if (PCHARS_OLD_CHARS(pchars)->SendCompleteHandler != NULL)
			PCHARS_OLD_CHARS(pchars)->SendCompleteHandler(ProtocolBindingContext, Packet, Status);
	}
}

/**
 * Hooked RequestCompleteHandler from NDIS_PROTOCOL_CHARACTERISTICS.
 * Check if it is completion for our call of NdisRequest set event and don't call original handler.
 */
VOID
new_RequestCompleteHandler(
	struct PROTOCOL_CHARS		*pchars,		/* added by ASM stub */
	IN	NDIS_HANDLE				ProtocolBindingContext,
	IN	PNDIS_REQUEST			NdisRequest,
	IN	NDIS_STATUS				Status)
{
	if (NdisRequest == g_request.pend_req) {
		// it's our request

		KdPrint(("[ndis_hk] new_RequestCompleteHandler(our request): Status 0x%x\n", Status));
		
		g_request.status = Status;
		NdisSetEvent(&g_request.event);
	
	} else {
		// call original handler
		if (PCHARS_OLD_CHARS(pchars)->RequestCompleteHandler != NULL)
			PCHARS_OLD_CHARS(pchars)->RequestCompleteHandler(ProtocolBindingContext, NdisRequest, Status);
	}
}

/**
 * Hooked PnPEventHandler from NDIS_PROTOCOL_CHARACTERISTICS.
 * Call pnp_event() in filter chain
 */
NDIS_STATUS
new_PnPEventHandler(
	struct PROTOCOL_CHARS		*pchars,		/* added by ASM stub */
    IN NDIS_HANDLE				ProtocolBindingContext,
    IN PNET_PNP_EVENT			NetPnPEvent)
{
	struct ADAPTER_PROTOCOL *adapter;
	NDIS_STATUS status;

	_CHECK_PCHARS(pchars);

	// get adapter
	for (adapter = pchars->adapter; adapter != NULL; adapter = adapter->next)
		if (adapter->ProtocolBindingContext == ProtocolBindingContext)
			break;

	if (adapter != NULL)
		status = call_pnp_events(adapter->adapter_index, NetPnPEvent);
	else
		status = NDIS_STATUS_SUCCESS;

	if (status == NDIS_STATUS_SUCCESS) {
		// call original handler
		status = PCHARS_OLD_CHARS(pchars)->PnPEventHandler(ProtocolBindingContext, NetPnPEvent);
	}
	
	return status;
}

/*
 * --- NDIS functions from NDIS_OPEN_BLOCK ---
 */

/**
 * Hooked SendHandler (NdisSend) from NDIS_OPEN_BLOCK.
 * Filter packet and maybe call original handler
 */
NDIS_STATUS
new_SendHandler(
	struct ADAPTER_PROTOCOL		*adapter,			/* added by ASM stub */
	IN	NDIS_HANDLE				MacBindingHandle,
	IN	PNDIS_PACKET			Packet)
{
	// we get pchars only to check adapter
	_CHECK_PCHARS(adapter->pchars);

	// can't use UNICODE %S to output (see DbgPrint documentation)
	KdPrint(("[ndis_hk] new_SendHandler: (%d)\n", adapter->adapter_index));

	if (adapter->adapter_index != 0 &&
		!filter_packet(DIRECTION_OUT, adapter->adapter_index, Packet)) {
		KdPrint(("[ndis_hk] new_SendHandler: DENY!\n"));
		return NDIS_STATUS_SUCCESS;		// let protocol driver to think it's all right
	}

	return adapter->old_SendHandler(MacBindingHandle, Packet);	
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品自拍动漫在线| 99精品1区2区| 奇米影视一区二区三区| 亚洲成年人影院| 天天色综合天天| 日韩国产欧美视频| 美女一区二区视频| 美女一区二区视频| 激情小说亚洲一区| 国产精品一级片在线观看| 国产成人免费视频网站| 成人污污视频在线观看| 99r国产精品| 色94色欧美sute亚洲13| 欧美日韩一区 二区 三区 久久精品| 欧美色图免费看| 欧美一级日韩免费不卡| 日韩一区二区三区免费看| 欧美精品粉嫩高潮一区二区| 亚洲成人午夜电影| 午夜精品在线看| 看国产成人h片视频| 国产一区不卡精品| jvid福利写真一区二区三区| www.亚洲激情.com| 欧美在线观看视频一区二区| 亚洲成人精品一区| 成人免费毛片片v| 国产日韩欧美精品电影三级在线| 韩国午夜理伦三级不卡影院| 91麻豆精品国产自产在线| 亚洲韩国精品一区| 欧美日韩在线免费视频| 一区二区在线观看av| 色婷婷精品久久二区二区蜜臂av| 亚洲欧美电影院| 在线观看91视频| 亚洲3atv精品一区二区三区| 欧美日韩精品一区二区三区四区| 亚洲成av人在线观看| 欧美日韩国产乱码电影| 日韩国产精品久久久| 日韩欧美一区二区不卡| 激情六月婷婷久久| 日本一区免费视频| 色婷婷综合久久久| 日韩电影在线免费观看| 欧美一级片免费看| 国产自产2019最新不卡| 国产精品视频麻豆| 欧美亚洲日本国产| 免费一区二区视频| 亚洲国产电影在线观看| 色视频一区二区| 免费在线观看成人| 国产精品欧美一区二区三区| 在线视频国内自拍亚洲视频| 舔着乳尖日韩一区| 欧美成人精品二区三区99精品| 国产麻豆精品一区二区| 亚洲美女免费在线| 日韩一区二区三区在线| 成人高清免费在线播放| 午夜精品视频一区| 国产午夜精品在线观看| 日本韩国精品在线| 精品一区二区在线视频| 国产精品美女久久久久久2018| 欧美怡红院视频| 韩国精品一区二区| 一区二区三区视频在线观看| 日韩精品一区二区三区在线| av资源站一区| 男女男精品视频| 亚洲欧美激情插 | 亚洲第一久久影院| 久久网站热最新地址| 在线国产亚洲欧美| 国产一区二区三区av电影 | 欧美国产乱子伦| 91精品在线一区二区| 99精品国产99久久久久久白柏 | 成人黄动漫网站免费app| 丝袜脚交一区二区| 亚洲美女视频在线观看| 国产亚洲综合性久久久影院| 6080亚洲精品一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 日本不卡的三区四区五区| 亚洲欧美日韩中文字幕一区二区三区 | 国产大陆精品国产| 日本亚洲免费观看| 亚洲成人资源网| 亚洲天堂成人在线观看| 久久精品人人做人人爽人人| 91精品国产色综合久久不卡电影 | 国产精品一区二区三区99| 天天综合网 天天综合色| 亚洲人亚洲人成电影网站色| 久久久亚洲综合| 精品久久久久久最新网址| 欧美色精品在线视频| 色诱视频网站一区| 一本一道综合狠狠老| 99精品视频免费在线观看| 国产精品影视在线观看| 国内不卡的二区三区中文字幕| 伊人色综合久久天天| 亚洲精品成人天堂一二三| 亚洲日本乱码在线观看| 亚洲日本成人在线观看| 亚洲欧美日韩在线不卡| 亚洲精品老司机| 夜夜嗨av一区二区三区四季av| 亚洲精品中文在线| 亚洲一区二区在线免费观看视频 | 7777精品伊人久久久大香线蕉最新版| 欧美自拍丝袜亚洲| 欧美三级在线看| 欧美丰满高潮xxxx喷水动漫| 91精品婷婷国产综合久久性色| 欧美一区二区网站| 欧美tickling挠脚心丨vk| 亚洲精品一区二区三区蜜桃下载| 久久亚洲捆绑美女| 国产精品不卡在线观看| 一区二区三区四区不卡在线| 亚洲福中文字幕伊人影院| 免费欧美日韩国产三级电影| 久久99国产精品久久| 床上的激情91.| 欧美自拍偷拍午夜视频| 欧美一个色资源| 国产性天天综合网| 亚洲另类在线制服丝袜| 日产欧产美韩系列久久99| 国产一区二区免费视频| 99久久婷婷国产综合精品电影 | 亚洲精品一区二区三区影院| 久久婷婷国产综合精品青草| 国产精品成人在线观看| 天堂av在线一区| 国产成人亚洲精品青草天美| av一区二区三区| 欧美精品丝袜中出| 国产欧美视频一区二区| 亚洲永久免费av| 狠狠狠色丁香婷婷综合激情| 91亚洲国产成人精品一区二三 | 久久午夜免费电影| 国产精品不卡在线观看| 热久久国产精品| av毛片久久久久**hd| 日韩午夜电影在线观看| 最近日韩中文字幕| 蜜桃精品在线观看| www.亚洲精品| 精品国产污污免费网站入口 | 国产欧美日韩在线视频| 亚洲成av人**亚洲成av**| 国产精品亚洲成人| 制服丝袜成人动漫| 亚洲人成网站精品片在线观看| 久久99久久久欧美国产| 一本色道久久综合狠狠躁的推荐| 欧美岛国在线观看| 午夜激情一区二区三区| 成人爱爱电影网址| 久久综合999| 日韩高清欧美激情| 欧美亚洲国产一区二区三区 | 亚洲黄色免费电影| 国产在线精品一区二区不卡了 | 欧美日韩午夜在线| 国产精品久久精品日日| 国产一区二区三区国产| 日韩一级完整毛片| 天堂午夜影视日韩欧美一区二区| 91在线精品一区二区| 国产欧美一区二区精品忘忧草| 日韩av一区二区在线影视| 日本精品视频一区二区| 成人免费在线观看入口| 国产激情一区二区三区桃花岛亚洲| 欧美一区二区人人喊爽| 亚洲小说欧美激情另类| 色久综合一二码| 亚洲欧美激情小说另类| 不卡免费追剧大全电视剧网站| 精品国产乱码久久久久久1区2区| 日本不卡中文字幕| 3atv一区二区三区| 香蕉成人啪国产精品视频综合网 | 亚洲成人一二三| 欧美少妇一区二区| 亚洲一区二区三区四区五区中文| 91在线精品一区二区| 亚洲综合视频网| 欧美网站一区二区| 亚洲成av人片一区二区梦乃|