zoukankan      html  css  js  c++  java
  • 记两个用于修改用户态内存的函数

    //用于在LoadImageRoutine中使用,修改用户态内存
    PMDL MapUserModeAddrWritable(PVOID BaseAddr,ULONG Length, PVOID *pNewAddr);
    VOID UnmapMemory(PVOID pAddr, PMDL pMdl);
    
    PMDL MapUserModeAddrWritable(PVOID BaseAddr,ULONG Length, PVOID *pNewAddr)
    {
        PVOID pMapedAddr = NULL ;
        //创建一个MDL
        PMDL pMdl = IoAllocateMdl(BaseAddr,Length,FALSE,FALSE,NULL);
        if (pMdl == NULL)
        {
            dprintf("pMDL == NULL
    ");
            return NULL;
        }
        
        __try
        {
            MmProbeAndLockPages(pMdl,UserMode,IoReadAccess);
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
            dprintf("MmProbeAndLockPages exception. Code  = 0x%08X
    ",GetExceptionCode());
            IoFreeMdl(pMdl);
            return NULL;
        }
        
        
        pMapedAddr = MmMapLockedPagesSpecifyCache(pMdl,KernelMode,MmCached,NULL,FALSE,NormalPagePriority);
        if (!pMapedAddr)
        {
            dprintf("pMapedAdd == NULL
    ");
            MmUnlockPages(pMdl);
            IoFreeMdl(pMdl);
            return NULL;
        }
        
        *pNewAddr = pMapedAddr ;
        return pMdl;
        
    }
    
    VOID UnmapMemory(PVOID pAddr, PMDL pMdl)
    {
        if (pAddr != NULL)
        {
            MmUnmapLockedPages(pAddr,pMdl);
        }
        
        if (pMdl != NULL)
        {
            MmUnlockPages(pMdl);
            IoFreeMdl(pMdl);
        }
        
    }
  • 相关阅读:
    BZOJ3403: [Usaco2009 Open]Cow Line 直线上的牛
    lintcode入门篇三
    lintcode入门篇二
    lintcode入门篇一
    matplotlib
    Pandas
    Numpy
    缓存
    Django性能优化的几种方法
    python总结十一
  • 原文地址:https://www.cnblogs.com/achillis/p/5256573.html
Copyright © 2011-2022 走看看