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

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

?? rtal.c

?? PNX系列設(shè)備驅(qū)動(dòng) PNX系列設(shè)備驅(qū)動(dòng)
?? C
字號(hào):
/*---------------------------------------------------------------------------- 
COPYRIGHT (c) 1997 by Philips Semiconductors

THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED AND COPIED IN 
ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH A LICENSE AND WITH THE 
INCLUSION OF THE THIS COPY RIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES 
OF THIS SOFTWARE MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER
PERSON. THE OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. 

THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ANY PRIOR NOTICE
AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY Philips Semiconductor. 

PHILIPS ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF THIS SOFTWARE
ON PLATFORMS OTHER THAN THE ONE ON WHICH THIS SOFTWARE IS FURNISHED.
----------------------------------------------------------------------------*/
/*
    FILE    :   RTAL.c

	HISTORY
	960510	Tilakraj Roy 	Created
	980601	Tilakraj Roy	Ported to Win95 Kernel

    ABSTRACT
    Contains support functions that are OS / Platform dependent.
    This file should be in the platform specific directories,
    However most platforms can use this file exactly as it is,
    so this file is kept in the common area.
    Platforms that require these functions to be overridden can
    ignore this file and make a local platform specific copy in 
    the platform specific directory.
	
*/

/*----------------------------------------------------------------------------
          SYSTEM INCLUDE FILES
----------------------------------------------------------------------------*/
/* tm1 specific includes */ // BUGCHECK - remove this line


#define WANTVXDWRAPS
#include "basedef.h"
#include "vmm.h"
#include "vmmreg.h"
#include "vxdwraps.h"
#include "vwin32.h"

#pragma VxD_LOCKED_CODE_SEG
#pragma	VxD_LOCKED_DATA_SEG

#include "vxstd.h"
#include "vxwin.h"
#include "tmtypes.h"
#include "tmmanlib.h"


Pointer memAllocate( UInt32 Size )
{
	Pointer Memory;
	Memory = winHeapAllocate (  Size ); 
	// BUGCHECK - check for return code before memSet
	memSet ( Memory, 0, Size );
	return Memory;
}

void	memFree( Pointer Memory )
{
	winHeapFree ( (DWORD)Memory );
}

void	memCopy( Pointer Destination, Pointer Source, UInt32 Size )
{
	UInt32 dwIdx;
	UInt32 dwDWordSize = (Size >> 2);
	for ( dwIdx = 0 ; dwIdx < dwDWordSize ; dwIdx ++ )
	{
		((UInt32*)Destination)[dwIdx] = ((UInt32*)Source)[dwIdx];
	}
	
	dwIdx *= sizeof ( UInt32 );

	for (  ; dwIdx <  Size ; dwIdx ++ )
	{
		((UInt8*)Destination)[dwIdx] = ((UInt8*)Source)[dwIdx];

	}
}

void    memSet ( Pointer Memory, UInt8  Value, UInt32 Size )
{
	UInt32 dwIdx;

	for ( dwIdx = 0 ; dwIdx < Size; dwIdx++ )
	{
		((UInt8*)Memory)[dwIdx] = Value;
	}
}



UInt32    strCmp ( Pointer String1, Pointer String2 )
{
    while ( *((UInt8*)String1) )
    {
        if ( *((UInt8*)String1) == *((UInt8*)String2) )
		{
		    ((UInt8*)String1)++;
			((UInt8*)String2)++;
			continue;
		}

		return ( *((UInt8*)String1) - *((UInt8*)String2) );
    }
	return 0;
}

Pointer    strCopy ( Pointer Destination, Pointer Source )
{
    while ( *((UInt8*)Destination)++ = *((UInt8*)Source)++ );
    *((UInt8*)Destination)++ = *((UInt8*)Source)++;
    return Destination;
}

UInt32    strLen ( Pointer String )
{
    UInt32    Length = 0;
    while ( *((UInt8*)String)++ ) Length++;
    return ( Length + 1 );

}

