home *** CD-ROM | disk | FTP | other *** search
- /***
- *load.c - Load allocated space
- *
- * Copyright (c) 1989-1992, Microsoft Corporation. All rights reserved.
- *
- *******************************************************************************/
-
- #include <version.h>
- #include <vmassert.h>
- #include <stdlib.h>
- #include <vmm.h>
- #include <vmbm.h>
-
- /*** PVmLoadHbk
- *
- * Purpose: loads in the allocated space
- *
- * Input:
- * hbk The handle load.
- *
- * Output:
- * Returns:
- * A physical pointer to the memory, or a NULL on error.
- *
- * Exceptions:
- *
- * Notes:
- *
- * There is an implicit assumption that if the memory is already loaded,
- * a load will take you to the same physical place!
- *
- *
- *************************************************************************/
- PVOID VMFUNC __PVmLoadHbk(
- HBK hbk,
- int fDirty
- ) {
- PHDB phdb;
-
- Assert( hbk != NULL);
-
- if (!_fVmInit || (unsigned long)hbk < (unsigned long)_hbkMin || (unsigned long)hbk >= (unsigned long)_hbkMax)
- return NULL;
-
- phdb = __PVmLoadVp((VPVOID) hbk, fDirty);
- Assert( phdb != NULL );
-
- if (!phdb || phdb->fFree)
- return NULL;
-
- Assert( phdb->fFree == FALSE );
-
- // if there is more than one page, then we need to load more pages
- if(phdb->fByPage && phdb->cPage > 1)
- {
- phdb = __PVmLoadVpCb((VPVOID) hbk, phdb->cPage * (unsigned long) cbVmPage,
- fDirty);
- }
- else if( VpPageOfVp((VPVOID) hbk) !=
- VpPageOfVp(((VPVOID) hbk) + CbGetSize(phdb->cbSize) - 1) )
- {
- phdb = __PVmLoadVpCb((VPVOID) hbk, CbGetSize(phdb->cbSize), fDirty);
- }
-
- // return the vm pointer
- return((PVOID) ((phdb != NULL) ? ++phdb : NULL));
- }
-