zoukankan      html  css  js  c++  java
  • 【API】文件操作编程基础-CreateFile、WriteFile、SetFilePointer

    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
    ");
    		return 0;
    	}
    	//调用SetFilePointer函数调整文件指针位置,移动到文件末尾
    	if (SetFilePointer(hFile, 0, NULL, FILE_END) == -1)
    	{
    		printf("SetFilePointer error 
    ");
    		return 0;
    	}
    	char buff[256] = "配置信息_URL_information";
    	DWORD dwWrite;
    	//把buff中的内容写入到文件末尾
    	if (!WriteFile(hFile, &buff, strlen(buff), &dwWrite, NULL))
    	{
    		printf("WriteFile error 
    ");
    		return 0;
    	}
    	printf("往%ls中写入数据成功
    ", argv[1]);
    	CloseHandle(hFile);
    	return 0;
    }
    
    

    4、效果

  • 相关阅读:
    两次动态输入和while的结合使用
    索引切片步长
    12.⽤户登陆(三次输错机会)且每次输错误时显示剩余错误次数(提示:使⽤字符串格式化)
    输出1-100的所以奇数或偶数
    求1-2+3-4+5 ... 99的所有数的和
    求1-100所有数的和
    三次登录机会
    while输入12345689
    while和格式化输出的复合使用
    44
  • 原文地址:https://www.cnblogs.com/17bdw/p/8453241.html
Copyright © 2011-2022 走看看