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

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

?? shell.cpp

?? 自己動手寫操作系統源代碼,不可多得的代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

	pControlBlock = GetKThreadControlBlock(dwID);
	if(NULL == pControlBlock)
	{
		PrintLine("The kernal thread is not exist.");
		goto __TERMINAL;
	}

	bResult = Str2Hex(pCmdObj->Parameter[1],&dwCommand);
	if(FALSE == bResult)
	{
		PrintLine("Invalid command code.");
		goto __TERMINAL;
	}

	switch(pCmdObj->byParameterNum)
	{
	case 2:                               //No parameter.
		msg.wCommand   = LOWORD(dwCommand);
		msg.dwParam_01 = 0L;
		msg.dwParam_02 = 0L;
		KtSendMessage(pControlBlock,&msg);
		break;
	case 3:                               //With one parameter.
		msg.wCommand   = LOWORD(dwCommand);
		bResult        = Str2Hex(pCmdObj->Parameter[2],&msg.dwParam_01);
		if(FALSE == bResult)
		{
			PrintLine("Invalid parameter.");
			break;
		}
		msg.dwParam_02 = 0L;
		KtSendMessage(pControlBlock,&msg);
		break;
	case 4:                               //With two parameter.
	default:
		msg.wCommand   = LOWORD(dwCommand);
		bResult        = Str2Hex(pCmdObj->Parameter[2],&msg.dwParam_01);
		if(FALSE == bResult)
		{
			PrintLine("Invalid parameter.");
			break;
		}
		bResult        = Str2Hex(pCmdObj->Parameter[3],&msg.dwParam_02);
		if(FALSE == bResult)
		{
			PrintLine("Invalid parameter.");
			break;
		}
		KtSendMessage(pControlBlock,&msg);
		break;
	}
__TERMINAL:
	if(NULL != pCmdObj)
		KMemFree((LPVOID)pCmdObj,KMEM_SIZE_TYPE_4K,4096);
	return;
}

//
//Memview handler.
//
VOID MemViewHandler(LPSTR pszCmd)
{
	__CMD_PARA_OBJ* pParaObj   = NULL;
	DWORD dwIndex              = 0x00000000;
	DWORD dwStartAddress       = 0x00000000;  //Local variables defination.
	DWORD bResult              = FALSE;
	DWORD dwNumber             = 0x00000000;
	DWORD i                    = 0x00000000;
	BYTE  memBuffer[12];

	if(0 == *pszCmd)
	{
__PRINT_USAGE:
		PrintLine("    Usage : View a block memory's content.");
		PrintLine("    memview -k[u] [process_id] start_mem_addr number");
		PrintLine("    Where :");
		PrintLine("      -k : View the kernal mode memory content.");
		PrintLine("      -u : View the user mode memory content.");
		PrintLine("      process_id : The process to be viewed.");
		PrintLine("      start_mem_addr : The start address of the memory be viewed.");
		PrintLine("      number : How many double word's memory to be viewed.");
		goto __TERMINAL;
	}

	pParaObj = FormParameterObj(pszCmd);    //Form the command parameter object by
	                                        //the parameter pszCmd.

	switch(pParaObj->byFunctionLabel)
	{
	case 0:                                 //If no function label,default to kernal memory
		                                    //view.
		//break;
	case 'k':
		bResult = Str2Hex(pParaObj->Parameter[0],&dwStartAddress);  //Convert tht first parameter
		                                                            //from string to hex number.
		if(FALSE == bResult)
		{
			PrintLine("Can not convert the first parameter to hex number.");
			break;
		}
		bResult = Str2Hex(pParaObj->Parameter[1],&dwNumber);  //Convert the second parameter
		                                                      //from string to hex number.
		if(FALSE == bResult)
		{
			PrintLine("Can not convert the second parameter to hex number.");
			break;
		}

		if(dwStartAddress + dwNumber * 4 > 16 * 1024 * 1024)
		{
			PrintLine("The memory block you want to view is exceed the kernal space.");
			break;
		}

		PrintLine("    ---------- ** Mem Content ** ----------    ");
		ChangeLine();
		GotoHome();
		for(i = 0;i < dwNumber;i ++)
		{
			PrintStr("        0x");
			Hex2Str(dwStartAddress,memBuffer);
			PrintStr(memBuffer);
			PrintStr("      0x");
			Hex2Str(*(DWORD*)dwStartAddress,memBuffer);
			PrintStr(memBuffer);
			ChangeLine();
			GotoHome();
			dwStartAddress += 4;
		}
		break;
	case 'u':
		PrintLine("Does not support now.");
		break;
	default:
		goto __PRINT_USAGE;
		break;
	}
	/*while(pParaObj)
	{
		for(dwIndex = 0;dwIndex < (DWORD)pParaObj->byParameterNum;dwIndex ++)
		{
			ConvertToUper(pParaObj->Parameter[dwIndex]);
			PrintLine(pParaObj->Parameter[dwIndex]);
		}
		pParaObj = pParaObj->pNext;
	}*/

__TERMINAL:
	if(NULL != pParaObj)
		KMemFree((LPVOID)pParaObj,KMEM_SIZE_TYPE_4K,4096);
	return;
}

