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

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

?? ramios.c

?? 內存驅動器的源代碼ramdisk,很有用的
?? C
字號:
//=============================================================================
//
// Compuware Corporation
// NuMega Lab
// 9 Townsend West
// Nashua, NH 03060  USA
//
// Copyright (c) 1998 Compuware Corporation. All Rights Reserved.
// Unpublished - rights reserved under the Copyright laws of the
// United States.
//
//=============================================================================

// RFSDIOS.C - I/O Subsystem interface for Registry File System
// Copyright (c) 1996, Compuware Corporation

// This module contains functions that are called by the IOS.
#include  "ramdisk.h"
#include PAGEABLE_CODE_SEGMENT
#include PAGEABLE_DATA_SEGMENT

//BYTE Drive;

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// DoCallDown passes a request to the next lower layer. Note that the
// documentation about how to do this is totally wrong: you don't just
// add sizeof(DCB_cd_entry) to the calldown pointer, you follow a
// linked list from one calldown entry to the next.

void __declspec(naked) DoCallDown(IOP* iop)
	{							// DoCallDown
	_asm
		{						// call down to next layer
		mov	ecx, [esp+4]
		mov	eax, [ecx]IOP.IOP_calldown_ptr
		mov eax, [eax]DCB_cd_entry.DCB_cd_next
		mov [ecx]IOP.IOP_calldown_ptr, eax
		jmp [eax]DCB_cd_entry.DCB_cd_io_address
		}						// call down to next layer
	}							// DoCallDown

// DoCallBack handles completion of an I/O request by calling the
// previous level's callback routine.

void __declspec(naked) DoCallBack(IOP* iop)
	{							// DoCallBack
	_asm
		{						// call back to previous layer
		mov ecx, [esp+4]
		sub [ecx]IOP.IOP_callback_ptr, size IOP_callback_entry
		mov eax, [ecx]IOP.IOP_callback_ptr
		jmp [eax]IOP_callback_entry.IOP_CB_address
		}						// call back to previous layer
	}							// DoCallBack

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// Function
//	RAMDISK_Aer
//
// Purpose
//	Async Event Routine for RFSD	
//
// Parameters
//	pAep	pointer to the AEP structure
//
// Return Value
//	Depends on AEP subfunction.
//
// Remarks
//	The function name is required by usage of the macro 
//	Define_Port_Driver (see regfsd.c).
//
//	We handle the following AEPs:
//
//	  AEP_INITIALIZE:	create a DDB for our virtual drive
//	  AEP_INQUIRY:		set up a fake DCB
//	  AEP_CONFIG_DCB:	associate drive letter and insert into
//				calldown list
//	  AEP_BOOT_COMPLETE:	signal OK
//
VOID OnRequest(IOP* iop);
int ndevices = 0;				// # devices we've found

