简单API练手:(1)复制自身程序到windows目录和系统目录下;(2)获得系统的相关信息。
1.复制自身程序到windows目录和系统目录下:
#include <windows.h>
#include <stdio.h>
#include <string.h> void CopySelf(); int main(){
CopySelf();
return ;
}
void CopySelf(){
char szSelfName[MAX_PATH]={};
char szWindowsPath[MAX_PATH]={};
char szSystemPath[MAX_PATH]={}; 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 ;
}
void GetSysInfo(){
char szComputerName[MAXBYTE]={};
char szUserName[MAXBYTE]={};
unsigned long nSize=MAXBYTE;
OSVERSIONINFO OsVer; OsVer.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&OsVer); if(OsVer.dwPlatformId==VER_PLATFORM_WIN32_NT){
if(OsVer.dwMajorVersion==&&OsVer.dwMinorVersion==)
printf("Windows XP %s \r\n",OsVer.szCSDVersion);
else if(OsVer.dwMajorVersion==&&OsVer.dwMinorVersion==)
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[]; //补丁包
}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:保存缓冲区的长度,该参数是一个输入/输出参数。
简单API练手:(1)复制自身程序到windows目录和系统目录下;(2)获得系统的相关信息。的更多相关文章
- 复制自身程序到windows目录和system32目录下
功能:复制自身到windows目录和system32目录下. 参考代码: #include <stdio.h> #include <windows.h> void CopySe ...
- Xamarin入门,开发一个简单的练手APP
之前周末用Xamarin练手做了个简单APP,没有啥逻辑基本就是个界面架子,MVVM的简单使用,还有Binding,Command的简单使用,还有一个稍微复杂点两个界面交互处理(子页面新增后关闭,父页 ...
- Socket程序从windows移植到linux下需要注意的
)头文件 windows下winsock.h或winsock2.h linux下netinet/in.h(大部分都在这儿),unistd.h(close函数在这儿),sys/socket.h(在in. ...
- jquery数据验证插件(自制,简单,练手)
一:最近项目中js数据验证比较多,为了统一风格,移植复用,于是顺手封装了Jquery的插件. (function($) { var defaults = { bugColor: '#FFCCCC', ...
- Cocos2d-Lua (练手) 微信打飞机
学习下lua,目前入门级,使用版本为 v3.3 Final For Win,空闲时间不足,只能断断续续写点东西. 一.子弹效果 子弹只做了一种,扇形发射,可以增加扇形大小,子弹的 ...
- 第一个手写Win32窗口程序
第一个手写Win32窗口程序 一 Windows编程基础 1 Win32应用程序的基本类型 1.1 控制台程序 不需要完善的Windows窗口,可以使用DOS窗口 的方式显示. 1.2 Win32窗口 ...
- WEB服务器4--IIS中网站、Web应用程序和虚拟目录
网站.Web应用程序和虚拟目录 在IIS中可以创建网站.Web 应用程序和虚拟目录,以便与计算机网络上的用户共享信息. “网站”.“Web 应用程序”和“虚拟目录”这三个概念的关系如图 8‑1所示. ...
- 【开源】前端练手笔记,Chrome扩展应用程序(html+CSS+JS) (1)
项目名称:github-notification 项目地址:https://github.com/WQTeam/github-notification 说明:本人打算抽时间学习前端(html + cs ...
- 微信小程序初体验,入门练手项目--通讯录,后台是阿里云服务器(一)
内容: 一.前言 二.相关概念 三.开始工作 四.启动项目起来 五.项目结构 六.设计理念 七.路由 八.部署线上后端服务 同步交流学习社区: https://www.mwcxs.top/page/4 ...
随机推荐
- 201621123010《Java程序设计》第7周学习总结
1. 本周学习总结 1.1思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. addActionListener(new Actio ...
- Python基础学习----名片管理系统学习笔记
主文件: import stu_tools while True: stu_tools.select_list() select = input("请输入您的操作指令") prin ...
- 判断一棵树是否为二叉搜索树(二叉排序树) python
输入一棵树,判断这棵树是否为二叉搜索树.首先要知道什么是排序二叉树,二叉排序树是这样定义的,二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的 ...
- Android GPS GPSBasics project hacking
一.参考源码: GPS Basic Example - Android Example http://androidexample.com/GPS_Basic__-__Android_Example/ ...
- springboot整合mybatis增删改查(四):完善增删改查及整合swgger2
接下来就是完成增删改查的功能了,首先在config包下配置Druid数据连接池,在配置之前先把相关配置在application.preperties中完善 application.preperties ...
- 6-18 Two Stacks In One Array(20 分)
Write routines to implement two stacks using only one array. Your stack routines should not declare ...
- Vim: 有关空格和tab的设置,以及如何全文将空格转成tab
这两行可以放在~/.vimrc: :set tabstop=8:set noexpandtab 这个可以每次手动运行,从而将所有的空格转成tab:%retab!
- USB学习笔记-协议
一.USB设备枚举过程 1.复位从设备使其设备地址为02.先从设备发送读取设备描述符的命令(只读取一次,即使端点0的最大包长小于18字节)3.设备返回设备描述符4.主机返回0长度确认数据包给到设备5. ...
- JS代码压缩格式化在线地址
JS在线格式化: http://tool.oschina.net/codeformat/js JS在线压缩: http://dean.edwards.name/packer/
- A Newbie’s Install of Keras & Tensorflow on Windows 10 with R
This weekend, I decided it was time: I was going to update my Python environment and get Keras and T ...