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

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

?? asyncmac.c

?? wince3.0的源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:

    MiniportAdapterContext - A pointer to the adapter.


Return Value:

    The function value is the status of the operation.

--*/

{
	PASYNCMAC_ADAPTER pAdapter = (PASYNCMAC_ADAPTER)MiniportAdapterContext;
    NDIS_STATUS     StatusToReturn = NDIS_STATUS_SUCCESS;

	DEBUGMSG (ZONE_INIT|ZONE_INTERFACE,
			  (TEXT("+ASYNCMAC:MpSetInfo(0x%X, 0x%X, 0x%X, %d, 0x%X, 0x%X)\r\n"),
			   MiniportAdapterContext, Oid, InformationBuffer,
			   InformationBufferLength, BytesRead, BytesNeeded));

	ASSERT(CHK_AA(pAdapter));
	
    switch ( Oid ) {

	case OID_WAN_SET_LINK_INFO :
		if (InformationBufferLength < sizeof (NDIS_WAN_GET_LINK_INFO)) {
			StatusToReturn = NDIS_STATUS_BUFFER_TOO_SHORT;
			*BytesNeeded = sizeof(NDIS_WAN_GET_LINK_INFO);
			break;
		} else {
			PNDIS_WAN_GET_LINK_INFO	pLinkInfo = (PNDIS_WAN_GET_LINK_INFO)InformationBuffer;
			PASYNCMAC_OPEN_LINE	pOpenLine;

			pOpenLine = (PASYNCMAC_OPEN_LINE)pLinkInfo->NdisLinkHandle;
			ASSERT(CHK_AOL(pOpenLine));

			DEBUGMSG (1, (TEXT("MpSetInfo: Orig ACCM=0x%X\r\n"), pOpenLine->WanLinkInfo.SendACCM));
			
			// Let's just save this away.
			memcpy ((char *)&(pOpenLine->WanLinkInfo),
					(char *)pLinkInfo,
					sizeof (pOpenLine->WanLinkInfo));
			
			DEBUGMSG (1, (TEXT("MpSetInfo: New ACCM=0x%X\r\n"), pOpenLine->WanLinkInfo.SendACCM));
			
		}
		break;
		
	case OID_TAPI_SET_DEV_CONFIG :
		if (InformationBufferLength < sizeof(NDIS_TAPI_SET_DEV_CONFIG))
		{
			DEBUGMSG (ZONE_TAPI, (TEXT("ASYNCMAC: Buffer too short (%d < %d)\n"), InformationBufferLength, sizeof(NDIS_TAPI_SET_DEV_CONFIG)));
			StatusToReturn = NDIS_STATUS_BUFFER_TOO_SHORT;
			*BytesNeeded = sizeof(NDIS_TAPI_SET_DEV_CONFIG);
			break;
		}
		else
		{
			PNDIS_TAPI_SET_DEV_CONFIG	pTapiDevConfig = (PNDIS_TAPI_SET_DEV_CONFIG)InformationBuffer;
			LONG						lResult;

			if (pTapiDevConfig->ulDeviceConfigSize > 0)
			{
				DEBUGMSG (ZONE_TAPI, (TEXT("ASYNCMAC: Calling lineSetDevConfig\n")));
				lResult = lineSetDevConfig (
								pTapiDevConfig->ulDeviceID,
								&pTapiDevConfig->DeviceConfig[0],
								pTapiDevConfig->ulDeviceConfigSize,
								DEV_CLASS_COMM_DATAMODEM);
				if (lResult != 0)
				{
					DEBUGMSG (ZONE_TAPI|ZONE_ERROR,
							  (TEXT("lineSetDevConfig failed (%d)\n"), lResult));
					StatusToReturn = NDIS_STATUS_TAPI_INVALPARAM;
				} 
			}
		}
		break;

	case OID_TAPI_DROP :
		DEBUGMSG(ZONE_INTERFACE, (TEXT("ASYNCMAC: OID_TAPI_DROP\n")));
		if (InformationBufferLength < sizeof (NDIS_TAPI_DROP)) {
			StatusToReturn = NDIS_STATUS_BUFFER_TOO_SHORT;
			*BytesNeeded = sizeof(NDIS_TAPI_DROP);
			break;
		} else {
			PNDIS_TAPI_DROP	pTapiDrop = (PNDIS_TAPI_DROP)InformationBuffer;
			PASYNCMAC_OPEN_LINE	pOpenLine;
			long    lResult;
			
			// We return the pOpenLine for the hdCall.
			pOpenLine = (PASYNCMAC_OPEN_LINE)pTapiDrop->hdCall;
			ASSERT(CHK_AOL(pOpenLine));

			// Forward on the info.
            lResult = lineDrop(pOpenLine->hCall, pTapiDrop->UserUserInfo,
								pTapiDrop->ulUserUserInfoSize);

            DEBUGMSG( ZONE_TAPI, (TEXT("Return from lineDrop()=%d\r\n"), lResult));
			
		}
		break;

	case OID_TAPI_CLOSE_CALL :
		DEBUGMSG(ZONE_INTERFACE, (TEXT("ASYNCMAC: OID_TAPI_CLOSE_CALL\n")));
		if (InformationBufferLength < sizeof (NDIS_TAPI_CLOSE_CALL)) {
			StatusToReturn = NDIS_STATUS_BUFFER_TOO_SHORT;
			*BytesNeeded = sizeof(NDIS_TAPI_CLOSE_CALL);
			break;
		} else {
			PNDIS_TAPI_CLOSE_CALL	pTapiCloseCall = (PNDIS_TAPI_CLOSE_CALL)InformationBuffer;
			PASYNCMAC_OPEN_LINE	pOpenLine;
			long    lResult;

			// We return the pOpenLine for the hdCall.
			pOpenLine = (PASYNCMAC_OPEN_LINE)pTapiCloseCall->hdCall;
			ASSERT(CHK_AOL(pOpenLine));

			// TAPI docs state that CloseHandle must be done on the hPort before
			// calling lineDeallocateCall.
			if (pOpenLine->hPort != NULL)
			{
				CloseHandle(pOpenLine->hPort);
				pOpenLine->hPort = NULL;
			}

            lResult = lineDeallocateCall( pOpenLine->hCall );
			pOpenLine->hCall = NULL;

			// We don't actually free the pOpenLine until the OID_TAPI_CLOSE.
            DEBUGMSG( ZONE_TAPI, (TEXT("Return from lineDeallocateCall()=%d\r\n"),
								 lResult));
		}
		break;
		
	case OID_TAPI_CLOSE :
		DEBUGMSG(ZONE_INTERFACE, (TEXT("ASYNCMAC: OID_TAPI_CLOSE\n")));
		if (InformationBufferLength < sizeof (NDIS_TAPI_CLOSE)) {
			StatusToReturn = NDIS_STATUS_BUFFER_TOO_SHORT;
			*BytesNeeded = sizeof(NDIS_TAPI_CLOSE);
			break;
		} else {
			PNDIS_TAPI_CLOSE	pTapiClose = (PNDIS_TAPI_CLOSE)InformationBuffer;
			PASYNCMAC_OPEN_LINE	pOpenLine;
			long    lResult;

			// We return the pOpenLine for the hdLine.
			pOpenLine = (PASYNCMAC_OPEN_LINE)pTapiClose->hdLine;
			ASSERT(CHK_AOL(pOpenLine));

			// Ok, now it's removed from the list.
			lResult = lineClose (pOpenLine->hLine);

			ReleaseOpenLinePtr (pOpenLine);

            DEBUGMSG( ZONE_TAPI, (TEXT("Return from lineClose()=%d\r\n"), lResult));
		}
		break;

	default:

        StatusToReturn = NDIS_STATUS_INVALID_OID;

        *BytesRead   = 0;
        *BytesNeeded = 0;

        break;
    }
	DEBUGMSG (ZONE_INIT|ZONE_INTERFACE,
			  (TEXT("-ASYNCMAC:MpSetInfo: Returning 0x%X\r\n"),
			   StatusToReturn));
	
	return StatusToReturn;
}

