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

1.复制自身程序到windows目录和系统目录下:

 1 #include <windows.h>
 2 #include <stdio.h>
 3 #include <string.h>
 4 
 5 void CopySelf();
 6 
 7 int main(){
 8     CopySelf();
 9     return 0;
10 }
11 void CopySelf(){
12     char szSelfName[MAX_PATH]={0};
13     char szWindowsPath[MAX_PATH]={0};
14     char szSystemPath[MAX_PATH]={0};
15 
16     GetModuleFileName(NULL,szSelfName,MAX_PATH);
17     GetWindowsDirectory(szWindowsPath,MAX_PATH);
18     GetSystemDirectory(szSystemPath,MAX_PATH);
19 
20     strcat(szWindowsPath,"\backdoor.exe");
21     strcat(szSystemPath,"\backdoor.exe");
22 
23     CopyFile(szSelfName,szWindowsPath,FALSE);
24     CopyFile(szSelfName,szSystemPath,FALSE);
25 }

相关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.获得系统的相关信息:

 1 #include <windows.h>
 2 #include <stdio.h>
 3 
 4 void GetSysInfo();
 5 
 6 int main(){
 7     GetSysInfo();
 8     return 0;
 9 }
10 void GetSysInfo(){
11     char szComputerName[MAXBYTE]={0};
12     char szUserName[MAXBYTE]={0};
13     unsigned long nSize=MAXBYTE;
14     OSVERSIONINFO OsVer;
15 
16     OsVer.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
17     GetVersionEx(&OsVer);
18 
19     if(OsVer.dwPlatformId==VER_PLATFORM_WIN32_NT){
20         if(OsVer.dwMajorVersion==5&&OsVer.dwMinorVersion==1)
21             printf("Windows XP %s 
",OsVer.szCSDVersion);
22         else if(OsVer.dwMajorVersion==5&&OsVer.dwMinorVersion==0)
23             printf("Windows 2K 
");
24     }else{
25         printf("Other System 
");
26     }
27 
28     GetComputerName(szComputerName,&nSize);
29     printf("Computer Name is %s 
",szComputerName);
30 
31     nSize=MAXBYTE;
32     GetUserName(szUserName,&nSize);
33     printf("User Name is %s 
",szUserName);
34 }

相关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:保存缓冲区的长度,该参数是一个输入/输出参数。

原文地址:https://www.cnblogs.com/jiu0821/p/4398072.html