1、说明

 很多黑客工具的实现是通过对文件进行读写操作的,而文件读写操作实质也是对API函数的调用。

2、相关函数

CreateFile :

 创建或打开文件或I/O设备。最常用的I/O设备如下:文件,文件流,目录,物理磁盘卷,控制台缓冲,磁带驱动器,通信资源,邮槽,和管。函数返回一个句柄,可以根据文件或设备和指定的标志和属性来访问各种类型的I/O文件或设备。

HANDLE WINAPI CreateFile(
_In_ LPCTSTR lpFileName,
_In_ DWORD dwDesiredAccess,
_In_ DWORD dwShareMode,
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
_In_ DWORD dwCreationDisposition,
_In_ DWORD dwFlagsAndAttributes,
_In_opt_ HANDLE hTemplateFile
);

字段说明:

  • In LPCTSTR lpFileName, 要创建或打开的文件或设备的名称

  • In DWORD dwDesiredAccess,请求对文件或设备的访问,该文件或设备可以概括为读、写,两者都或不为零)。

  • In DWORD dwShareMode,文件或设备的请求共享模式,可以读取、写入、删除、全部或全部

  • In_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,一个指向security_attributes结构包含两个独立但相关的数据成员:一个可选的安全描述符,和一个布尔值,决定是否返回的句柄可以被继承的子进程。

  • In DWORD dwCreationDisposition,对存在或不存在的文件或设备采取的操作。

  • In DWORD dwFlagsAndAttributes,文件或设备属性和标志

  • In_opt HANDLE hTemplateFile 一个文件或设备句柄,表示按这个参数给出的句柄为模板创建文件(就是将该句柄文件拷贝到lpFileName指定的路径,然后再打开)。

返回值:

如果函数成功,返回值是指定文件、设备、命名管道或邮件槽的打开句柄。

如果函数失败,返回值是invalid_handle_value。

SetFilePointer

移动指定文件的文件指针。

DWORD WINAPI SetFilePointer(
_In_ HANDLE hFile,
_In_ LONG lDistanceToMove,
_Inout_opt_ PLONG lpDistanceToMoveHigh,
_In_ DWORD dwMoveMethod
);

字段说明:

  • In HANDLE hFile, 文件句柄
  • In LONG lDistanceToMove,指定移动文件指针的字节数。
  • Inout_opt PLONG lpDistanceToMoveHigh,指向符号64位移动距离的高32位的指针。如果不需要高阶32位,则指针必须设置为null。
  • In DWORD dwMoveMethod 文件指针移动的起始点。

WriteFile

BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);

字段说明:

  • HANDLE hFile, 对要写入的文件的句柄。
  • LPCVOID lpBuffer, 指向包含写入文件的数据的缓冲区的指针。
  • DWORD nNumberOfBytesToWrite, 写入文件的字节数。
  • LPDWORD lpNumberOfBytesWritten, 指向该函数调用写入的字节数的指针。
  • LPOVERLAPPED lpOverlapped 指向重叠结构的指针,它包含异步输入和输出中使用的信息。

3、代码

// 20180218_文件操作编程-CreateFile、WriteFile、SetFilePointer.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <windows.h>
#include <stdio.h> int wmain(int argc, wchar_t *argv[])
{
//调用CreateFile函数以只写方式打开一个文件
HANDLE hFile = CreateFile(argv[1], GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("CreateFile error\n");
return 0;
}
//调用SetFilePointer函数调整文件指针位置,移动到文件末尾
if (SetFilePointer(hFile, 0, NULL, FILE_END) == -1)
{
printf("SetFilePointer error \n");
return 0;
}
char buff[256] = "配置信息_URL_information";
DWORD dwWrite;
//把buff中的内容写入到文件末尾
if (!WriteFile(hFile, &buff, strlen(buff), &dwWrite, NULL))
{
printf("WriteFile error \n");
return 0;
}
printf("往%ls中写入数据成功\n", argv[1]);
CloseHandle(hFile);
return 0;
}

4、效果