NDIS_STATUS
MpReconfigure(
	OUT PNDIS_STATUS	OpenErrorStatus,
	IN	NDIS_HANDLE		MiniportAdapterContext,
	IN	NDIS_HANDLE		WrapperConfigurationContext
	)
{
	DEBUGMSG (ZONE_INIT|ZONE_INTERFACE,
			  (TEXT("+/-ASYNCMAC:MpReconfigure(0x%X, 0x%X, 0x%X)\r\n"),
			   OpenErrorStatus, MiniportAdapterContext,
			  WrapperConfigurationContext));
	return (NDIS_STATUS_SUCCESS);
}

NDIS_STATUS
MpReset(
	OUT PBOOLEAN		AddressingReset,
	IN	NDIS_HANDLE		MiniportAdapterContext
	)
{
	DEBUGMSG (ZONE_INIT|ZONE_INTERFACE,
			  (TEXT("+/-ASYNCMAC:MpReset(0x%X, 0x%X)\r\n"),
			   AddressingReset, MiniportAdapterContext));
    *AddressingReset = FALSE;

	return (NDIS_STATUS_SUCCESS);
}

NDIS_STATUS
MpSend(
	IN NDIS_HANDLE		MacBindingHandle,
    IN NDIS_HANDLE      NdisLinkHandle,
    IN PNDIS_WAN_PACKET pPacket)
{
	PASYNCMAC_OPEN_LINE pOpenLine = (PASYNCMAC_OPEN_LINE) NdisLinkHandle;
	NDIS_STATUS			Status = NDIS_STATUS_SUCCESS;
	DWORD				bytesWritten;		// bytes written per WriteFile call
	DWORD				packetBytesSent;	// sum of prior WriteFile bytesWritten
	
	DEBUGMSG (ZONE_INIT|ZONE_INTERFACE,
			  (TEXT("ASYNCMAC:+MpSend(0x%X, 0x%X, 0x%X)\r\n"),
			   MacBindingHandle, NdisLinkHandle,
			   pPacket));

	if (pOpenLine == NULL)
	{
		//
		//	This can happen if the connection is closed by RAS/PPP just as it is
		//	sending a packet.  In this case, we don't want to send anything.
		//
		Status = NDIS_STATUS_FAILURE;
	}
	else
	{
		ASSERT(CHK_AOL(pOpenLine));

		// Let's just send it for now.
		if (pOpenLine->hPort == NULL)
		{
			Status = NDIS_STATUS_FAILURE;
		}
		else
		{
#ifdef DEBUG
			if (ZONE_SEND)
			{
				DEBUGMSG (1, (TEXT("ASYNCMAC: MpSend: About to frame packet (%d):\n"), pPacket->CurrentLength));
				DumpMem (pPacket->CurrentBuffer, pPacket->CurrentLength);
			}
#endif
		
			if (pOpenLine->WanLinkInfo.SendFramingBits & PPP_FRAMING)
			{
				// Do CRC generation and escape byte insertion
				AssemblePPPFrame (pOpenLine, pPacket);
			}
			else
			{
				// Do SLIP escape byte insertion
				AssembleSLIPFrame(pOpenLine, pPacket);
			}

#ifdef DEBUG
			//		DEBUGMSG (1, (TEXT("MpSend: After frame packet (%d):\r\n"), pPacket->CurrentLength));
			//		DumpMem (pPacket->CurrentBuffer, pPacket->CurrentLength);
#endif

			for (packetBytesSent = 0;
				 packetBytesSent < pPacket->CurrentLength;
				 packetBytesSent += bytesWritten)
			{
				if (!WriteFile (pOpenLine->hPort, pPacket->CurrentBuffer + packetBytesSent,
								pPacket->CurrentLength - packetBytesSent, &bytesWritten, 0)
				||  bytesWritten == 0)
				{
					DEBUGMSG(ZONE_SEND | ZONE_ERROR, (
						TEXT( "AsyncMac:WriteFile Error %d Aborting Packet after sending %d of %d bytes\r\n" ),
						GetLastError(), packetBytesSent, pPacket->CurrentLength) );
						Status = NDIS_STATUS_FAILURE;
						break;
				}
				DEBUGMSG (ZONE_SEND, (TEXT("AsyncMac: MpSend wrote %d bytes\r\n"), bytesWritten));
			}
		}
	}

	DEBUGMSG ((ZONE_INIT|ZONE_INTERFACE) || (ZONE_ERROR && Status),
			  (TEXT("ASYNCMAC:-MpSend: Returning 0x%X\r\n"),
			   Status));
	
    return Status;
}

