From: short <> Date: Wed, 20 Nov 2002 02:11:25 +0000 (+0000) Subject: +MmMapLockedPagesSpecifyCache() X-Git-Tag: captive-0_2~455 X-Git-Url: http://git.jankratochvil.net/?a=commitdiff_plain;h=910d6949fbfa4f3222f9803fe9b28a460c885888;p=captive.git +MmMapLockedPagesSpecifyCache() --- diff --git a/src/libcaptive/mm/mdl.c b/src/libcaptive/mm/mdl.c index 026ca47..1feb346 100644 --- a/src/libcaptive/mm/mdl.c +++ b/src/libcaptive/mm/mdl.c @@ -27,7 +27,7 @@ * MmProbeAndLockPages: * @Mdl: Pointer to the #MDL specification structure to probe and lock. * %NULL value is forbidden. - * @AccessMode: Access at which to probe the pages. Ignored by libcaptive. + * @AccessMode: Access at which to lock the pages. %KernelMode required by libcaptive. * @Operation: One of %IoReadAccess, %IoWriteAccess or %IoModifyAccess. * * Probles the specified @AccessMode and locks those pages specified by @Mdl to memory @@ -37,6 +37,7 @@ VOID MmProbeAndLockPages(PMDL Mdl,KPROCESSOR_MODE AccessMode,LOCK_OPERATION Operation) { g_return_if_fail(Mdl!=NULL); + g_return_if_fail(AccessMode==KernelMode /* || AccessMode==UserMode */); Mdl->MdlFlags|=MDL_PAGES_LOCKED; } @@ -62,7 +63,7 @@ VOID MmUnlockPages(PMDL Mdl) * MmMapLockedPages: * @Mdl: Pointer to the #MDL specification structure to map. * %NULL value is forbidden. - * @AccessMode: Access at which to lock the pages. Ignored by libcaptive. + * @AccessMode: Access at which to lock the pages. %KernelMode required by libcaptive. * * Leaves the pages at their original location as they are never moved anyway * by libcaptive. @@ -74,6 +75,7 @@ PVOID MmMapLockedPages(PMDL Mdl,KPROCESSOR_MODE AccessMode) { g_return_val_if_fail(Mdl!=NULL,NULL); g_assert(Mdl->StartVa!=NULL); + g_return_val_if_fail(AccessMode==KernelMode /* || AccessMode==UserMode */ ,NULL); if (Mdl->MdlFlags&MDL_MAPPED_TO_SYSTEM_VA) { /* already mapped */ @@ -109,3 +111,39 @@ VOID MmUnmapLockedPages(PVOID BaseAddress,PMDL Mdl) Mdl->MappedSystemVa=NULL; Mdl->MdlFlags&=~MDL_MAPPED_TO_SYSTEM_VA; } + +/** + * MmMapLockedPagesSpecifyCache: + * @Mdl: Pointer to the #MDL specification structure to map. + * %NULL value is forbidden. + * @AccessMode: Access at which to lock the pages. %KernelMode required by libcaptive. + * @CacheType: Suggested caching type. %MmNonCached, %MmCached or %MmWriteCombined required by libcaptive. + * @BaseAddress: Required block base address if @AccessMode is %UserMode. Ignored by libcaptive. + * @BugCheckOnFailure: Whether to call KeBugCheck() instead of returning %NULL. Ignored by libcaptive. + * @Priority: Suggested pages priority. %LowPagePriority, %NormalPagePriority or %HighPagePriority required by libcaptive. + * + * Leaves the pages at their original location as they are never moved anyway + * by libcaptive. This call is just a wrapper around MmMapLockedPages() in libcaptive. + * + * Returns: Address of the mapped pages base. + * This offset does not neet to be %PAGE_SIZE aligned. + */ +PVOID MmMapLockedPagesSpecifyCache(IN PMDL Mdl, + IN KPROCESSOR_MODE AccessMode,IN MEMORY_CACHING_TYPE CacheType,IN PVOID BaseAddress, + IN ULONG BugCheckOnFailure,IN MM_PAGE_PRIORITY Priority) +{ + g_return_val_if_fail(Mdl!=NULL,NULL); + g_return_val_if_fail(AccessMode==KernelMode /* || AccessMode==UserMode */ ,NULL); + g_return_val_if_fail(0 + || CacheType==MmNonCached + || CacheType==MmCached + || CacheType==MmWriteCombined, + NULL); + g_return_val_if_fail(0 + || Priority==LowPagePriority + || Priority==NormalPagePriority + || Priority==HighPagePriority, + NULL); + + return MmMapLockedPages(Mdl,AccessMode); +}