//LPSTR g_pszTest = "Hello,China!!";

#define KMSG_USER_SUM 0x00FF
#define KMSG_USER_ACC 0x00FE

static __KTHREAD_CONTROL_BLOCK* g_pThread1ControlBlock = NULL;

VOID ShellThread1(LPVOID)
{
	static DWORD dwSum = 0L;
	__KTHREAD_CONTROL_BLOCK* pControlBlock = g_pThread1ControlBlock;
	__KTHREAD_MSG            msg;
	DWORD                    dwTmp1        = 0L;
	DWORD                    dwTmp2        = 0L;
	BYTE                     Buffer[32];

	while(TRUE)
	{
		if(KtGetMessage(pControlBlock,&msg))
		{
			switch(msg.wCommand)
			{
			case KMSG_USER_SUM:
				dwTmp1 = msg.dwParam_01;
				dwTmp2 = msg.dwParam_02;
				dwSum  = dwTmp1 + dwTmp2;
				Int2Str(dwSum,Buffer);
				PrintLine("The sum is : ");
				PrintStr(Buffer);
				break;
			case KMSG_USER_ACC:
				dwTmp1 = msg.dwParam_01;
				dwSum  = 0L;
				for(dwTmp2 = 0;dwTmp2 < dwTmp1;dwTmp2 ++)
				{
					dwSum += dwTmp2 + 1;
				}
				PrintLine("The accumulated result is : ");
				Int2Str(dwSum,Buffer);
				PrintStr(Buffer);
				break;
			default:
				break;
			}
		}
	}
}

VOID ShellThread2(LPVOID)
{
	static DWORD dwThread2Counter = 0x0000;
	while(TRUE)
	{
		dwThread2Counter ++;
		if(0 == dwThread2Counter % 0x00FFFFFF)
		{
			PrintLine("Kernal thread is running : kernal-thread-2.");
			dwThread2Counter = 0;
		}
	}
}

DWORD ShellThread3(LPVOID)
{
	DWORD dwCounter = 1L;
	while(dwCounter < 10)
	{
		dwCounter ++;
		PrintLine("Thread 3 is running,increment the dwCounter.");
	}
	return 0L;
}

__EVENT* lpWriteEvent  = NULL;
__EVENT* lpReadEvent   = NULL;

DWORD ReadThread(LPVOID)
{
	while(TRUE)
	{
		lpReadEvent->WaitForThisObject((__COMMON_OBJECT*)lpReadEvent);
		PrintLine("Read resource from shared pool.");
		lpReadEvent->ResetEvent((__COMMON_OBJECT*)lpReadEvent);
		lpWriteEvent->SetEvent((__COMMON_OBJECT*)lpWriteEvent);
	}
	return 0L;
}

