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

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

?? openclose.c

?? WinCE 系統下
?? C
字號:
#include <windows.h>
#include "packet.h"

/*
 * Relesae the time slice of execution
 */

// Donot Optimize this code
#pragma optimize ("", off)

VOID SuspendExecution (POPEN_INSTANCE pOI)
{
	volatile NDIS_STATUS Status;

	Status = pOI->Status;
	while (Status == NDIS_STATUS_PENDING) {
		// release the time slice
		Sleep (0);
		Status = pOI->Status;
	}
}

VOID ResumeExecution (POPEN_INSTANCE pOI, NDIS_STATUS Status)
{
	// Set the status
	pOI->Status = Status;
}
#pragma optimize ("", on)

/*
 * This function invariably return the constant PKT_OPEN_CONTEXT. 
 * this is done beause at this point we donot know the adapter to which
 * our protocol should bind.
 *
 */
DWORD PKT_Open(DWORD dwContext, DWORD accessCode, DWORD ShareMode)
{
	// if the adapter is already opened then cannot open
	// one more instance.
	if (g_pDeviceExtension->pOpenInstance == NULL &&
		dwContext == PKT_DEVICE_CONTEXT) {
		return PKT_FILE_HANDLE;
	} else {
		return -1;
	}
}


/*
** This function does the cleanup after adapter is closed
*/
BOOL PKT_Close(DWORD dwContext)
{
	if (dwContext != PKT_FILE_HANDLE) {
		return FALSE;
	}

	return TRUE;
}

/*
** This function does nothing
*/
VOID PKT_PowerUp(VOID)
{
	return;
}


/*
** This function does nothing
*/
VOID PKT_PowerDown(VOID)
{
	return;
}

VOID PacketBindAdapter (OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, 
						IN PNDIS_STRING DeviceName, IN PVOID SS1, IN PVOID SS2)
{
	return;
}

/*
 * Copies all the adapter names in the out buffer
 * This function is not called directly. It is called by
 * IO control routine
 *
 */
DWORD PKTGetMacNameList (PWCHAR pBufOut, DWORD dwLenOut)
{

	PADAPTER_NAME	pAName;
	DWORD			dwRet = 0;
	PLIST_ENTRY		pEntry;
	PLIST_ENTRY		pHead;

	// Iterate through all the available adapters
	// and add the adapter names to the out buffer

	if (pBufOut == NULL || dwLenOut == 0) {
		return 0;
	}

	// check if the list is empty
	if (IsListEmpty (&g_pDeviceExtension->listAdapterNames)) {
		return 0;
	}

	// get the head element
	pHead = &g_pDeviceExtension->listAdapterNames;

	// get first entry
	pEntry = pHead->Flink;

	do {
		// get the record
		pAName = CONTAINING_RECORD (pEntry, ADAPTER_NAME, ListElement);

		// check if output buffer can hold the string
		if ((INT)(dwLenOut - (dwRet + wcslen (pAName->chDeviceName) + 1)) <= 0) {
			break;
		}

		// add the string to the outpur buffer
		wcscpy (pBufOut + dwRet, pAName->chDeviceName);
		dwRet = dwRet + wcslen (pAName->chDeviceName) + 1;

		// get next entry
		pEntry = pEntry->Flink;
	} while (pEntry != pHead);
	
	// append one more zero
	pBufOut[dwRet] = L'\0';

	return dwRet;
}

/*
 * This function checks whether the adapter name passed to the 
 * open adapter function exists and is valid.
 *
 * Parameters
 *		pName	- The name of the adapter to which protocol should bind
 *		dwLenIn	- The length of the in buffer
 *
 * Return Value
 *		Returns pointer to ndis string object if the adapter is available
 *		otherwise returns NULL
 *
 */
PNDIS_STRING PKTGetNDISAdapterName (PWCHAR pName, DWORD dwLenIn)
{
    PADAPTER_NAME	pAName;
	PLIST_ENTRY		pHead = &g_pDeviceExtension->listAdapterNames;
	PLIST_ENTRY		pEntry;

	// check the parameters
	if (pName == NULL || dwLenIn == 0) {
		return NULL;
	}

	// check if the adapter name list is empty
	if (IsListEmpty (pHead)){	
			return NULL;
	}

	// get the first pointer
	pEntry = pHead->Flink; 

	do {
		// retrieve the element
		pAName = CONTAINING_RECORD (pEntry, ADAPTER_NAME, ListElement);

		// check if the names are matching
		if(wcscmp(pAName->chDeviceName, pName) == 0) {
			return &pAName->ndstrDeviceName;
		}

		// get next pointer
		pEntry=pEntry->Flink;
	}while (pEntry != pHead); 

	return NULL;
}