void  strSprintf ( 
	Int8* BufferString,
	Int8* FormatString, 
	... )
{
	Pointer	pArgument = &FormatString;
	UInt32	Idx, StrIdx = 0, BufIdx = 0;
	UInt8	Char;

	// this function is ment for a 32 bit environment.
	// modify pointer increment values for 32 bit stack.
	((Pointer*)pArgument)++;

	for( Idx = 0 ; FormatString[Idx] ; Idx ++ )
	{
		if( FormatString[Idx] == '%')
		{
			Char = FormatString[++Idx];
			switch( Char )
			{

				case 'd':
				{
					DWORD	Value = *((PDWORD)pArgument);
					DWORD	Divisor;
					for( Divisor = 1 ; (Value / Divisor) >= 10 ;
						Divisor *= 10);
					do
					//for( ; Value ; Divisor /= 10)
					{
						BufferString[StrIdx++] = (BYTE)
							( (Value / Divisor) + '0');

						Value = (UInt32)(Value % Divisor);
						Divisor /= 10;
					} while ( Divisor > 0);

					((UInt32*)pArgument)++;
				}
				break;

				case 's':
				for ( BufIdx = 0 ;
					((PBYTE)(*((PBYTE*)pArgument)))[BufIdx];
					BufIdx++ )
					BufferString[StrIdx++] = 
					(((PBYTE)(*((PBYTE*)pArgument)))[BufIdx]);

				((PVOID *)pArgument)++;
				break;

				case 'c':
				BufferString[StrIdx++] = (*((PBYTE)pArgument));
				((UInt32*)pArgument)++;
				break;

				case 'x':
				{
					UInt32	Value = *((UInt32*)pArgument);
					UInt8	Hex[] = "0123456789ABCDEF";
					UInt32	Divisor;
					for( Divisor = 1 ; (Value / Divisor) >= 16 ;
						Divisor *= 16);

					do
					//for(  ; Value ; Divisor /= 16)
					{
						BufferString[StrIdx++] = 
							(Hex[(Value / Divisor)]);

						Value = (UInt32)(Value % Divisor);

						Divisor /= 16;

					} while ( Divisor > 0);

					((UInt32*)pArgument)++;
				}
				break;

				default :
				BufferString[StrIdx++] = ('%');
				BufferString[StrIdx++] = (Char);
				break;
			}
		}
		else
		{
			BufferString[StrIdx++] = FormatString[Idx];
			continue;
		}
	}
	BufferString[StrIdx] = 0;
}

// END OF RTAL

//All these are operating specific support routines
//provided by WinNT.

typedef struct _PAGEDIR
{
	DWORD	Present			: 1;
	DWORD	Writable		: 1;
	DWORD	User			: 1;
	DWORD	WriteThrough	: 1;
	DWORD	CacheDisable	: 1;
	DWORD	Accessed		: 1;
	DWORD	Unused			: 1;
	DWORD	PageSize		: 1;
	DWORD	Reserved		: 1;
	DWORD	Available 		: 3;
	DWORD	Address 		: 20;
}	PAGEDIR, *PPAGEDIR;

typedef struct _PAGETABLE
{
	DWORD	Present			: 1;
	DWORD	Writable		: 1;
	DWORD	User			: 1;
	DWORD	WriteThrough	: 1;
	DWORD	CacheDisable	: 1;
	DWORD	Accessed		: 1;
	DWORD	Unused			: 1;
	DWORD	PageSize		: 1;
	DWORD	Reserved		: 1;
	DWORD	Available 		: 3;
	DWORD	Address 		: 20;
}	PAGETABLE, *PPAGETABLE;

typedef struct _REGISTERCR3
{
	DWORD	Unused0				: 3;
	DWORD	WritesTransparent	: 1;
	DWORD	CacheDisabled		: 1;
	DWORD	Unused1				: 6;
	DWORD	PageDirPhysBase		: 20;
}	REGISTERCR3, *PREGISTERCR3;


DWORD	vxdPageLock(PVOID pLinear, DWORD dwSize )
{
	PLINADDR	ppLinearAddr = (PLINADDR)&pLinear;
	DWORD		dwPageNumber;
	DWORD		dwNumPages ;

	dwPageNumber =  ( ((DWORD)pLinear) >> 12 );

	dwNumPages =
		( ( ((DWORD)pLinear + dwSize ) >> 12 ) -
		dwPageNumber + 1 );

	return ( _LinPageLock ( dwPageNumber, 
		dwNumPages, PAGEMAPGLOBAL ) + ppLinearAddr->PageOffset );
}

VOID	vxdPageUnlock(PVOID pLinear, DWORD dwSize )
{
	PLINADDR	ppLinearAddr = (PLINADDR)&pLinear;
	DWORD		dwPageNumber;
	DWORD		dwNumPages;

	dwPageNumber =  ( ((DWORD)pLinear) >> 12 );

	dwNumPages =
		( ( ((DWORD)pLinear + dwSize ) >> 12 ) -
		dwPageNumber + 1 );

	_LinPageUnlock ( dwPageNumber, dwNumPages, PAGEMAPGLOBAL );

}


/*
	vxdLinearToPhysical

	This is how Andy implements linear to physical translation
	CR3->PageDirectoryBase->PageTableBase->PageFrame
*/