DWORD WriteThread(LPVOID)
{
	while(TRUE)
	{
		lpWriteEvent->WaitForThisObject((__COMMON_OBJECT*)lpWriteEvent);
		PrintLine("Write resource to shared pool.");
		lpWriteEvent->ResetEvent((__COMMON_OBJECT*)lpWriteEvent);
		lpReadEvent->SetEvent((__COMMON_OBJECT*)lpReadEvent);
	}
	return 0L;
}

DWORD SleepThread(LPVOID)
{
	DWORD dwSleepCount = 10L;

	while(dwSleepCount)
	{
		PrintLine("I am sleeping thread.");
		KernelThreadManager.Sleep((__COMMON_OBJECT*)&KernelThreadManager,500);
		dwSleepCount --;
	}
	return 0L;
}

DWORD EchoRoutine(LPVOID)
{
	__KERNEL_THREAD_MESSAGE Msg;
	BYTE                    bt;
	WORD                    wr = 0x0700;
	while(TRUE)
	{
		if(GetMessage(&Msg))
		{
			if(Msg.wCommand == MSG_KEY_DOWN)
			{
				bt = LOBYTE(LOWORD(Msg.dwParam));
				if(('q' == bt) || ('x' == bt))
					goto __TERMINAL;
				wr += bt;
				PrintCh(wr);
				wr = 0x0700;
			}
		}
	}
__TERMINAL:
	return 0L;
}

__MUTEX*    lpMutex   = NULL;
__MAILBOX*  lpMailBox = NULL;
__EVENT*    lpEvent   = NULL;

static DWORD SynThread1(LPVOID)
{
	__KERNEL_THREAD_MESSAGE Msg;
	BYTE                    bt;

	while(TRUE)
	{
		if(GetMessage(&Msg))
		{
			if(Msg.wCommand == MSG_KEY_DOWN)
			{
				PrintLine("Set event object.");
				lpEvent->SetEvent((__COMMON_OBJECT*)lpEvent);
				bt = LOBYTE(LOWORD(Msg.dwParam));
				if('q' == bt)
					return 0L;
			}
		}
	}
	return 0L;
}

static DWORD SynThread2(LPVOID)
{
	DWORD           dwRetVal = 0L;

	while(TRUE)
	{
		dwRetVal = lpEvent->WaitForThisObjectEx((__COMMON_OBJECT*)lpEvent,
			300);
		switch(dwRetVal)
		{
		case OBJECT_WAIT_RESOURCE:
			PrintLine("I am first thread,wait a resource.");
			lpEvent->ResetEvent((__COMMON_OBJECT*)lpEvent);
			break;
		case OBJECT_WAIT_TIMEOUT:
			PrintLine("I am first thread,wait time out...");
			break;
		}
	}
	return 0L;
}

static DWORD SynThread3(LPVOID)
{	
	DWORD           dwRetVal = 0L;

	while(TRUE)
	{
		dwRetVal = lpEvent->WaitForThisObjectEx((__COMMON_OBJECT*)lpEvent,
			600);
		switch(dwRetVal)
		{
		case OBJECT_WAIT_RESOURCE:
			PrintLine("I am second thread,wait a resource.");
			lpEvent->ResetEvent((__COMMON_OBJECT*)lpEvent);
			break;
		case OBJECT_WAIT_TIMEOUT:
			PrintLine("I am second thread,wait time out...");
			break;
		}
	}
	return 0L;
}

static DWORD CriticalThread1(LPVOID)
{
	DWORD dwCounter = 0;
	while(TRUE)
	{
		dwCounter ++;
		if(0xFFFFFFFF == dwCounter)
		{
			//PrintLine("I am critical kernel thread 1.");
			dwCounter = 0;
			//break;
		}
	}
	return 0L;
}

static DWORD CriticalThread2(LPVOID)
{
	DWORD dwCounter = 0;
	while(TRUE)
	{
		dwCounter ++;
		if(0xFFFFFFFF == dwCounter)
		{
			//PrintLine("I am critical kernel thread 2.");
			dwCounter = 0;
			//break;
		}
	}
	return 0L;
}

