求windows7系统中的一些相对路径地址!!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求windows7系统中的一些相对路径地址!!!相关的知识,希望对你有一定的参考价值。
参考技术A %ALLUSERSPROFILE%所有用户 Profile 文件位置
%APPDATA%
应用程序数据的默认存放位置
%CD%
当前目录
%CLIENTNAME%
联接到终端服务会话时客户端的 NETBios 名
%CMDCMDLINE%
启动当前 cmd.exe 所使用的命令行
%CMDEXTVERSION%
当前命令处理程序扩展版本号
%CommonProgramFiles%
常用文件的文件夹路径
%COMPUTERNAME%
计算机名
%COMSPEC%
可执行命令外壳(命令处理程序)的路径
%DATE%
当前日期
%ERRORLEVEL%
最近使用的命令的错误代码
%HOMEDRIVE%
用户主目录所在的驱动器盘符
%HOMEPATH%
用户主目录的完整路径
%HOMESHARE%
用户共享主目录的网络路径
%LOGONSEVER%
有效的当前登录会话的域名控制器名
%NUMBER_OF_PROCESSORS%
计算机安装的处理器数
%OS%
操作系统的名字( Windows XP 和 Windows 2000 列为 Windows_NT )
%Path%
可执行文件的搜索路径
%PATHEXT%
操作系统认为可被执行的文件扩展名
%PROCESSOR_ARCHITECTURE%
处理器的芯片架构
%PROCESSOR_IDENTFIER%
处理器的描述
%PROCESSOR_LEVEL%
计算机的处理器的型号
%PROCESSOR_REVISION%
处理器的修订号
%ProgramFiles%
Program Files 文件夹的路径
%PROMPT%
当前命令解释器的命令提示设置
%RANDOM%
界于 0 和 32767 之间的随机十进制数
%SESSIONNAME%
连接到终端服务会话时的连接和会话名
%SYSTEMDRIVE%
Windows 启动目录所在驱动器
%SYSTEMROOT%
Windows 启动目录的位置
%TEMP% and %TMP%
当前登录的用户可用应用程序的默认临时目录
%TIME%
当前时间
%USERDOMAIN%
包含用户帐号的域的名字
%USERNAME%
当前登录的用户的名字
%USERPROFILE%
当前用户 Profile 文件位置
%WINDIR%
操作系统目录的位置本回答被提问者采纳 参考技术B 装系统前:
先想好要将系统装在哪个盘,然后将该盘整理。这里所说的整理,就是将有用的文件放到另一个盘中保存起来,以防格式化的时候误删掉。还有就是如果你的机器硬件驱动盘找不到了,建议使用工具软件将驱动保存下来。Windows优化大师可以做到这点。
需要注意的就是,“我的文档”里的东西都算C盘里的东西,别忘了保存它里面的文件。
至于收藏夹等的路径因系统不同而不同。一般在C:\Documents and Settings下面有一个以你机器登陆名命名的文件夹,打开后就会看到收藏夹,复制到别的盘即可。
做好以上这些,基本上就可以开始装系统了。重新启动计算机,然后按DEL键进入BIOS设置。有的人在这里不知道什么时候按DEL键,那就告诉你个笨办法,只要重启了,就一直按好了。还有就是,因为主板生产厂家的不同,进入BIOS的快捷键也有所区别。有的是F2,有的是F10,一般开机时在屏幕低端都有提示。
进入BIOS后切勿随便改动,因为这里面的东西都是相当重要的,如果改错可能会连系统都进不去。我们只需要改动计算机启动时的盘符顺序就可以了。
这个怎么找还真不好说,因为BIOS设置也会因主板不同而不同。一般在BOOT标签下,设置用光驱启动计算机就可以。BIOS设置时右边都会有相关提示,菜鸟们可根据提示来做。弄好后先别急着重启,要把安装盘放进光驱中,再按F10保存并重新启动。
这时要注意观察,启动时计算机会先检测光驱,屏幕下面出现一行字符(具体英语忘掉了,汗),意思就是让你按任意键进入光盘启动。按一下,听到光驱开始疯转,装系统的过程就正式开始了!
装系统中:
看屏幕中的提示,因为都是中文的所以几乎不需要介绍什么。首先需要用户选择是安装新的操作系统还是修复,选择安装新的操作系统,然后按F8同意那些协议,出现盘符选择界面。
用键盘上下键移动光标至你要安装的盘符上,按“D”键,系统会提示说删除该盘将会删除所有资料,不管它,接着按“L”键再确定删除。完成后屏幕返回到刚才的界面。然后选择“在当前盘安装WindowsXP”(大概意思,原文不记的了)后按回车,系统提示要格式化该盘。选择“快速NTFS方式”格式化,此时出现格式化界面,稍候等进度条到100%时计算机开始自动装入光驱中的安装文件,大概时间8分钟左右(视光驱速度而定),完成后系统自动重启。
注意,此时要将光驱里的安装盘取出,为的是避免重启后又自动读取。
重启后再次进入安装界面,此时将安装盘再放入后安装继续,几乎不需要你做任何设置,点“下一步”就可以。不过中间有一个输入序列号的过程得动动手。
这个过程大概40分钟左右,其间屏幕会显示一些关于windowsXP的相关功能信息,可以留意一下。完成后系统提示将安装盘取出。你拿出来后,重启,顺便进BIOS将开机启动顺序改回至硬盘启动,基本上就完成安装过程了!
装系统后:
一般在进入系统后常用硬件的驱动都已经安装好,但不是全部。这时就需要用户自己来安装。首先查看机器哪些驱动未安装!右键点击“我的电脑”,选“属性”,在“硬件”标签里点击“设备管理器”,凡是在设备前面有一个问号图标的均表示该设备有问题。双击,按上面的提示将驱动安装好。直到前面的“问号”全部消失为止。
需要装的驱动一般有显卡、声卡、网卡、猫,一些比较高级的机器还有红外、蓝牙等适配器的驱动。
下面就是对系统的一些优化设置,如果你的机器配置不高,建议按我说的做。
1 右键单击屏幕,选择“属性”。点击“外观”标签,在“外观与按钮”的下拉菜单中选择“Windows经典样式”,然后在“设置”标签里,按个人喜好调整屏幕分辨率大写,一般为1024*768。如果你用的是普通CRT显示器,需要再点“监视器”标签,将“屏幕刷新频率”调整至“85赫兹”,点确定!屏幕看起来是不是舒服多了?
2 右键单击任务栏,选择“属性”,在“任务栏”标签项中将“显示快速启动”前的复选框选中。然后再点击“「开始」菜单”标签,将菜单类改成“经典「开始」菜单”,点“确定”,看看现在的样子是不是要舒服点呢?(嘿,我的个人感觉!)
3 右键单击我的电脑,选择“高级”标签。单击性能项里的“设置”按钮。在视觉效果项里先点击“调整为最佳性能”,然后在下面的复选项里选中“在文件夹中使用常见任务”。如下图所示:
做好这步,然后再点“视觉效果”旁边的“高级”标签,在“虚拟内存”处点“设置”按钮。在打开的属性框里,先将光标定位在C盘,点击下面的“无分页文件”,然后再点击D盘(你机器上哪个盘空间大就点哪个),在自定义大小里输入相应数值,点旁边的“设置”按钮,再点击确定。如下图所示:
虚拟内存的设置要根据本身内存容量来定!一般情况为内存本身容量的1.5倍即可!
4 右键单击“我的电脑”,选择“系统还原”标签,如果不需要的话选择“在所有驱动器上关闭系统还原”,这个一般人都不需要!
5 此时你会发现屏幕右下角系统托盘处有一个“盾”样的图标,那个是WindowsXP的安全中心。双击打开它,在你没有安装自己的杀毒软件的时候,将“防火墙”和“病毒防护”都开启。这样安全性会相对较高一些!
6 做好这些后单击“开始”,选择“Windows Update”,此时自动打开IE连接到windows升级网站,按照它上面的提示进行升级,步骤必不可少!升级完成后可能会需要重新启动计算机。
7 打开任意一个文件夹,从菜单栏里点击“工具”,选择“文件夹选项”。单击“查看”标签,将“不缓存缩略图”、“记住每个文件夹的视图位置”、“鼠标指向文件夹或桌面项时显示提示信息”这三个类前的勾去掉。再点击上方的“应用到所有文件夹”,点确定!
8 右键单击IE,选择“属性”,在“常规”标签中,点击“使用空白页”,再点确定!
如何通过HOOK改变windows的API函数(找到函数的相对偏移)
我们知道,系统函数都是以DLL封装起来的,应用程序应用到系统函数时,应首先把该DLL加载到当前的进程空间中,调用的系统函数的入口地址,可以通过GetProcAddress函数进行获取。当系统函数进行调用的时候,首先把所必要的信息保存下来(包括参数和返回地址,等一些别的信息),然后就跳转到函数的入口地址,继续执行。其实函数地址,就是系统函数“可执行代码”的开始地址。那么怎么才能让函数首先执行我们的函数呢?呵呵,应该明白了吧,把开始的那段可执行代码替换为我们自己定制的一小段可执行代码,这样系统函数调用时,不就按我们的意图乖乖行事了吗?其实,就这么简单。Very very简单。 :P.实际的说,就可以修改系统函数入口的地方,让他调转到我们的函数的入口点就行了。采用汇编代码就能简单的实现Jmp XXXX, 其中XXXX就是要跳转的相对地址。
我们的做法是:把系统函数的入口地方的内容替换为一条Jmp指令,目的就是跳到我们的函数进行执行。而Jmp后面要求的是相对偏移,也就是我们的函数入口地址到系统函数入口地址之间的差异,再减去我们这条指令的大小。用公式表达如下:
int nDelta = UserFunAddr – SysFunAddr - (我们定制的这条指令的大小);
Jmp nDleta;
为了保持原程序的健壮性,我们的函数里做完必要的处理后,要回调原来的系统函数,然后返回。所以调用原来系统函数之前必须先把原来修改的系统函数入口地方给恢复,否则,系统函数地方被我们改成了Jmp XXXX就会又跳到我们的函数里,死循环了。
那么说一下程序执行的过程。
我们的dll“注射”入被hook的进程 -> 保存系统函数入口处的代码 -> 替换掉进程中的系统函数入口指向我们的函数 -> 当系统函数被调用,立即跳转到我们的函数 -> 我们函数进行处理 -> 恢复系统函数入口的代码 -> 调用原来的系统函数 -> 再修改系统函数入口指向我们的函数(为了下次hook)-> 返回。
于是,一次完整的Hook就完成了。
好,这个问题明白以后,讲一下下个问题,就是如何进行dll“注射”?即将我们的dll注射到要Hook的进程中去呢?
很简单哦,这里我们采用调用Windows提供给我们的一些现成的Hook来进行注射。举个例子,鼠标钩子,键盘钩子,大家都知道吧?我们可以给系统装一个鼠标钩子,然后所有响应到鼠标事件的进程,就会“自动”(其实是系统处理了)载入我们的dll然后设置相应的钩子函数。其实我们的目的只是需要让被注射进程载入我们的dll就可以了,我们可以再dll实例化的时候进行函数注射的,我们的这个鼠标钩子什么都不干的。
4简单的例子OneAddOne
讲了上面的原理,现在我们应该实战一下了。先不要考虑windows系统那些繁杂的函数,我们自己编写一个API函数来进行Hook与被Hook的练习吧,哈哈。
////////////////////
第一步,首先编写一个add.dll,很简单,这个dll只输出一个API函数,就是add啦。
新建一个win32 dll工程,
add.cpp的内容:
#i nclude "stdafx.h"
int WINAPI add(int a,int b){ file://千万别忘记声明WINAPI 否则调用的时候回产生声明错误哦!
return a+b;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
然后别忘了在add.def里面输出函数:
LIBRARY Add
DESCRIPTION "ADD LA"
EXPORTS
add @1;
编译,ok,我们获得了add.dll
////////////////////
第二步,编写1+1主程序
新建一个基于对话框的工程One,
在 OnOK()里面调用add函数:
ConeDlg.h里面加入一些变量的声明:
….
Public:
HINSTANCE hAddDll;
typedef int (WINAPI*AddProc)(int a,int b);
AddProc add;
…
ConeDlg.cpp里进行调用:
void COneDlg::OnOK()
{
// TODO: Add extra validation here
if (hAddDll==NULL)
hAddDll=::LoadLibrary("add.dll");
add=(AddProc)::GetProcAddress(hAddDll,"add");
int a=1;
int b=2;
int c=add(a,b);
CString temp;
temp.Format("%d+%d=%d",a,b,c);
AfxMessageBox(temp);
}
OK,编译运行,正确的话就会显示1+2=3咯
////////////////////
第3步,要动手Hook咯,爽阿
新建一个MFC的dll工程,Hook
在Hook.dll工程里:
添加一个鼠标Hook MouseProc,鼠标hook什么也不做
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
LRESULT RetVal= CallNextHookEx(hhk,nCode,wParam,lParam);
return RetVal;
}
添加鼠标钩子的安装和卸载函数:
BOOL InstallHook()
{
hhk=::SetWindowsHookEx(WH_MOUSE,MouseProc,hinst,0);
….
return true;
}
void UninstallHook()
{
::UnhookWindowsHookEx(hhk);
}
再实例化中获得一些参数
BOOL CHookApp::InitInstance()
{
获得dll 实例,进程句柄
hinst=::AfxGetInstanceHandle();
DWORD dwPid=::GetCurrentProcessId();
hProcess=OpenProcess(PROCESS_ALL_ACCESS,0,dwPid);
调用注射函数
Inject();
return CWinApp::InitInstance();
}
好,最重要的注射函数:
void Inject()
{
if (m_bInjected==false)
{ 保证只调用1次
m_bInjected=true;
获取add.dll中的add()函数
HMODULE hmod=::LoadLibrary("add.dll");
add=(AddProc)::GetProcAddress(hmod,"add");
pfadd=(FARPROC)add;
if (pfadd==NULL)
{
AfxMessageBox("cannot locate add()");
}
// 将add()中的入口代码保存入OldCode[]
_asm
{
lea edi,OldCode
mov esi,pfadd
cld
movsd
movsb
}
NewCode[0]=0xe9;//实际上0xe9就相当于jmp指令
//获取Myadd()的相对地址
_asm
{
lea eax,Myadd
mov ebx,pfadd
sub eax,ebx
sub eax,5
mov dword ptr [NewCode+1],eax
}
//填充完毕,现在NewCode[]里的指令相当于Jmp Myadd
HookOn(); //可以开启钩子了
}
}
开启钩子的函数
void HookOn()
{
ASSERT(hProcess!=NULL);
DWORD dwTemp=0;
DWORD dwOldProtect;
//将内存保护模式改为可写,老模式保存入dwOldProtect
VirtualProtectEx(hProcess,pfadd,5,PAGE_READWRITE,&dwOldProtect);
//将所属进程中add()的前5个字节改为Jmp Myadd
WriteProcessMemory(hProcess,pfadd,NewCode,5,0);
//将内存保护模式改回为dwOldProtect
VirtualProtectEx(hProcess,pfadd,5,dwOldProtect,&dwTemp);
bHook=true;
}
关闭钩子的函数
void HookOff()//将所属进程中add()的入口代码恢复
{
ASSERT(hProcess!=NULL);
DWORD dwTemp=0;
DWORD dwOldProtect;
VirtualProtectEx(hProcess,pfadd,5,PAGE_READWRITE,&dwOldProtect);
WriteProcessMemory(hProcess,pfadd,OldCode,5,0);
VirtualProtectEx(hProcess,pfadd,5,dwOldProtect,&dwTemp);
bHook=false;
}
然后,写我们自己的Myadd()函数
int WINAPI Myadd(int a,int b)
{
//截获了对add()的调用,我们给a,b都加1
a=a+1;
b=b+1;
HookOff();//关掉Myadd()钩子防止死循环
int ret;
ret=add(a,b);
HookOn();//开启Myadd()钩子
return ret;
}
然后别忘记在hook.def里面输出
InstallHook
MouseProc
Myadd
UninstallHook
四个函数。
好到这里基本上大功告成咯
////////////////////
第4步,我们就可以修改前面的One的测试程序了
增加一个安装钩子的函数/按钮
void COneDlg::doHook()
{
hinst=LoadLibrary("hook.dll");
if(hinst==NULL)
{
AfxMessageBox("no hook.dll!");
return;
}
typedef BOOL (CALLBACK *inshook)();
inshook insthook;
insthook=::GetProcAddress(hinst,"InstallHook");
if(insthook==NULL)
{
AfxMessageBox("func not found!");
return;
}
DWORD pid=::GetCurrentProcessId();
BOOL ret=insthook();
}
别忘了退出时卸掉钩子
void COneDlg::OnCancel()
{
// TODO: Add extra cleanup here
typedef BOOL (CALLBACK *UnhookProc)();
UnhookProc UninstallHook;
UninstallHook=::GetProcAddress(hinst,"UninstallHook");
if(UninstallHook==NULL) UninstallHook();
if (hinst!=NULL)
{
::FreeLibrary(hinst);
}
if (hAddDll!=NULL)
{
::FreeLibrary(hAddDll);
}
CDialog::OnCancel();
}
http://blog.csdn.net/jiangxinyu/article/details/5385821
以上是关于求windows7系统中的一些相对路径地址!!!的主要内容,如果未能解决你的问题,请参考以下文章