很多黑客工具的实现是通过对文件进行读写操纵的,而文件读写操纵本色也是对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
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、效果