BOOL
IsValidOpenLinePtr(PASYNCMAC_OPEN_LINE pOpenLine)
//
//	Validate pOpenLine.
//	Return TRUE if it is valid, FALSE otherwise.
//
//	This function must be called with v_AdapterCS held.
{
	BOOL				bValid = FALSE;
	PASYNCMAC_OPEN_LINE pOLCurrent;

	DEBUGMSG(ZONE_FUNCTION, (TEXT("+IsValidOpenLinePtr %x\n"), pOpenLine));

	DEBUGMSG(ZONE_MISC, (TEXT(" IsValidOpenLinePtr v_pAdapter=%x\n"), v_pAdapter));
	if (v_pAdapter)
	{
		DEBUGMSG(ZONE_MISC, (TEXT(" IsValidOpenLinePtr pHead=%x\n"), v_pAdapter->pHead));
		for (pOLCurrent = v_pAdapter->pHead; pOLCurrent; pOLCurrent = pOLCurrent->pNext)
		{
			DEBUGMSG(ZONE_MISC, (TEXT(" IsValidOpenLinePtr pOLCurrent=%x\n"), pOLCurrent));
			if (pOLCurrent == pOpenLine)
			{
				bValid = TRUE;
				break;
			}
		}
	}

	DEBUGMSG(ZONE_FUNCTION, (TEXT("-IsValidOpenLinePtr %x result=%d\n"), pOpenLine, bValid));

	return bValid;
}

