Public feed #889147

Anonymous

public c v1 · immutable
Raw Edit
·published 2008-02-02 18:28 UTC
rendered paste body
LPVOID VirtualInit (DWORD virtualPages, DWORD physicalPages){	/* Check for straight out wrong cases. */	if (virtualPages < physicalPages)	{		print_error("Fewer virtual pages than physical pages");		return NULL;	}	if (virtualPages > MAX_VIRTUAL_PAGES)	{		print_error("Too many virtual pages");		return NULL;	}	if (physicalPages > MAX_PHYSICAL_PAGES)	{		print_error("Too many physical pages");		return NULL;	}	/* First initialize global variables. */	crt_frame = -1;	memory = NULL;	physicalMemory = NULL;	virtualMemory = NULL;	memoryPages = physicalPages;	swapPages = virtualPages;	/* Try to set up files for use with memory.*/	hndRam = CreateFile(RAM_FILE,		GENERIC_READ | GENERIC_WRITE,		FILE_SHARE_READ | FILE_SHARE_WRITE,		NULL,		CREATE_ALWAYS,		FILE_ATTRIBUTE_NORMAL,		NULL);	if (hndRam == INVALID_HANDLE_VALUE)	{		error_message(__FILE__, __LINE__);		return NULL;	}	hndSwap = CreateFile(SWAP_FILE,		GENERIC_READ | GENERIC_WRITE,		FILE_SHARE_READ | FILE_SHARE_WRITE,		NULL,		CREATE_ALWAYS,		FILE_ATTRIBUTE_NORMAL,		0);	if (hndSwap == INVALID_HANDLE_VALUE)	{		error_message(__FILE__, __LINE__);		return NULL;	}	/*allocate memory in process space*/	memory = VirtualAlloc(memory,		virtualPages * pageSize,		MEM_COMMIT,		PAGE_NOACCESS);	if (memory == NULL)	{		error_message(__FILE__, __LINE__);		return NULL;	}	/* Create file mappings. */	hndRamMapping = CreateFileMapping(hndRam,		NULL,		PAGE_READWRITE,		0,		physicalPages * pageSize,		NULL);	if (hndRamMapping == NULL)	{		error_message(__FILE__, __LINE__);		return NULL;	}	hndSwapMapping = CreateFileMapping(hndSwap,		NULL,		PAGE_READWRITE,		0,		virtualPages * pageSize,		NULL);	if (hndSwapMapping == NULL)	{		error_message(__FILE__, __LINE__);		return NULL;	}	/* map physical memory */	physicalMemory = (char*)MapViewOfFile(hndRamMapping,		FILE_MAP_WRITE,		0,		0,		0);	printf("\nPhysical memory at: 0x%x (NULL at: 0x%x)\n", physicalMemory, NULL);	if (physicalMemory == NULL)	{		error_message(__FILE__, __LINE__);		return NULL;	}	/* map virtual memory. */	virtualMemory = (char*)MapViewOfFile(hndSwapMapping,		FILE_MAP_WRITE,		0,		0,		0);	if (virtualMemory == NULL)	{		error_message(__FILE__, __LINE__);		return NULL;	}	/*set interrupt handler*/	handler = AddVectoredExceptionHandler(1, PageFaultVectoredHandler);	if (handler == NULL)	{		error_message(__FILE__, __LINE__);		return NULL;	}	/* initialize data structures */	init_mem_pages(pages, MAX_PHYSICAL_PAGES);	init_mem_frames(frames, MAX_VIRTUAL_PAGES);	return memory;}