VOID __cdecl RAMDISK_Aer(AEP* pAep)
{
	DCB* pDcb;
	IOSDDB* pNewDDB;	
	ISP_ddb_create CreateDDBPacket;
	ISP_calldown_insert InsertISP;
	
	switch (pAep->AEP_func)
	{
	case AEP_INITIALIZE:
		// Create a DDB for our "controller". This will cause IOS to send
		// AEP_INQUIRY packets for each unit on the controller.
		CreateDDBPacket.ISP_ddb_hdr.ISP_func = ISP_CREATE_DDB;
		CreateDDBPacket.ISP_ddb_hdr.ISP_result = 0;		
		CreateDDBPacket.ISP_ddb_size = sizeof(IOSDDB);
		CreateDDBPacket.ISP_ddb_ptr = 0;
		CreateDDBPacket.ISP_ddb_flags = 0;
		
		RAMDISK_Ilb.ILB_service_rtn((PISP)&CreateDDBPacket);
		pNewDDB = (IOSDDB*)CreateDDBPacket.ISP_ddb_ptr;

		pAep->AEP_result = AEP_SUCCESS;
		break;

   	case AEP_UNINITIALIZE:
        	pAep->AEP_result = AEP_SUCCESS;
        	break;

	case AEP_DEVICE_INQUIRY:
		// The IOS sends this in response to the creation of the DDB. On the
		// first call (DCB_unit_on_ctl == 0) we set up the supplied fake DCB
		// with the parametes for our virtual drive. On subsequent calls, we
		// anwer "no more devices". This terminates the inquiry.

		pDcb = (DCB*)(((AEP_inquiry_device*)pAep)->AEP_i_d_dcb);
		ASSERT(pDcb);

		if (pDcb->DCB_unit_on_ctl == 0)
		{
			strcpy(pDcb->DCB_vendor_id, "ZXYZLL");
			strcpy(pDcb->DCB_product_id, "VRAMDISK");
			strcpy(pDcb->DCB_port_name, "VRAMDISK");			
			pAep->AEP_result = AEP_SUCCESS;
		}
		else
			pAep->AEP_result = AEP_NO_MORE_DEVICES;	
		break;

	case AEP_CONFIG_DCB:

		// The IOS sends this AEP after each successful inquiry call. We
		// associate the DCB with a drive letter and insert the request
		// handler into the calldown chain.
		pDcb = (DCB*)(((AEP_dcb_config*)pAep)->AEP_d_c_dcb);
		ASSERT(pDcb);
		if (!(pDcb->DCB_cmn.DCB_device_flags & DCB_DEV_PHYSICAL))
		{
			pAep->AEP_result = AEP_SUCCESS;
			break;
		}
		ASSERT(memcmp(pDcb->DCB_vendor_id, "ZXYZLL", 6) == 0);

		SetupDCB(pDcb);		
		
		//Drive = AssociateDriveLetter((DCB_COMMON*)pDcb);
			
		memset(&InsertISP, 0, sizeof(InsertISP));
		InsertISP.ISP_i_cd_hdr.ISP_func = ISP_INSERT_CALLDOWN;	
		InsertISP.ISP_i_cd_hdr.ISP_result = 0;			
		InsertISP.ISP_i_cd_dcb = (DCB_COMMON *)pDcb;					
                InsertISP.ISP_i_cd_req = OnRequest;	
		InsertISP.ISP_i_cd_ddb = (PDDB) (((AEP_dcb_config*)pAep)->AEP_d_c_hdr.AEP_ddb);               		
		InsertISP.ISP_i_cd_expan_len = 0;				
		InsertISP.ISP_i_cd_flags = pDcb->DCB_cmn.DCB_dmd_flags | DCB_dmd_serialize; 
                InsertISP.ISP_i_cd_lgn = ((AEP_dcb_config*)pAep)->AEP_d_c_hdr.AEP_lgn;
		RAMDISK_Ilb.ILB_service_rtn((PISP)&InsertISP);
		
		++ndevices;					// this will cause us to stay loader after next AEP_BOOT_COMPLETE

		pAep->AEP_result = AEP_SUCCESS;
		break;

	case AEP_UNCONFIG_DCB:
		pDcb = (DCB*)(((PAEP_dcb_unconfig)pAep)->AEP_d_u_dcb);
		ASSERT(pDcb);
		if (!(pDcb->DCB_cmn.DCB_device_flags & DCB_DEV_PHYSICAL)
			|| memcmp(pDcb->DCB_vendor_id, "ZXYZLL", 6) != 0)
		{
			pAep->AEP_result = AEP_SUCCESS;
			break;
		}
		--ndevices;					// this will cause to unload after next AEP_BOOT_COMPLETE
		ASSERT(ndevices >= 0);
		pAep->AEP_result = AEP_SUCCESS;
        	break;

	case AEP_BOOT_COMPLETE:
		pAep->AEP_result = ndevices ? AEP_SUCCESS : AEP_FAILURE; // unload if no devices
	
		break;

	default:
		pAep->AEP_result = AEP_FAILURE;
		break;
	}		
}