static DWORD CriticalThread3(LPVOID)
{
	DWORD dwCounter = 0;
	while(TRUE)
	{
		dwCounter ++;
		if(0xFFFFFFFF == dwCounter)
		{
			//PrintLine("I am critical kernel thread 3.");
			dwCounter = 0;
			//break;
		}
	}
	return 0L;
}

static DWORD HighThread(LPVOID)
{
	DWORD dwCounter = 0;
	while(TRUE)
	{
		dwCounter ++;
		if(0xFFFFFFFF == dwCounter)
		{
			//PrintLine("I am high priority kernel thread.");
			dwCounter = 0;
			//break;
		}
	}
	return 0L;
}

static DWORD LazyPig(LPVOID)
{
	DWORD dwRice = 0;
	while(TRUE)
	{
		while(TRUE)
		{
			dwRice ++;
			if(0xFFFFFFFF == dwRice)
			{
				dwRice = 0;
				break;
			}
		}
		KernelThreadManager.Sleep((__COMMON_OBJECT*)&KernelThreadManager,1000);  //Sleep 1s.
	}
	return 0L;
}

VOID TestHandler(LPSTR)
{
	__KERNEL_THREAD_OBJECT*  lpCritical1 = NULL;
	__KERNEL_THREAD_OBJECT*  lpCritical2 = NULL;
	__KERNEL_THREAD_OBJECT*  lpCritical3 = NULL;
	__KERNEL_THREAD_OBJECT*  lpHigh      = NULL;

	lpCritical1 = KernelThreadManager.CreateKernelThread(
		(__COMMON_OBJECT*)&KernelThreadManager,
		0L,
		KERNEL_THREAD_STATUS_READY,
		PRIORITY_LEVEL_LOW,
		CriticalThread1,
		NULL,
		NULL,
		"Test thread1");

	lpCritical2 = KernelThreadManager.CreateKernelThread(
		(__COMMON_OBJECT*)&KernelThreadManager,
		0L,
		KERNEL_THREAD_STATUS_READY,
		PRIORITY_LEVEL_LOW,
		CriticalThread2,
		NULL,
		NULL,
		"Test thread2");

	lpCritical3 = KernelThreadManager.CreateKernelThread(
		(__COMMON_OBJECT*)&KernelThreadManager,
		0L,
		KERNEL_THREAD_STATUS_READY,
		PRIORITY_LEVEL_LOW,
		CriticalThread3,
		NULL,
		NULL,
		"Test thread3");

	lpHigh = KernelThreadManager.CreateKernelThread(
		(__COMMON_OBJECT*)&KernelThreadManager,
		0L,
		KERNEL_THREAD_STATUS_READY,
		PRIORITY_LEVEL_LOW,
		HighThread,
		NULL,
		NULL,
		"Test thread4");

	KernelThreadManager.CreateKernelThread(
		(__COMMON_OBJECT*)&KernelThreadManager,
		0L,
		KERNEL_THREAD_STATUS_READY,
		PRIORITY_LEVEL_NORMAL,
		LazyPig,
		NULL,
		NULL,
		"Lazy pig");

	/*
	lpCritical1->WaitForThisObject((__COMMON_OBJECT*)lpCritical1);
	lpCritical2->WaitForThisObject((__COMMON_OBJECT*)lpCritical2);
	lpCritical3->WaitForThisObject((__COMMON_OBJECT*)lpCritical3);
	lpHigh->WaitForThisObject((__COMMON_OBJECT*)lpHigh);

	KernelThreadManager.DestroyKernelThread((__COMMON_OBJECT*)&KernelThreadManager,
		(__COMMON_OBJECT*)lpCritical1);
	KernelThreadManager.DestroyKernelThread((__COMMON_OBJECT*)&KernelThreadManager,
		(__COMMON_OBJECT*)lpCritical2);
	KernelThreadManager.DestroyKernelThread((__COMMON_OBJECT*)&KernelThreadManager,
		(__COMMON_OBJECT*)lpCritical3);
	KernelThreadManager.DestroyKernelThread((__COMMON_OBJECT*)&KernelThreadManager,
		(__COMMON_OBJECT*)lpHigh);
		*/
}