/*
 * The mediums for which this protocol can bind
 *
 */
static NDIS_MEDIUM MediumArray[] = {
    NdisMedium802_3,
    NdisMedium802_5,
	NdisMediumWan,
    NdisMediumFddi,
    NdisMediumIrda
};
#define NUM_NDIS_MEDIA  (sizeof MediumArray / sizeof MediumArray[0])

/*
 * Opens the specified adapter and binds the protocol to it
 *
 * Arguments
 *		AdapterName		- The name of the adapter with which binding should happen
 *
 * Return Value
 *		Return TRUE if successfully bound otherwise returns FALSE
 *
 */
BOOL PKTOpenAdapter (PNDIS_STRING pAdapterName)
{
	POPEN_INSTANCE	pOI;
	NDIS_STATUS		nsOpen;
	NDIS_STATUS		nsError;
	SYSTEMTIME		SystemTime;
	FILETIME		FileTime;
	LARGE_INTEGER	liSysTime;
	LARGE_INTEGER	TimeFreq;
	LARGE_INTEGER	PTime;
	UINT			uiMedium;


	// Check if an instance is already opened
	if (g_pDeviceExtension->pOpenInstance) {
		SetLastError (ERROR_ALREADY_INITIALIZED);
		return FALSE;
	}

	// Time initialization
	GetSystemTime (&SystemTime);
	if (! (SystemTimeToFileTime (&SystemTime, &FileTime) &&
		QueryPerformanceCounter (&PTime) && QueryPerformanceFrequency (&TimeFreq))) {
		return FALSE;
	}
	NdisMoveMemory (&liSysTime, &FileTime, sizeof (LARGE_INTEGER));
	
	// allocate an instance that describes the adapter
	NdisAllocateMemory (&pOI, sizeof (OPEN_INSTANCE), 0, NDIS_ADDR_M1);
	if (pOI == NULL) {
		return FALSE;
	}
	NdisZeroMemory (pOI, sizeof (OPEN_INSTANCE));

	// init struct variables
	pOI->bpfprogram			= NULL;		//set an accept-all filter
	pOI->bpfprogramlen		= 0;
	pOI->BufSize			= 0;		//set an empty buffer
	pOI->Buffer				= NULL;		//reset the buffer
	pOI->Bhead				= 0;
	pOI->Btail				= 0;
	pOI->BLastByte			= 0;
	pOI->TimeOut			= 0;		//reset the timeouts


	// create the shared name read event
	pOI->ReadEvent = CreateEvent (NULL, FALSE, FALSE, SH_EVENT_NAME);
	if (pOI->ReadEvent == NULL) {
		NdisFreeMemory (pOI, sizeof (OPEN_INSTANCE), 0);
		return FALSE;
	}
	///wsh 2006-04-24
//	NdisInitializeEvent(&pOI->SendEvent);
	
	pOI->SendFlagEvent=CreateEvent(NULL,TRUE,FALSE,SH_SEND_EVENT_NAME);
	if(pOI->SendFlagEvent==NULL){
		NdisFreeMemory (pOI, sizeof (OPEN_INSTANCE), 0);
		return FALSE;
	}
	////////////////

	// set time values
	pOI->StartTime.QuadPart = (((liSysTime.QuadPart) % 10000000) * TimeFreq.QuadPart)/10000000;
	liSysTime.QuadPart = liSysTime.QuadPart / 10000000 - 11644473600;
	pOI->StartTime.QuadPart += (liSysTime.QuadPart) * TimeFreq.QuadPart - PTime.QuadPart;


	// allocate pool for the packet headers
	NdisAllocatePacketPool (&nsError, &(pOI->PacketPool), 
		TRANSMIT_PACKETS, sizeof (PACKET_RESERVED));
	if (nsError != NDIS_STATUS_SUCCESS) {
		CloseHandle (pOI->ReadEvent);
		CloseHandle(pOI->SendFlagEvent);

		NdisFreeMemory (pOI, sizeof (OPEN_INSTANCE), 0);
		return FALSE;
	}


	// allocate buffer pool for the packet data
	NdisAllocateBufferPool (&nsError, &(pOI->BufferPool), TRANSMIT_PACKETS);
	if (nsError != NDIS_STATUS_SUCCESS) {
		CloseHandle (pOI->ReadEvent);
		CloseHandle(pOI->SendFlagEvent);
		NdisFreePacketPool (pOI->PacketPool);
		NdisFreeMemory (pOI, sizeof (OPEN_INSTANCE), 0);
		return FALSE;
	}

	// set status pending
	pOI->Status = NDIS_STATUS_PENDING;

	// open the MAC driver
	NdisOpenAdapter (&nsOpen, &nsError, &pOI->AdapterHandle, &uiMedium, MediumArray,
		NUM_NDIS_MEDIA, g_pDeviceExtension->NdisProtocolHandle, (NDIS_HANDLE)pOI, pAdapterName, 0, NULL);

	if (nsOpen == NDIS_STATUS_PENDING) {
		SuspendExecution (pOI);
	} else {
		PacketOpenAdapterComplete (pOI, nsOpen, nsError);
	}
	

	// free the packet instance if not successful
	if (pOI->Status != NDIS_STATUS_SUCCESS) {
		CloseHandle (pOI->ReadEvent);
		CloseHandle(pOI->SendFlagEvent);
		NdisFreeMemory (pOI, sizeof (OPEN_INSTANCE), 0);
		return FALSE;
	}

	return TRUE;
}


