windows 7 x64下如何访问物理内存

yuchongjike 2016-09-01 05:51:19
以前在XP下做过一个NT虚拟驱动,来访问OS下的I/O端口和物理内存,但现在windows 7 x64驱动需要数字签名,所以没办法在windows 7下使用了。
在网上查过,都是讲的用WinIO或WinRing0,这两个我看了下源码,也是调的虚拟驱动(winring0.sys),但已经编译好的驱动里面并没有加入对物理内存的访问,只有I/O端口的,源码里面有一个定义#ifdef _PHYSICAL_MEMORY_SUPPORT,修改DLL导出函数文件,加入对物理内存函数的导出后,读出来的值是随机的,一直在变,并不是我需要的物理内存值(用RW-evenything看实际值不一样)。
winring0驱动里面也有这个定义,但加入后重新编译就不行了,因为没有签名。。。。。。

有没有什么方法可以在x64下访问物理内存的?
请不要说让我重新编译驱动,因为我没有数字签名。。。。。从网上找了一些关闭数字签名验证的,但也没用。。。。。。
也请不要说关闭数字签名验证,我想试试其它方法。。。。。
...全文
607 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-09-06
  • 打赏
  • 举报
回复
引用 4 楼 yuchongjike 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:] 调用64位版WinIO.sys
WinIO不带物理内存访问,WinRing0也不带物理内存访问,现在我就卡在访问物理内存这块了。。。。。[/quote] WinIo.h:
#ifndef WINIO_H
#define WINIO_H

#ifdef WINIO_DLL
#define WINIO_API _declspec(dllexport)
#else
#define WINIO_API _declspec(dllimport)
#endif

extern "C"
{
  WINIO_API bool _stdcall InitializeWinIo();
  WINIO_API void _stdcall ShutdownWinIo();
  WINIO_API PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
  WINIO_API bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
  WINIO_API bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
  WINIO_API bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
  WINIO_API bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
  WINIO_API bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
  WINIO_API bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
  WINIO_API bool _stdcall RemoveWinIoDriver();
}

extern bool IsNT;
extern HANDLE hDriver;
extern bool IsWinIoInitialized;

bool _stdcall StartWinIoDriver();
bool _stdcall StopWinIoDriver();

#endif
yuchongjike 2016-09-05
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
调用64位版WinIO.sys
WinIO不带物理内存访问,WinRing0也不带物理内存访问,现在我就卡在访问物理内存这块了。。。。。
yuchongjike 2016-09-05
  • 打赏
  • 举报
回复
在网上找了个教程:http://jingyan.baidu.com/article/39810a238939e7b636fda60f.html,然后给驱动的sys文件加了个数字签名,但在加载驱动时还是报没有签名。。。。这个是只能找微软买吗。。。。。。。? 在开机按F8选禁用强制,可以加上驱动,但重启后就不行了。 看网上说明: bcdedit -set loadoptions DDISABLE_INTGERITY_CHECKS 就可以关闭签名验证,但我试了不行。。。。。。 还有一个: bcdedit -set testsigning on 这个还没试过,是要两个一起打开吗?这样重启就不会再有提示驱动不工作了? 还有一个组策略gpedit.msc: 这个也设置为忽略了,不过这个网上有说是针对windows 32bit的,这个不知道,我在win32下可以直接加载32bit驱动
赵4老师 2016-09-02
  • 打赏
  • 举报
回复
调用64位版WinIO.sys
oyljerry 2016-09-01
  • 打赏
  • 举报
回复
win7就是加了签名来进行更安全的检测。你没法绕过

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