VOID IoCtrlApp(LPSTR)
{
	__KERNEL_THREAD_OBJECT*    lpIoCtrlThread    = NULL;

	lpIoCtrlThread = KernelThreadManager.CreateKernelThread(
		(__COMMON_OBJECT*)&KernelThreadManager,
		0L,
		KERNEL_THREAD_STATUS_READY,
		PRIORITY_LEVEL_NORMAL,
		IoCtrlStart,
		NULL,
		NULL,
		"IO CTRL");
	if(NULL == lpIoCtrlThread)    //Can not create the IO control thread.
	{
		PrintLine("Can not create IO control thread.");
		return;
	}

	DeviceInputManager.SetFocusThread((__COMMON_OBJECT*)&DeviceInputManager,
		(__COMMON_OBJECT*)lpIoCtrlThread);    //Set the current focus to IO control
	                                          //application.

	lpIoCtrlThread->WaitForThisObject((__COMMON_OBJECT*)lpIoCtrlThread);  //Block the shell
	                                                                      //thread until
	                                                                      //the IO control
	                                                                      //application end.
	KernelThreadManager.DestroyKernelThread((__COMMON_OBJECT*)&KernelThreadManager,
		(__COMMON_OBJECT*)lpIoCtrlThread);  //Destroy the thread object.

}

//
//System diag application's shell start code.
//