/*
 * Called by NDIS to indicate the completion of the bind operation
 *
 */
VOID PacketOpenAdapterComplete (IN NDIS_HANDLE  ProtocolBindingContext,
								IN NDIS_STATUS  Status,
								IN NDIS_STATUS  OpenErrorStatus)
{
	POPEN_INSTANCE	pOI;

	pOI = (POPEN_INSTANCE) ProtocolBindingContext;

	if (Status == NDIS_STATUS_SUCCESS) {
		// int the global structure
		g_pDeviceExtension->pOpenInstance = pOI;
	} else {
		// free resources
		PKTFreeResources (pOI);
	}

	// set status
	ResumeExecution (pOI, Status);

	return;
}


/*
 * Frees the resources allocated
 *
 */
VOID PKTFreeResources (POPEN_INSTANCE pOI)
{
	// release the packet buffer
	if (pOI->Buffer != NULL) {
		NdisFreeMemory (pOI->Buffer, pOI->BufSize, 0);
		pOI->Buffer = NULL;
	}

	// release the bpf memory
	if (pOI->bpfprogram != NULL) {
		NdisFreeMemory (pOI->bpfprogram, pOI->bpfprogramlen, 0);
		pOI->bpfprogram = NULL;
	}

	// free the packet & buffer pools
	NdisFreeBufferPool (pOI->BufferPool);
	NdisFreePacketPool (pOI->PacketPool);

} 

/*
 * Closes the open adapter
 *
 */
BOOL PKTCloseAdapter (POPEN_INSTANCE pOI)
{
	BOOL			bRet = TRUE;
	NDIS_STATUS		nsError;

	// close the adapter
	NdisCloseAdapter (&nsError, pOI->AdapterHandle);

	if (nsError == NDIS_STATUS_PENDING) {
		SuspendExecution (pOI);
	} else {
		PacketCloseAdapterComplete (pOI, nsError);
	}

	if (pOI->Status != NDIS_STATUS_SUCCESS) {
		bRet = FALSE;
	}

	// set all the events to release the waits
	SetEvent (pOI->ReadEvent);
	CloseHandle (pOI->ReadEvent);
	SetEvent (pOI->SendFlagEvent);
	CloseHandle (pOI->SendFlagEvent);

	// Free the open instance memory
	NdisFreeMemory (pOI, sizeof (OPEN_INSTANCE), 0);

	// set no instances open
	g_pDeviceExtension->pOpenInstance = NULL;

	return bRet;
}



/*
 * Called by NDIS to indicate that the adapter close is complete
 *
 */