void
ReleaseOpenLinePtr (PASYNCMAC_OPEN_LINE pOpenLine)
//
//	Decrement the refcnt for the OpenLine parameter.
//	If the refcnt reaches zero, then no threads are using the OpenLine and so it is freed.
//
{
	PASYNCMAC_OPEN_LINE	pOLTemp;

	DEBUGMSG(ZONE_FUNCTION, (TEXT("+ReleaseOpenLinePtr %x\n"), pOpenLine));

	EnterCriticalSection(&v_AdapterCS);

	if (IsValidOpenLinePtr(pOpenLine))
	{
		pOpenLine->dwRefCnt--;
		DEBUGMSG(ZONE_MISC, (TEXT(" ReleaseOpenLinePtr refcnt now %d\n"), pOpenLine->dwRefCnt));

		if (0 == pOpenLine->dwRefCnt) {

			DEBUGMSG(ZONE_MISC, (TEXT(" ReleaseOpenLinePtr removing pOpenLine=%x\n"), pOpenLine));

			// Remove this from the adapter list.
			if (pOpenLine == pOpenLine->pAdapter->pHead) {
				// Trivial case, remove from head.
				pOpenLine->pAdapter->pHead = pOpenLine->pNext;
				DEBUGMSG(ZONE_MISC, (TEXT(" ReleaseOpenLinePtr trivial remove from head\n")));
			} else {
				for (pOLTemp = pOpenLine->pAdapter->pHead; pOLTemp; pOLTemp = pOLTemp->pNext) {
					if (pOLTemp->pNext == pOpenLine) {
						pOLTemp->pNext = pOpenLine->pNext;
						break;
					}
				}
				ASSERT (pOLTemp);
			}

			DEBUGMSG(ZONE_MISC, (TEXT("***ReleaseOpenLinePtr FREEING pOpenLine=%x\n"), pOpenLine));
			AsyncMacFreeMemory (pOpenLine, sizeof(ASYNCMAC_OPEN_LINE));
		}
	}

	LeaveCriticalSection(&v_AdapterCS);

	DEBUGMSG(ZONE_FUNCTION, (TEXT("-ReleaseOpenLinePtr %x\n"), pOpenLine));

}
PASYNCMAC_OPEN_LINE
GetOpenLinePtr (void *context)
//
//	Return an OPEN_LINE ptr if the context is valid, NULL if not.
//
//	Increments the refcnt to the OPEN_LINE.
//
//	The caller of this function must call ReleaseOpenLinePtr if this
//	function returns non-NULL, in order to decrement the refcnt.
//
{
	PASYNCMAC_OPEN_LINE	pOpenLine = (PASYNCMAC_OPEN_LINE) context;
	
	DEBUGMSG(ZONE_FUNCTION, (TEXT("+GetOpenLinePtr %x\n"), pOpenLine));

	EnterCriticalSection(&v_AdapterCS);

	if (IsValidOpenLinePtr(pOpenLine))
	{
		// Increment refcnt to make sure it doesn't go away while in use.
		pOpenLine->dwRefCnt++;
		DEBUGMSG(ZONE_FUNCTION, (TEXT(" GetOpenLinePtr refcnt now %d\n"), pOpenLine->dwRefCnt));
	}
	else
		pOpenLine = NULL;

	LeaveCriticalSection(&v_AdapterCS);

	DEBUGMSG(ZONE_FUNCTION, (TEXT("-GetOpenLinePtr result=%x\n"), pOpenLine));

	return pOpenLine;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产成人高清精品| 日韩久久久久久| 在线91免费看| 亚洲精品在线观看视频| 亚洲国产成人一区二区三区| 亚洲精品国产一区二区三区四区在线| 亚洲色图一区二区| 毛片av一区二区| 成人动漫中文字幕| 欧美丰满一区二区免费视频| 国产日韩三级在线| 亚洲愉拍自拍另类高清精品| 国模一区二区三区白浆| 色成年激情久久综合| 日韩欧美亚洲国产精品字幕久久久| 日本一二三四高清不卡| 亚洲成av人影院| 成人激情动漫在线观看| 91精品国产品国语在线不卡| 国产精品成人网| 日韩在线一区二区| 99精品偷自拍| 精品噜噜噜噜久久久久久久久试看 | 欧美精品少妇一区二区三区| 久久久久久夜精品精品免费| 亚洲午夜在线观看视频在线| 国产美女娇喘av呻吟久久| 欧美综合视频在线观看| 国产欧美日韩精品a在线观看| 五月天婷婷综合| 91麻豆免费在线观看| 精品88久久久久88久久久| 亚洲国产精品一区二区尤物区| 国产经典欧美精品| 91精品国产一区二区| 亚洲精品国产一区二区精华液| 国产另类ts人妖一区二区| 欧美日韩免费视频| 国产精品福利电影一区二区三区四区| 美国毛片一区二区| 欧美写真视频网站| 亚洲欧洲99久久| 国产主播一区二区| 日韩一区二区影院| 亚洲一区二区三区四区不卡| 成人毛片老司机大片| 精品第一国产综合精品aⅴ| 性感美女极品91精品| 99久久免费精品高清特色大片| 久久中文字幕电影| 免费成人在线视频观看| 欧美日韩视频在线第一区| 最新欧美精品一区二区三区| 国产成人午夜电影网| 欧美草草影院在线视频| 日韩电影在线观看电影| 欧美色手机在线观看| 亚洲欧美一区二区三区孕妇| 不卡av在线免费观看| 国产三级久久久| 国产九色精品成人porny| 欧美成人精品二区三区99精品| 天堂va蜜桃一区二区三区 | 综合网在线视频| 懂色中文一区二区在线播放| 久久久国产综合精品女国产盗摄| 免费成人av在线播放| 777a∨成人精品桃花网| 午夜成人在线视频| 在线观看不卡视频| 亚洲福利电影网| 欧美三级中文字| 天天操天天综合网| 6080yy午夜一二三区久久| 午夜精品福利一区二区蜜股av| 欧美性xxxxxxxx| 丝袜诱惑制服诱惑色一区在线观看| 欧美自拍丝袜亚洲| 亚洲电影视频在线| 777xxx欧美| 久久99国产精品成人| 久久奇米777| 岛国av在线一区| 综合分类小说区另类春色亚洲小说欧美| www.66久久| 亚洲精品视频一区二区| 精品视频在线视频| 蜜臀久久99精品久久久久宅男| 精品国产乱码久久久久久久久 | 国产精品欧美精品| 91蝌蚪porny九色| 亚洲va中文字幕| 日韩欧美资源站| 粉嫩一区二区三区性色av| 亚洲免费视频成人| 91.com在线观看| 国产精品一区二区视频| 国产精品盗摄一区二区三区| 欧美亚洲综合一区| 久久精品99国产精品日本| 国产女人18水真多18精品一级做| 在线看国产一区二区| 日本亚洲电影天堂| 日韩久久久久久| 丁香网亚洲国际| 亚洲黄一区二区三区| 欧美一区在线视频| 国产乱子轮精品视频| 国产精品久久久久久福利一牛影视| av亚洲精华国产精华| 五月激情丁香一区二区三区| 久久人人超碰精品| 色综合天天综合网天天狠天天| 日日噜噜夜夜狠狠视频欧美人| 久久精品人人做人人爽人人| 色老汉av一区二区三区| 免费观看日韩电影| 国产精品传媒视频| 欧美一级夜夜爽| 97久久超碰国产精品电影| 水野朝阳av一区二区三区| 国产亚洲污的网站| 欧美男生操女生| 懂色av一区二区夜夜嗨| 亚洲高清视频的网址| 久久久一区二区三区捆绑**| 在线亚洲一区二区| 国产精品一区二区你懂的| 一区二区三区久久| 久久精品无码一区二区三区| 欧美麻豆精品久久久久久| 国产99久久久精品| 亚洲成人动漫在线免费观看| 国产成人在线免费观看| 6080午夜不卡| 99久久精品免费看国产| 免费在线一区观看| 自拍偷拍亚洲欧美日韩| 日韩欧美中文字幕一区| 在线中文字幕不卡| 成人网在线播放| 免费在线欧美视频| 亚洲最快最全在线视频| 国产欧美日韩麻豆91| 日韩精品最新网址| 欧美日韩中文字幕一区| 91在线丨porny丨国产| 韩国一区二区三区| 偷拍与自拍一区| 亚洲精品国产高清久久伦理二区| 久久久国产精品午夜一区ai换脸| 69堂成人精品免费视频| 日本韩国欧美国产| 国产精品一区二区三区乱码| 男女性色大片免费观看一区二区| 亚洲精品成a人| 亚洲国产精品99久久久久久久久| 精品国产一区二区三区忘忧草 | 中文幕一区二区三区久久蜜桃| 日韩欧美资源站| 91精品国产综合久久久久久漫画| 色婷婷av一区二区| 9人人澡人人爽人人精品| 国产在线一区二区综合免费视频| 中文字幕亚洲欧美在线不卡| 久久嫩草精品久久久久| 欧美一区二区三区成人| 欧美三日本三级三级在线播放| 91老司机福利 在线| gogo大胆日本视频一区| 成人性生交大片免费看中文网站 | 久久久三级国产网站| 日韩精品一区二区三区四区| 91精品国产入口在线| 欧美丰满嫩嫩电影| 欧美精品九九99久久| 欧美日韩黄色影视| 欧美日韩精品一区二区天天拍小说 | 欧美videos大乳护士334| 7777精品伊人久久久大香线蕉经典版下载| 欧美亚洲综合另类| 精品视频在线免费观看| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 91精品国产综合久久婷婷香蕉 | 日韩av电影天堂| 视频一区中文字幕| 七七婷婷婷婷精品国产| 久久精品国产免费看久久精品| 麻豆精品国产传媒mv男同| 美女视频黄免费的久久 | 欧美精品一区视频| 国产亚洲欧美日韩俺去了| 国产亚洲欧洲一区高清在线观看| 久久精品在线免费观看| 中文字幕第一页久久| 国产精品久久久久三级| 亚洲摸摸操操av| 亚洲成人第一页| 麻豆91在线看| 国产黄色成人av|