VOID SysDiagApp(LPSTR)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本韩国精品一区二区在线观看| 精品国产伦一区二区三区观看体验 | 日本欧美肥老太交大片| 一区二区高清视频在线观看| 蜜桃视频一区二区| 日本韩国一区二区三区| 欧美国产日韩精品免费观看| 免费观看一级特黄欧美大片| 在线观看成人小视频| 国产精品久久毛片av大全日韩| 蜜臀av一区二区在线免费观看| 在线观看视频91| 中文字幕一区二区三区在线播放| 精品一区二区免费| 欧美日韩成人综合天天影院| 亚洲黄色av一区| 成人99免费视频| 国产亚洲欧洲一区高清在线观看| 开心九九激情九九欧美日韩精美视频电影| 91精彩视频在线| 亚洲超丰满肉感bbw| 91香蕉视频mp4| 综合色天天鬼久久鬼色| 成人免费高清在线| 国产女人aaa级久久久级| 精品一区二区三区日韩| 亚洲精品在线观看网站| 激情综合网av| 精品久久久久久久久久久院品网| 午夜不卡av在线| 欧美美女直播网站| 日韩精品欧美精品| 欧美日韩国产一级二级| 日韩不卡一区二区| 日韩欧美一级精品久久| 久草精品在线观看| 久久伊人中文字幕| 懂色av中文字幕一区二区三区| 国产欧美一区二区精品婷婷| 丁香另类激情小说| 亚洲视频网在线直播| 91视频精品在这里| 午夜亚洲福利老司机| 91精品国产综合久久久久久久久久 | 99精品视频在线观看| 国产精品麻豆久久久| 色综合久久综合网| 五月综合激情婷婷六月色窝| 欧美一区二区三区的| 美女高潮久久久| 久久婷婷色综合| 99视频国产精品| 亚洲小少妇裸体bbw| 日韩一区二区三区av| 国产精品原创巨作av| 国产精品女人毛片| 欧美福利电影网| 国产一区二区三区日韩| 亚洲免费高清视频在线| 欧美一级生活片| 92精品国产成人观看免费| 午夜精品久久久久久久| 精品国精品国产| 91视频xxxx| 久久不见久久见免费视频1| 久久先锋影音av鲁色资源网| 日本精品一区二区三区四区的功能| 日韩精品国产精品| 中文天堂在线一区| 欧美一区二区三区在线观看 | 欧美亚洲动漫另类| 精品一区二区日韩| 一区二区三区日韩在线观看| 日韩精品专区在线影院观看 | 4438亚洲最大| 国产91在线观看丝袜| 蜜臀精品久久久久久蜜臀| 亚洲欧洲av一区二区三区久久| 欧美另类z0zxhd电影| 成人精品一区二区三区四区| 男女激情视频一区| 亚洲国产视频直播| 中文字幕中文字幕中文字幕亚洲无线| 91精品国模一区二区三区| 99精品国产99久久久久久白柏| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品二三区| 欧美大片在线观看一区| 欧美日韩不卡一区二区| 97aⅴ精品视频一二三区| 久久精品国产秦先生| 亚洲成在人线免费| 亚洲靠逼com| 国产精品萝li| 久久免费看少妇高潮| 4438x成人网最大色成网站| 色综合网站在线| 99久久99久久精品国产片果冻 | 中文字幕一区日韩精品欧美| 日韩欧美一级精品久久| 欧美电影一区二区| 欧美系列在线观看| 91久久香蕉国产日韩欧美9色| 成人综合婷婷国产精品久久蜜臀| 精品一区二区三区影院在线午夜| 日本美女一区二区| 三级亚洲高清视频| 午夜久久久久久久久久一区二区| 亚洲免费视频成人| 亚洲精品免费一二三区| 亚洲精品高清在线观看| 一区二区三区在线观看国产| 亚洲少妇最新在线视频| 亚洲人成在线播放网站岛国| 中文字幕亚洲一区二区va在线| 国产精品久久久久久久久久久免费看 | 久久久精品黄色| 欧美一级理论片| 4hu四虎永久在线影院成人| 欧美精品免费视频| 欧美一区2区视频在线观看| 欧美一区二区在线看| 日韩精品一区国产麻豆| 精品国产网站在线观看| 久久久五月婷婷| 国产精品丝袜91| 亚洲欧美一区二区三区孕妇| 亚洲男女毛片无遮挡| 亚洲成人av免费| 欧美aaaaa成人免费观看视频| 精品中文字幕一区二区| 国产精品影音先锋| av电影在线不卡| 欧美性淫爽ww久久久久无| 欧美精品三级在线观看| 亚洲精品一区二区三区在线观看| 久久久一区二区| 亚洲精品水蜜桃| 日韩电影一二三区| 成人性生交大合| 欧美亚一区二区| 久久网站最新地址| 亚洲伊人色欲综合网| 麻豆高清免费国产一区| 成人h版在线观看| 欧美精品 国产精品| 久久亚洲免费视频| 一区二区三区欧美亚洲| 久久黄色级2电影| 91小视频免费看| 欧美成人精品福利| 1区2区3区精品视频| 美国毛片一区二区三区| 成人免费视频国产在线观看| 欧美日韩免费观看一区二区三区| 精品久久久久久久久久久久包黑料| 国产精品人人做人人爽人人添 | 国产99久久久精品| 欧美在线|欧美| 久久久久久99精品| 偷拍自拍另类欧美| 92国产精品观看| 精品福利视频一区二区三区| 亚洲美女视频一区| 国产自产高清不卡| 51久久夜色精品国产麻豆| 亚洲色大成网站www久久九九| 六月婷婷色综合| 欧美日韩一区二区三区视频| 国产精品久久久久久久第一福利| 美日韩一区二区三区| 在线免费观看不卡av| 久久久久久电影| 日本不卡一区二区| 欧美性感一区二区三区| 欧美国产日韩精品免费观看| 蜜桃av噜噜一区| 91精品国产一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 韩国一区二区三区| 欧美电影免费观看高清完整版在 | 国产麻豆精品久久一二三| 欧美日韩日本视频| 亚洲欧美偷拍卡通变态| a亚洲天堂av| 国产精品久久久久久久久果冻传媒 | 婷婷成人激情在线网| 91蝌蚪porny| 国产精品私房写真福利视频| 国产美女主播视频一区| 337p日本欧洲亚洲大胆精品| 麻豆精品视频在线观看免费| 91精品麻豆日日躁夜夜躁| 亚洲妇女屁股眼交7| 91丨porny丨中文| 亚洲日本在线天堂| 日本高清不卡在线观看| 一区二区三区视频在线看| 在线国产电影不卡| 亚洲在线视频一区|