VOID OnRequest(IOP* iop)
{							// OnRequest	
	#define ior iop->IOP_ior
	DWORD funcode = ior.IOR_func;
	PDCB dcb = (PDCB) iop->IOP_physical_dcb;

	ior.IOR_status = IORS_SUCCESS; // assume it'll succeed
	dcb->DCB_cmn.DCB_device_flags |= DCB_DEV_IO_ACTIVE;

	switch (funcode)
	{					// dispatch function processor

	///////////////////////////////////////////////////////////////////////
	
	case IOR_READ:			// IOR_func == 0
		{					// IOR_READ
		DWORD sector = ior.IOR_start_addr[0];
		PBYTE diskdata = (PBYTE) (base + sector * dcb->DCB_actual_blk_size);

		ASSERT(sector < dcb->DCB_actual_sector_cnt[0]);
		ASSERT(ior.IOR_start_addr[1] == 0);

		if (ior.IOR_flags & IORF_SCATTER_GATHER)
			{				// have scatter/gather structures
			_BlockDev_Scatter_Gather* sgd = (_BlockDev_Scatter_Gather*) ior.IOR_buffer_ptr;
			PBYTE memdata;
			DWORD nbytes;
			while ((nbytes = sgd->BD_SG_Count))
				{			// for each s/g structure
				memdata = (PBYTE) sgd->BD_SG_Buffer_Ptr; // linear address!
				if (!(ior.IOR_flags & IORF_CHAR_COMMAND))
					nbytes *= dcb->DCB_actual_blk_size;
				memcpy(memdata, diskdata, nbytes);
				diskdata += nbytes;
				++sgd;
				}			// for each s/g structure
			}				// have scatter/gather structures
		else
			{				// have simple buffer address
			PBYTE memdata = (PBYTE) ior.IOR_buffer_ptr;
			DWORD nbytes = ior.IOR_xfer_count;
			if (!(ior.IOR_flags & IORF_CHAR_COMMAND))
				nbytes *= dcb->DCB_actual_blk_size;
			memcpy(memdata, diskdata, nbytes);
			}				// have simple buffer address
		
		break;
		}					// IOR_READ

	///////////////////////////////////////////////////////////////////////
	
	case IOR_WRITE:			// IOR_func == 1
		{					// IOR_WRITE
		DWORD sector = ior.IOR_start_addr[0];
		PBYTE diskdata = (PBYTE) (base + sector * dcb->DCB_actual_blk_size);

		ASSERT(sector);		// why is anyone rewriting the boot sector??
		ASSERT(sector < dcb->DCB_actual_sector_cnt[0]);
		ASSERT(ior.IOR_start_addr[1] == 0);

		if (ior.IOR_flags & IORF_SCATTER_GATHER)
			{				// have scatter/gather structures
			_BlockDev_Scatter_Gather* sgd = (_BlockDev_Scatter_Gather*) ior.IOR_buffer_ptr;
			PBYTE memdata;
			DWORD nbytes;
			while ((nbytes = sgd->BD_SG_Count))
				{			// for each s/g structure
				memdata = (PBYTE) sgd->BD_SG_Buffer_Ptr; // linear address!
				if (!(ior.IOR_flags & IORF_CHAR_COMMAND))
					nbytes *= dcb->DCB_actual_blk_size;
				memcpy(diskdata, memdata, nbytes);
				diskdata += nbytes;
				++sgd;
				}			// for each s/g structure
			}				// have scatter/gather structures
		else
			{				// have simple buffer address
			PBYTE memdata = (PBYTE) ior.IOR_buffer_ptr;
			DWORD nbytes = ior.IOR_xfer_count;
			if (!(ior.IOR_flags & IORF_CHAR_COMMAND))
				nbytes *= dcb->DCB_actual_blk_size;
			memcpy(diskdata, memdata, nbytes);
			}				// have simple buffer address
		
		break;
		}					// IOR_WRITE

	///////////////////////////////////////////////////////////////////////

	default:
		dcb->DCB_cmn.DCB_device_flags &= ~DCB_DEV_IO_ACTIVE;
		DoCallDown(iop);
		return;
	}					// dispatch function processor

	dcb->DCB_cmn.DCB_device_flags &= ~DCB_DEV_IO_ACTIVE;
	DoCallBack(iop);		// we're done with this request

	#undef ior
}							// OnRequest

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久久久久久电影网 | 国产成a人无v码亚洲福利| 国产xxx精品视频大全| 欧美午夜免费电影| 久久精品无码一区二区三区| 亚洲福利视频一区| 国产成人夜色高潮福利影视| 7777精品伊人久久久大香线蕉完整版 | 亚洲综合999| 国产成人一区在线| 欧美大白屁股肥臀xxxxxx| 最好看的中文字幕久久| 精品一区二区在线观看| 欧美日韩激情一区二区三区| 中文字幕中文字幕中文字幕亚洲无线| 麻豆国产91在线播放| 欧美三级视频在线播放| 亚洲品质自拍视频| 国产jizzjizz一区二区| 精品久久久久香蕉网| 日韩福利电影在线观看| 欧美三级蜜桃2在线观看| 国产精品网站在线观看| 国产麻豆成人传媒免费观看| 91麻豆精品91久久久久久清纯| 亚洲色图.com| 色综合中文综合网| 亚洲精品欧美在线| 91美女在线观看| 国产精品动漫网站| 高清在线不卡av| 中文字幕精品一区二区三区精品| 国内成人自拍视频| 久久久久亚洲综合| 极品少妇一区二区| 久久久噜噜噜久久中文字幕色伊伊 | 成人听书哪个软件好| 久久久精品人体av艺术| 国产凹凸在线观看一区二区| 国产精品私人自拍| av中文字幕不卡| 亚洲精品国产一区二区精华液| 色综合久久久久久久久| 夜夜揉揉日日人人青青一国产精品| 97久久超碰精品国产| 一区二区国产盗摄色噜噜| 欧美日韩国产在线观看| 日韩中文字幕av电影| 91精品国产综合久久福利| 蜜桃视频在线观看一区二区| 亚洲精品在线观| 成人黄色在线看| 亚洲日本在线天堂| 欧美区一区二区三区| 美国av一区二区| 国产欧美一区二区三区网站| 91免费看片在线观看| 亚洲成年人网站在线观看| 日韩久久久精品| 国产不卡视频在线播放| 亚洲精品自拍动漫在线| 欧美一三区三区四区免费在线看| 国产在线国偷精品产拍免费yy| 亚洲欧美自拍偷拍色图| 欧美巨大另类极品videosbest | 亚洲五月六月丁香激情| 日韩欧美黄色影院| aaa欧美色吧激情视频| 亚洲国产日韩av| 精品国产亚洲一区二区三区在线观看| 成人免费黄色在线| 亚洲va欧美va国产va天堂影院| 久久亚洲免费视频| 在线视频一区二区三区| 精品综合免费视频观看| 伊人夜夜躁av伊人久久| 日韩欧美国产综合一区 | 国产精品一区二区在线看| 国产精品久久久久影院色老大 | 欧美伊人久久久久久久久影院 | 日本不卡的三区四区五区| 国产日韩欧美精品在线| 欧美日韩日本视频| 国产69精品久久久久毛片 | 国产一区二区美女诱惑| 亚洲三级视频在线观看| www国产精品av| 欧美私人免费视频| a美女胸又www黄视频久久| 国产在线麻豆精品观看| 午夜精品一区二区三区电影天堂| 国产精品天干天干在观线| 日韩一区二区三区视频在线观看| 一本一道综合狠狠老| 国产99久久久精品| 久草热8精品视频在线观看| 亚洲一区二区在线免费看| 中文字幕av一区二区三区| 欧美一级电影网站| 精品视频在线看| 色婷婷综合久久久久中文 | 欧美亚洲国产一区二区三区va | 欧美日韩国产成人在线免费| 99精品视频中文字幕| 国产精品一区三区| 激情深爱一区二区| 国产亚洲1区2区3区| 国产精华液一区二区三区| 免费看黄色91| 亚洲地区一二三色| 一区二区三区欧美亚洲| 综合网在线视频| 国产精品网曝门| 欧美激情一区二区三区四区| 国产日韩欧美在线一区| 日本一区二区三区视频视频| 久久精品一区蜜桃臀影院| 久久精品网站免费观看| 久久久久久久免费视频了| 久久综合九色综合97婷婷 | 五月综合激情网| 性做久久久久久久免费看| 亚洲成人激情综合网| 亚洲国产一区二区三区| 午夜视频在线观看一区二区| 午夜久久久久久| 免费高清在线视频一区·| 日本不卡123| 狠狠色丁香婷婷综合久久片| 国产精品18久久久久久久久久久久 | 亚洲超丰满肉感bbw| 午夜精品久久久久久久久| 日韩精品一级二级| 黄色日韩网站视频| 成人午夜免费电影| 91久久精品国产91性色tv| 欧美视频一区二| 日韩欧美成人一区二区| 国产日产欧美精品一区二区三区| 国产精品高清亚洲| 午夜视频一区二区| 国产精品一二三区在线| 色综合久久天天| 日韩免费福利电影在线观看| 国产三级精品在线| 一区二区免费视频| 精品一区二区三区av| 成人一区二区三区中文字幕| 欧洲一区在线电影| 欧美电视剧免费全集观看| 国产精品五月天| 亚洲高清中文字幕| 国产综合久久久久久鬼色 | 欧美一级片在线看| 亚洲国产精品t66y| 亚欧色一区w666天堂| 国内精品国产三级国产a久久| 色综合色综合色综合| 日韩欧美亚洲国产精品字幕久久久| 欧美激情中文字幕一区二区| 亚洲国产精品人人做人人爽| 国产精品中文字幕一区二区三区| 91麻豆国产自产在线观看| 欧美一卡在线观看| 中文字幕一区二区三区乱码在线| 奇米色一区二区| 99re热视频精品| 久久精品在线免费观看| 五月婷婷久久综合| 99久久精品99国产精品| 欧美r级电影在线观看| 一区二区三区不卡在线观看| 狠狠色狠狠色综合系列| 欧美色图12p| 最新不卡av在线| 国产成人在线免费观看| 日韩无一区二区| 一区二区三区中文字幕精品精品| 国产sm精品调教视频网站| 日韩欧美亚洲国产另类| 偷拍自拍另类欧美| 色婷婷av一区| 国产精品国产自产拍高清av王其| 青青草成人在线观看| 欧美天天综合网| 一区二区三区四区在线| 成人av资源在线观看| ww亚洲ww在线观看国产| 美女免费视频一区| 欧美电影一区二区| 亚洲一区二区三区三| 色哟哟一区二区在线观看| 国产喷白浆一区二区三区| 久久99精品国产麻豆婷婷| 在线电影欧美成精品| 亚洲电影一级黄| 在线观看亚洲a| 夜夜精品浪潮av一区二区三区| 色www精品视频在线观看| 亚洲欧美偷拍另类a∨色屁股|