【API】文件操作编程基础-CreateFile、WriteFile、SetFilePointer的更多相关文章

  1. python学习笔记三 文件操作(基础篇)

    文件操作 打开文件 open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉]   w ...

  2. win32 api 文件操作!

    CreateFile打开文件要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门. ReadFile从文件中读取字节信息.在打开文件获得了文件句柄之后, ...

  3. File API文件操作之FileReader

    近来研究点对点的文件传输,想到一种方案FileReader+WebRtc. 当我看到FileReader的时候,哎呀,不错的东西啊,仔细一看属于File API,或者叫做Web API. File A ...

  4. linux 文件操作编程

    Linux中所有的设备和文件的操作都使用文件描述符来进行. 文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开的记录表. 当打开一个文件或者创建一个新文件时,内核就向进程返回一个文件描 ...

  5. java IO文件操作简单基础入门例子,IO流其实没那么难

    IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...

  6. File API文件操作之FileReader二

    上一篇说了FileAPI中FileReader的readAsText,这里继续上文,说说另外一个API readAsDataURL. 这个接口是将File或者Blob读成base64格式的字符串,然后 ...

  7. JavaScript文件操作(1)-基础

    http://www.iunbug.com/archives/2012/06/04/208.html

  8. python-with管理文件上下文(基本文件操作)

    什么是文件 文件是操作系统为用户提供的一个读写硬盘的虚拟单位,文件的操作就是文件的读.写. 操作过程:当我们双击文件 -<- 操作系统接收到指令请求(将用户或应用程序的读写操作转换成集体的硬盘指 ...

  9. Day 09 文件操作

    什么是文件 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位.文件的操作是基于文件,即文件的操作核心就是:读和写.也 就是只要我们想要操作文件就是对操作系统发起请求,然后由操作系统将用户或应 ...

随机推荐

  1. Linux内核分析 实验一 ——by王玥

    一.实验内容 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码, ...

  2. LINUX内核分析第二周学习总结——操作系统是如何工作的

    LINUX内核分析第二周学习总结——操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  3. DataGridView显示行号-RowPostPaint

    DataGridView控件在显示数据时,我们有时候需要显示行号,以便检索查看方便使用. 但DataGridView默认没有设置显示行号的属性. 此时我们只要在DataGridView的RowPost ...

  4. 利用mask-image蒙层编写异形头像

    需求:后台给了一个规规矩矩的头像,或圆或方,UI要求展示成水滴的形状.正在想到底如何实现的时候,不由自主去翻了鑫神的博客,正好找到了答案,窃喜(·_·) UI给的形状: 后台给的头像(忽略橙色背景色, ...

  5. 对比网络模拟器软件——Cisco Packet Tracer、华为eNSP、H3C Cloud Lab

    1.软件介绍 1.1 Cisco Packet Tracer Cisco Packet Tracer(以下简称PT)是一款由思科公司开发的,为网络课程的初学者提供辅助教学的实验模拟器.使用者可以在该模 ...

  6. 原生 JS 中 延迟脚本和异步脚本

    一.延迟脚本 defer HTML4.0中为<script> 标签添加了个defer属性.属性的用途是表民脚本在执行时不会影响页面的构造. 脚本会被延迟到页面加载完毕的时候,执行.也就是当 ...

  7. Windows 2019 下安装Oracle18c

    1. 跟之前版本不一样 与linux 的版本一样 18c的DB 端的安装有区别. 首先需要 创建一个oracle的目录. 这里最简单的方法是 参照12c的目录来 创建 比如我创建的 然后将 db_ho ...

  8. python进阶-虚拟环境

    virtualenv # 安装 pip install virtualenv # 查看版本,确认安装完成 virtualenv --version # 创建虚拟环境 virtualenv my_env ...

  9. SpringMvc+JavaConfig+Idea 基于JavaConfig搭建项目

    1.介绍 之前搭建SpringMvc项目要配置一系列的配置文件,比如web.xml,applicationContext.xml,dispatcher.xml.Spring 3.X之后推出了基于Jav ...

  10. XP局域网访问无权限、不能互相访问问题的完整解决方案

    XP局域网访问无权限问题的完整解决方案: 1:用管理员账户登录系统 2:在“开始”-- “运行”里输入 GPEDIT.MSC 目的是打开组策略选项 3:依次展开”WINDOWS设置”-”本地策略”-” ...