常见Windows API(文件、注册表、服务、进程线程、DLL)

本文详细介绍了Windows API在文件操作(创建、删除、读写等)、注册表管理(打开、关闭、读写、枚举)、服务控制(启动、停止、枚举)、进程线程操作(创建、结束、枚举)以及DLL动态链接库的使用(加载、注入、卸载)等方面的应用,提供了关键API函数的介绍。
摘要由CSDN通过智能技术生成

文件相关:

创建或打开文件:

HANDLE CreateFile(
  LPCSTR                lpFileName,                    //欲打开或创建的文件名,也可以是设备对象之类的被视为文件的相关对象
  DWORD                 dwDesiredAccess,               //对文件的访问模式,只读,只写,还可以进行位或同时指定两种模式
  DWORD                 dwShareMode,                    //打开文件的共享模式,文件是否允许其他进程进行操作,如果可以,可以指定操作的模式
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,           //表示安全属性可以指定返回的文件句柄是否可以被子进程继承,如果为NULL,表示无法被继承,否则需要将参数指向一个SECURITY_ATTRIBUTES的结构体,通常设为NULL
  DWORD                 dwCreationDisposition,           //在创建或打开的文件存在或不存在的时候该函数的处理方式
  DWORD                 dwFlagsAndAttributes,            //该参数用来指定新建文件的属性和对文件操作的方式
  HANDLE                hTemplateFile                    //文件模块句柄,系统会复制该文件模板的所有属性到当前创建的文件中
);

//该函数若执行成功,则返回文件句柄,若失败则返回INVALID_HANDLE_VALUE。具体失败的原因可以通过GetLastError()函数来得到,该函数即可以打开文件也可以创建文件,创建或打开文件之后要用CloseHandle()将文件句柄关闭 

eg: CreateFile(szTraget,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTES_NORMAL,NULL);

删除文件:

BOOL DeleteFile(
  LPCSTR lpFileName                //表示要删除的文件的文件名
);

读取文件内容:

BOOL ReadFile(
  HANDLE       hFile,                    //文件句柄,通常是CreateFile(返回的句柄)
  LPVOID       lpBuffer,                 //指向一个缓冲区,函数会将从文件中读出的数据保存在该缓冲区中
  DWORD        nNumberOfBytesToRead,     //要求读入的字节数,通常情况下是缓冲区的大小
  LPDWORD      lpNumberOfBytesRead,      //指向一个DWORD类型的变量,用于返回实际读入的字节数
  LPOVERLAPPED lpOverlapped              //一般设置位NULL
);

写入文件内容:

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

//和ReadFile()函数的参数意义基本相同,所不同的是第二个参数,第二个参数仍指向同一个缓冲区,WriteFile()函数会将该缓冲区的内容进行写入。当用WriteFile()函数写文件时,写入的数据通常被Windows暂时保存在内部的高速缓存中,操作系统会定期进行盘写入,从而避免进行I/O操作影响执行效率。为了保证数据即时写入可以使用

FlushFileBuffers(
    HANDLE hFile //handle to file
)

//该函数会将指定文件句柄的缓冲区进行清空,使得Windows将缓冲区中的文件写入磁盘。该函数只有一个参数,即文件句柄。该文件句柄与ReadFile()和WriteFile()所使用的文件句柄相同

定位到文件的某个位置

DWORD SetFilePointer(
  HANDLE hFile,                    //进行文件操作时的文件句柄
  LONG   lDistanceToMove,          //指定要移动文件指针的距离
  PLONG  lpDistanceToMoveHigh,     //一个指向LONG型的指针,移动距离的高32位,一般为NULL
  DWORD  dwMoveMethod                //指针移动的起始位置。可以从文件开始位置进行移动,可以从当前文件位置开始移动,也可以从文件的末尾开始移动
);

获取本地所有逻辑驱动器

DWORD GetLogicalDriveStrings(
  DWORD  nBufferLength,                //表示lpBuffer的长度
  LPWSTR lpBuffer                      //表示接受本地逻辑驱动器名的缓冲区
);

获取驱动器类型

UINT GetDriveType(
  LPCSTR lpRootPathName        //驱动器名
);

创建目录

BOOL CreateDirectory(
  LPCSTR                lpPathName,                //创建目录的目录名称
  LPSECURITY_ATTRIBUTES lpSecurityAttributes       //安全属性,一般设置为NULL
);

移除目录

BOOL RemoveDirectory(
  LPCSTR lpPathName            //指定要移除目录的目录名
);

 

 

注册表相关:

基础知识:注册表是Windows系统管理和维护的配置较为复杂的信息数据库,它以树状形式存储信息,不同版本的Windows系统,其结构基本相同。由于各种软件为了满足自身的不同需求,对注册表中的信息进行读写,导致注册表中存在大量的冗余数据,因此有人戏称注册表是一个数据杂乱的“垃圾场”

注册表主要有这几项信息:根键、子键、键值项!键值项又包含:值名称,值类型和值

 

API:

打开注册表

LSTATUS RegOpenKeyEx(
  HKEY   hKey,                //指定一个父键句柄
  LPCSTR lpSubKey,            //指向一个字符串,用来表示要打开的子健名称
  DWORD  ulOptions,  
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值