DWORD	vxdErrorBox ( PCHAR pszCaption, PCHAR pszText )
{
	VSEB	Dialog;
	Dialog.vseb_b3 = 0; //       
	Dialog.vseb_b2 = 0x8000 | 1; //  - "OK" 0x8000 | 1
	Dialog.vseb_b1 = 0;//        
	Dialog.vseb_pszCaption = (DWORD)pszCaption;// "TriMedia Manager Fatal Error Message"// text for caption bar
	Dialog.vseb_pszText = (DWORD)pszText;//    "This system has a Intel Neptune Chipset, Proceed ??"
	winVWIN32_SysErrorBox ( &Dialog );
	return Dialog.vseb_resp; //1-Yes, 2-No, 3-Ignore.

}

PVOID 
MmAllocateContiguousMemory(
    IN ULONG NumberOfBytes,
    IN PHYSICAL_ADDRESS HighestAcceptableAddress
    )
{
	Pointer pReturnData;

	UInt32 nPages = ((NumberOfBytes - 1) >> 12)+1;
	UInt32 pType = PG_SYS;
	UInt32 flag = PAGEZEROINIT | PAGEFIXED | PAGECONTIG | PAGEUSEALIGN;
	UInt32 minPhys = 0;
	UInt32 AlignMask = 0x00000000;

	pReturnData = _PageAllocate(
		nPages, pType, 0, AlignMask,
		minPhys, HighestAcceptableAddress.LowPart,
		NULL, flag);

	return pReturnData;
}

VOID 
MmFreeContiguousMemory(
    IN PVOID BaseAddress  )
{
	_PageFree(BaseAddress, 0);
}

PHYSICAL_ADDRESS
MmGetPhysicalAddress(
    IN PVOID BaseAddress
    )
{
	PHYSICAL_ADDRESS	PhysicalAddress;
	
	DWORD	dwCR3;
	PPAGEDIR	pPageDir;
	PPAGETABLE	pPageTable;
	PLINADDR	pLinearAddr = (PLINADDR)&BaseAddress;

	PREGISTERCR3	pCR3 = (PREGISTERCR3)&dwCR3;

	__asm {
		mov	eax, cr3		
		mov	dwCR3, eax
	}


	pPageDir = _MapPhysToLinear ( 
		// go to the page directory entry, via the index in the linear addr
		( dwCR3 & 0xfffff000 ) + (pLinearAddr->PageDirectory << 2),
		4,		// we need to access a DWORD from page directory table
		0 );	

	pPageTable	= _MapPhysToLinear ( 
		// go to the page table entry, via the index in the linear addr
		( pPageDir->Address << 12 ) + ( pLinearAddr->PageNumber << 2),
		4,		// we need to access a DWORD from page table table
		0 );	

	// use the page table entry to get the physical address of the page
	// then add the offset within the page via the linear addr

	PhysicalAddress.LowPart = ( ( pPageTable->Address << 12 ) + ( pLinearAddr->PageOffset) );
	PhysicalAddress.HighPart = 0;

	return PhysicalAddress;
}

