您的位置:首页 > 其它

简单API练手:(1)复制自身程序到windows目录和系统目录下;(2)获得系统的相关信息。

2015-04-07 13:34 519 查看
1.复制自身程序到windows目录和系统目录下:

#include <windows.h>
#include <stdio.h>
#include <string.h>

void CopySelf();

int main(){
CopySelf();
return 0;
}
void CopySelf(){
char szSelfName[MAX_PATH]={0};
char szWindowsPath[MAX_PATH]={0};
char szSystemPath[MAX_PATH]={0};

GetModuleFileName(NULL,szSelfName,MAX_PATH);
GetWindowsDirectory(szWindowsPath,MAX_PATH);
GetSystemDirectory(szSystemPath,MAX_PATH);

strcat(szWindowsPath,"\\backdoor.exe");
strcat(szSystemPath,"\\backdoor.exe");

CopyFile(szSelfName,szWindowsPath,FALSE);
CopyFile(szSelfName,szSystemPath,FALSE);
}


相关API介绍:

1>获得自身程序所在路径的API定义:

DWORD GetModuleFileName{
HMODULE hModule,    //handle to module
LPTSTR  lpFilename, //file name of module
DWORD   nSize       //size of buffer
};


三个参数,分别如下:

hModule:该参数在获得自身程序时使用为NULL。

lpFilename:该参数指定一个字符型的缓冲区,用于保存程序自身所在的路径。

nSize:该参数指定缓冲区的大小。

2>获得Windows目录的API的定义:

UINT GetWindowsDirectory{
LPTSTR lpBuffer,    //buffer for Windows directory
UINT uSize          //size of directory buffer
};


两个参数,分别如下:

lpBuffer:指定一个字符型的缓冲区,用于保存Windows目录的路径。

uSize:指定缓冲区的大小。

3>获得系统目录的API函数的定义:

UINT GetSystemDirectory{
LPTSTR lpBuffer,    //buffer for system directory
UINT uSize          //size of directory buffer
};


两个参数,分别如下:

lpBuffer:指定一个字符型的缓冲区,用于保存系统目录的路径。

uSize:指定缓冲区的大小。

4>拷贝文件的API函数的定义:

BOOL CopyFile{
LPCTSTR lpExistingFileName,  //name of an existing file
LPCTSTR lpNewFileName,       //name of new file
BOOL bFailIfExists           //operation if file exists
};


三个参数,分别如下:

lpExistingFileName:指向一个已存在文件的路径,即原文件路径。

lpNewFileName:指向一个新的文件的位置,即欲拷贝到的文件的目的路径。

bFailIfExists:一个布尔型参数,如果参数为TRUE,若目的文件已存在则返回,复制失败;如果参数为FALSE,,若目的文件已存在则强行覆盖原有的文件。

2.获得系统的相关信息:

#include <windows.h>
#include <stdio.h>

void GetSysInfo();

int main(){
GetSysInfo();
return 0;
}
void GetSysInfo(){
char szComputerName[MAXBYTE]={0};
char szUserName[MAXBYTE]={0};
unsigned long nSize=MAXBYTE;
OSVERSIONINFO OsVer;

OsVer.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&OsVer);

if(OsVer.dwPlatformId==VER_PLATFORM_WIN32_NT){
if(OsVer.dwMajorVersion==5&&OsVer.dwMinorVersion==1)
printf("Windows XP %s \r\n",OsVer.szCSDVersion);
else if(OsVer.dwMajorVersion==5&&OsVer.dwMinorVersion==0)
printf("Windows 2K \r\n");
}else{
printf("Other System \r\n");
}

GetComputerName(szComputerName,&nSize);
printf("Computer Name is %s \r\n",szComputerName);

nSize=MAXBYTE;
GetUserName(szUserName,&nSize);
printf("User Name is %s \r\n",szUserName);
}


相关API介绍如下:

1>获取操作系统版本:

BOOL GetVersionEx{
LPOSVERSIONINFO lpVersionInfo   //version information
};


一个参数,如下:

lpVersionInfo:指向一个OSVERSIONINFO结构的指针。

typedef struct _OSVERSIONINFO{
DWORD dwOSVersionInfoSize;  //结构体大小
DWORD dwMajorVersion;       //主版本号
DWORD dwMinorVersion;       //次版本号
DWORD dwBuildNumber;
DWORD dwPlatformId;         //平台ID
TCHAR szCSDVersion[128];    //补丁包
}OSVERSIONINFO;


dwPlatformId的取值有3个,而现在主要使用一个,即VER_PLATFORM_WIN32_NT。

2>获取计算机名称:

BOOL GetComputerName{
LPTSTR lpBuffer,    //computer name
LPDWORD lpnSize     //size of name buffer
};


两个参数,分别如下:

lpBuffer:保存计算机名称缓冲区。

lpnSize:保存缓冲区的长度,该参数是一个输入/输出参数。

3>获取当前用户名称:

BOOL GetUserName{
LPTSTR lpBuffer,    //name buffer
LPDWORD nSize       //size of name buffer
};


两个参数,分别如下:

lpBuffer:保存当前用户名称的缓冲区。

nSize:保存缓冲区的长度,该参数是一个输入/输出参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