VOID PacketCloseAdapterComplete(IN NDIS_HANDLE  ProtocolBindingContext,
								IN NDIS_STATUS  Status)
{
	POPEN_INSTANCE pOI;

	pOI = (POPEN_INSTANCE) ProtocolBindingContext;

	// irrespective of the status free the resources
	PKTFreeResources (pOI);

	// Set the status and resume execution
	ResumeExecution (pOI, Status);
	
	return;
}



/*
 * The plug and play support function. This function removes the adapter from
 * the global list of the adapter.
 *
 */
VOID PacketUnbindAdapter (OUT PNDIS_STATUS pStatus,
						  IN NDIS_HANDLE ProtocolBindingContext,
						  IN NDIS_HANDLE UnbindContext)
{
	POPEN_INSTANCE	pOI;
	NDIS_STATUS		nsCloseStatus;


	pOI = (POPEN_INSTANCE)ProtocolBindingContext;
	pOI->BindAdapterContext = UnbindContext;

	// Calls NDIS to close the selected adapter
	NdisCloseAdapter (&nsCloseStatus, pOI->AdapterHandle);
	if (nsCloseStatus == NDIS_STATUS_PENDING) {
		SuspendExecution (pOI);
	} else {
		PacketCloseAdapterComplete (pOI, nsCloseStatus);
	}

	// return the status back to the ndis framework
	*pStatus = pOI->Status;

	// set all the events to release the waits
	SetEvent (pOI->ReadEvent);
	CloseHandle (pOI->ReadEvent);
	SetEvent (pOI->SendFlagEvent);
	CloseHandle (pOI->SendFlagEvent);
	// Free the open instance memory
	//NdisFreeMemory (pOI, sizeof (OPEN_INSTANCE), 0);

	// set no instances open
	g_pDeviceExtension->pOpenInstance = NULL;

	return;	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本乱大交xxxxx| 在线免费一区三区| 久久久久国色av免费看影院| 国产一区二区在线影院| 久久久www成人免费毛片麻豆| 国产电影精品久久禁18| 最新不卡av在线| 在线视频一区二区三| 丝袜亚洲另类丝袜在线| 欧美成人性战久久| 国产成人精品亚洲777人妖| 中文字幕一区二区三区四区不卡 | 久久久亚洲午夜电影| 国产999精品久久| 日韩毛片视频在线看| 欧美日韩国产首页| 国产一区二区三区日韩| 中文字幕一区二区5566日韩| 在线这里只有精品| 久久成人18免费观看| 国产精品乱人伦中文| 欧美手机在线视频| 精品一区二区三区的国产在线播放| 久久精品网站免费观看| 日本精品视频一区二区| 美女视频免费一区| 国产日韩欧美不卡在线| 欧美午夜不卡视频| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 91精品国产免费| 成人高清免费观看| 国产色婷婷亚洲99精品小说| 亚洲一区电影777| 精品国内二区三区| 粉嫩av一区二区三区粉嫩| 亚洲午夜久久久| 国产亚洲一区二区三区在线观看| 色欧美88888久久久久久影院| 美腿丝袜亚洲综合| 亚洲精品中文在线| 久久亚洲综合色| 欧美日本国产一区| 成人黄色在线视频| 久久se精品一区精品二区| 亚洲欧美成aⅴ人在线观看| 91麻豆精品国产综合久久久久久| 日韩欧美在线影院| 一本一道波多野结衣一区二区| 韩国成人精品a∨在线观看| 亚洲成a人片在线不卡一二三区| 国产婷婷一区二区| 日韩欧美国产综合在线一区二区三区| 一本高清dvd不卡在线观看| 国产风韵犹存在线视精品| 免费在线观看日韩欧美| 怡红院av一区二区三区| 国产精品国产三级国产aⅴ无密码| 国产欧美日韩视频在线观看| 91麻豆精品国产91| 欧美羞羞免费网站| 99久久精品久久久久久清纯| 国产精品1区2区| 精品一区二区三区免费视频| 天堂一区二区在线免费观看| 一区二区三区不卡视频| ...av二区三区久久精品| 国产亚洲污的网站| 久久久天堂av| 国产日产精品一区| 久久久99久久| 久久久99久久| 久久久久9999亚洲精品| 久久综合九色综合97_久久久 | 不卡av电影在线播放| 极品美女销魂一区二区三区| 免费观看30秒视频久久| 亚洲成av人片一区二区梦乃| 亚洲综合清纯丝袜自拍| 伊人色综合久久天天人手人婷| 亚洲日本在线观看| 亚洲色图在线视频| 亚洲精品伦理在线| 亚洲综合精品久久| 亚洲成av人片一区二区梦乃| 午夜精品久久久久影视| 日本欧美一区二区三区乱码| 喷水一区二区三区| 久久99蜜桃精品| 国产成人免费xxxxxxxx| 成人午夜激情在线| 91色.com| 欧美日韩一区久久| 欧美一级精品大片| 久久看人人爽人人| 综合色天天鬼久久鬼色| 亚洲一区免费观看| 免费看欧美女人艹b| 国产成人a级片| 欧美亚州韩日在线看免费版国语版| 欧美性大战久久久| 日韩欧美的一区二区| 欧美国产乱子伦| 亚洲一区在线观看免费| 蜜臀av性久久久久av蜜臀妖精| 国产米奇在线777精品观看| 国产电影一区二区三区| 91丝袜呻吟高潮美腿白嫩在线观看| 色呦呦一区二区三区| 日韩一级黄色大片| 国产欧美久久久精品影院| 亚洲精品欧美二区三区中文字幕| 亚洲综合自拍偷拍| 韩国毛片一区二区三区| 91丨porny丨国产入口| 欧美日韩你懂的| 久久精品水蜜桃av综合天堂| 一区二区三区在线观看视频| 偷窥国产亚洲免费视频| 国产传媒一区在线| 欧美精品久久久久久久多人混战 | 欧美视频日韩视频在线观看| 久久这里只精品最新地址| 中文字幕日本乱码精品影院| 青娱乐精品视频在线| 国产98色在线|日韩| 久久久久久久国产精品影院| 亚洲免费观看高清完整版在线| 美女一区二区三区在线观看| 99久久er热在这里只有精品66| 91精品国产综合久久精品app| 国产欧美日韩精品一区| 五月天激情综合网| 成人高清免费观看| 久久综合成人精品亚洲另类欧美| 亚洲视频一区二区在线| 国产在线不卡视频| 欧美一区二区三区视频在线观看| 国产精品国产三级国产三级人妇| 蜜桃一区二区三区在线| 色呦呦一区二区三区| 国产色产综合色产在线视频| 轻轻草成人在线| 欧美色图激情小说| 国产精品理论在线观看| 久久国产尿小便嘘嘘尿| 在线观看一区日韩| ...xxx性欧美| 成人手机在线视频| 久久免费美女视频| 日韩精品福利网| 日本韩国欧美国产| 日韩一区日韩二区| 丁香五精品蜜臀久久久久99网站 | 丁香婷婷综合色啪| 精品国产髙清在线看国产毛片| 亚洲狠狠爱一区二区三区| 91麻豆免费观看| 亚洲色图欧美激情| av在线不卡电影| 欧美极品xxx| 成人av高清在线| 国产精品久久久久影院老司| 国产精品一二三区| 久久综合九色综合欧美就去吻 | 色噜噜狠狠色综合中国| 亚洲天堂av老司机| 99久久婷婷国产综合精品电影| 久久免费偷拍视频| 国产一区美女在线| 久久久综合精品| 国产91在线观看丝袜| 国产精品久久久久一区二区三区| 成人一区二区三区| 亚洲男同性视频| 欧美私人免费视频| 日本不卡123| 精品国精品国产| 国产成人免费视频网站 | 激情国产一区二区| xvideos.蜜桃一区二区| 国产在线一区观看| 欧美激情综合在线| 99精品视频一区| 亚洲猫色日本管| 欧美日韩五月天| 六月婷婷色综合| 国产精品视频九色porn| 色老综合老女人久久久| 亚洲第一精品在线| 日韩精品一区二区三区在线| 国内精品免费**视频| 国产精品美女www爽爽爽| 99久免费精品视频在线观看 | 欧美伦理电影网| 久久99精品久久久久婷婷| 国产欧美精品在线观看| 91免费国产在线| 日韩专区在线视频| 日本一区二区三区视频视频| 日本高清不卡在线观看|