大致情况是,有些敏感数据,不允许在硬盘上明文出现(即,在磁盘上保存时,
 
必须加密)。但处于对速度的要求,在内存中的时候最好不加密。如何才能锁定内存,
 
使这些保存在内存的,没有加秘的数据不被os交换到外存去?

解决方案 »

  1.   

    我知道设计驱动程序的VToolsD中有函数可以使内存不被交换,但一般的Win32程序不太清楚,好象是设置内存的一个标志什么的吧,你可以查查关于内存的资料,实在抱歉,无法提供有效的方法
      

  2.   


     
        HGLOBAL hBuffer=GlobalAlloc(GPTR,不记得了);    GlobalLock(hBuffer);   一般是这样,但是我不敢保证不被交换到外存上去!   释放如下:
     
          GlobalUnLock(hBuffer);      GlobalFree(hBuffer);
      

  3.   

    我的办法:1。你在ring0态写一个驱动(WDM/VXD),由它在内核态分配一块no poor内存(非交换类型),这块内存就是满足你的“不被交换到硬盘上”的内存,其实就是使用物理内存的。(当然,这种类存不能分配太多,否则会严重降低系统运行速度);2。在ring3态写你的exe程序。该exe可以使用驱动的接口(都是你自定义的)来直接使用指针访问那些物理内存,这就完全满足你的要求。3。技术细节:Exe使用DeviceIoControl来访问驱动程序,驱动程序使用“直接内存访问模式”来保证那块内存始终存在于物理内存中,且可被EXE直接访问。更细的,可参考“驱动程序设计”相关知识,我这里只是提供思路。
      

  4.   

    VirtualLock();但只能保证在进程内锁定,如果进程被切换,它还是有可能被交换到页面文件中。
      

  5.   

    声音采集时WaveInPrepareHeader()可以锁内存,其他方面我不知道了
      

  6.   

    核心编程里, 374 页的 AllocateUserPhysicalPages 好象可以作到
      

  7.   

    virtual*一族函数可以做到,查MSDN吧