PVOID
    PsGetCurrentProcess( VOID )
{
	return ((void*) winVWIN32_GetCurrentProcessHandle());
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品男人的天堂| 亚洲欧美日本韩国| 在线观看中文字幕不卡| 国产麻豆精品一区二区| 亚洲图片有声小说| 国产欧美精品一区aⅴ影院 | 欧美精品一区二区三区在线播放 | 亚洲色图欧美在线| 精品99999| 这里只有精品99re| 色综合天天综合在线视频| 韩国视频一区二区| 日本在线不卡视频| 一区二区久久久| 国产精品你懂的在线欣赏| 精品三级在线观看| 日韩欧美你懂的| 91麻豆精品国产91久久久更新时间 | 成人av影院在线| 国产高清在线观看免费不卡| 日韩成人一级大片| 亚洲在线观看免费| 亚洲激情校园春色| 最新不卡av在线| 国产精品丝袜一区| 国产视频亚洲色图| 久久久亚洲高清| 久久视频一区二区| 精品剧情v国产在线观看在线| 欧美一区二区三区色| 欧美人动与zoxxxx乱| 在线观看视频一区| 欧美日韩精品专区| 欧美日韩一区三区| 91麻豆精品国产无毒不卡在线观看| 欧美午夜免费电影| 欧美日韩中文字幕一区二区| 在线观看一区日韩| 欧美剧在线免费观看网站 | 7777精品伊人久久久大香线蕉| 欧美性猛交xxxx乱大交退制版| 日本福利一区二区| 欧美亚洲一区三区| 欧美精品在欧美一区二区少妇| 欧美性xxxxxx少妇| 制服丝袜日韩国产| 精品国产乱码久久久久久浪潮 | 国产精品1024| 丁香另类激情小说| 91免费观看国产| 欧美在线一二三四区| 欧美日韩久久久久久| 欧美一区二区成人| 精品电影一区二区三区 | 久久精品无码一区二区三区| 国产亚洲一区二区三区| 中文字幕成人网| 洋洋成人永久网站入口| 青青草精品视频| 国产麻豆91精品| 色综合天天综合网天天看片| 欧美日韩成人一区| 亚洲精品在线观看网站| 日本一区二区视频在线| 亚洲乱码中文字幕综合| 亚洲va欧美va国产va天堂影院| 日本va欧美va欧美va精品| 国产一区二区在线看| 91一区二区在线| 欧美精品少妇一区二区三区| 久久影院电视剧免费观看| 国产精品对白交换视频| 亚洲gay无套男同| 国产一区二区三区免费看| av一区二区久久| 欧美人xxxx| 中文字幕免费不卡在线| 夜夜亚洲天天久久| 激情深爱一区二区| 91极品美女在线| 精品国产一区二区三区忘忧草| 国产精品成人免费在线| 日本不卡一区二区| 成人动漫一区二区在线| 欧美一级艳片视频免费观看| 国产精品欧美一区二区三区| 日韩电影免费在线看| 99精品欧美一区二区蜜桃免费| 欧美丰满美乳xxx高潮www| 国产精品素人一区二区| 蜜臀av一级做a爰片久久| 色哟哟国产精品| 久久人人爽人人爽| 激情丁香综合五月| av电影天堂一区二区在线观看| 91精品国产综合久久精品app| 国产精品卡一卡二卡三| 蜜桃av噜噜一区二区三区小说| 99国产精品久久久久| 2017欧美狠狠色| 日韩黄色在线观看| 91美女视频网站| 国产日韩影视精品| 久久精品二区亚洲w码| 在线亚洲高清视频| 国产精品国产三级国产普通话蜜臀| 免费观看成人鲁鲁鲁鲁鲁视频| 色狠狠一区二区| 国产精品污网站| 国产在线视频不卡二| 欧美一区二区三区喷汁尤物| 亚洲男人都懂的| 成人av高清在线| 国产亚洲欧美日韩在线一区| 蜜臀av性久久久久av蜜臀妖精| 欧美日韩激情在线| 一区二区三区成人| 白白色亚洲国产精品| 欧美激情一区二区三区在线| 国产呦萝稀缺另类资源| 26uuu另类欧美亚洲曰本| 免费人成在线不卡| 日韩亚洲欧美成人一区| 日韩精品久久理论片| 欧美日韩一级大片网址| 亚洲最大的成人av| 在线精品视频免费播放| 一区av在线播放| 欧美在线免费观看视频| 一区二区三区日韩欧美精品| 北条麻妃国产九九精品视频| 国产精品乱子久久久久| 不卡的av中国片| 中文字幕一区在线| 成人avav影音| 综合久久国产九一剧情麻豆| 99久久综合99久久综合网站| 亚洲欧洲一区二区在线播放| 91麻豆高清视频| 亚洲一二三区在线观看| 欧美吻胸吃奶大尺度电影| 亚洲444eee在线观看| 欧美一区二区三区人| 久久丁香综合五月国产三级网站 | 国产精品视频一二三区| 成人美女在线视频| 亚洲老司机在线| 欧美优质美女网站| 亚洲大型综合色站| 欧美变态口味重另类| 国产成人av电影在线| 国产精品妹子av| 欧美综合欧美视频| 日本成人在线看| 国产日本欧美一区二区| 91免费观看在线| 日韩av电影免费观看高清完整版 | 欧美在线999| 日韩国产成人精品| 久久久久97国产精华液好用吗| 高清av一区二区| 亚洲午夜免费电影| 日韩欧美精品三级| 国产成人h网站| 亚洲国产视频一区| 日韩一区二区三区免费看 | 欧美日韩精品一区二区天天拍小说 | 韩国毛片一区二区三区| 国产精品欧美综合在线| 欧美裸体bbwbbwbbw| 高清av一区二区| 天天av天天翘天天综合网色鬼国产 | 97se亚洲国产综合自在线观| 亚洲国产日韩a在线播放| 欧美成人女星排名| av成人老司机| 免费成人在线观看视频| 国产精品久久久爽爽爽麻豆色哟哟| 欧美亚洲国产怡红院影院| 韩国三级电影一区二区| 亚洲精品亚洲人成人网| 欧美mv和日韩mv的网站| 在线观看亚洲精品| 国产乱码精品一区二区三区五月婷 | 欧美不卡123| 欧美午夜一区二区三区免费大片| 国产在线视频一区二区| 亚洲成人你懂的| 欧美激情中文不卡| 日韩欧美精品三级| 欧美午夜片在线观看| 北条麻妃国产九九精品视频| 久久国产精品99久久久久久老狼| 亚洲精品日韩综合观看成人91| wwwwww.欧美系列| 欧美精品九九99久久| 99国产精品国产精品久久| 国产在线精品一区二区不卡了| 亚洲午夜成aⅴ人片| 亚洲欧洲精品一区二区三区不卡|