Windows.h中的函数有哪些?

今天我来给大家介绍一些常用的Windows.h中的函数。

这些函数非常适合做病毒,,对病毒感兴趣的朋友可以来看看。

Windows.h 是 Windows API 的主要头文件,它包含了大量的宏、类型定义、函数声明等。实际上,Windows.h 自身并不直接定义所有函数,而是包含了许多其他头文件,这些头文件中定义了各种 Windows API 函数。

由于 Windows.h 及其相关头文件中的函数数量非常庞大,我无法在这里列出所有函数。但是,我可以提供一些常见和重要的函数类别及其示例函数。请注意,这些示例只是每个类别中的一小部分函数。

在文末我给大家展示出了所有Windows.h中的函数,大家可以访问文末那个网址去查看。

因为今天整理的比较匆忙,所以有一些部分会重复,请大家谅解,谢谢。

窗口和消息处理

  • CreateWindowEx:创建一个窗口,并返回一个与该窗口关联的句柄。它是创建应用程序主窗口或子窗口的主要函数。
  • ShowWindow:设置窗口的显示状态(如最大化、最小化、隐藏等)。
  • SendMessage:向窗口发送消息,并等待消息被处理完毕后才返回。常用于窗口之间的通信。

图形和设备上下文 (GDI)

  • CreateCompatibleDC:创建一个与指定设备兼容的内存设备上下文。
  • SelectObject:选择一个对象(如画笔、画刷、字体或位图)到设备上下文中。
  • BitBlt:执行位块传输操作,从一个设备上下文复制位图到另一个设备上下文。

文件和文件系统

  • CreateFile:创建或打开一个文件,并返回一个句柄用于后续的文件操作。
  • ReadFile:从文件中读取数据。
  • WriteFile:向文件中写入数据。

进程和线程

  • CreateProcess:创建一个新进程和它的主线程。这个新进程运行在其自己的地址空间中,并且可以独立于调用进程运行。
  • CreateThread:在当前进程的地址空间中创建一个新线程。

同步

  • CreateMutex:创建一个互斥对象。
  • WaitForSingleObject:等待指定的同步对象变为有信号状态。

内存管理

  • GlobalAlloc:分配指定数量的字节,并返回一个句柄,该句柄可用于访问这些字节。这是全局内存分配的一种方式。
  • GlobalFree:释放由GlobalAlloc或相关函数分配的全局内存块。
  • VirtualAlloc:在调用进程的虚拟地址空间中保留、提交或更改页的状态。常用于动态内存分配。
  • VirtualFree:释放之前由VirtualAlloc函数保留、提交或更改的页区域。

动态链接库 (DLL)

  • LoadLibrary:加载指定的动态链接库(DLL)到调用进程的地址空间,并返回一个句柄,该句柄可用于获取DLL中的函数。
  • GetProcAddress:检索指定动态链接库(DLL)中导出函数的地址。
  • FreeLibrary:当DLL模块不再需要时,减少其引用计数。如果引用计数达到零,模块将从调用进程的地址空间中卸载。

系统信息和控制

  • GetVersion:获取当前操作系统的版本号。注意,在较新的Windows版本中,建议使用GetVersionExRtlGetVersion
  • GetSystemInfo:获取有关当前系统的信息,如处理器架构、页面大小、最小和最大应用程序地址空间等。
  • SetSystemTime:设置当前系统时间。通常需要管理员权限。
  • GetSystemTime:检索当前系统日期和时间。

进程和线程(续)

  • TerminateProcess:立即终止指定进程及其所有线程。这是一个强制性的操作,通常应避免使用。
  • GetCurrentProcess:获取调用线程所在进程的伪句柄。
  • GetCurrentThread:获取调用线程的伪句柄。
  • SetThreadPriority:设置指定线程的优先级。

事件日志

  • ReportEvent:将事件写入指定的事件日志。常用于应用程序、系统或安全日志记录。
  • OpenEventLog:打开指定计算机上的事件日志以供读取或写入。
  • ReadEventLog:从指定的事件日志中读取事件记录。

剪贴板

  • OpenClipboard:打开一个与调用线程关联的剪贴板对象,以便进行后续操作。
  • EmptyClipboard:清空剪贴板内容。
  • SetClipboardData:将数据放入剪贴板。
  • GetClipboardData:从剪贴板中检索指定格式的数据。
  • CloseClipboard:关闭剪贴板对象。

注册表操作

  • RegOpenKeyEx:打开一个指定的注册表键,并返回一个句柄,用于对该键进行后续操作。
  • RegQueryValueEx:查询指定注册表键下的指定值的数据。
  • RegSetValueEx:设置指定注册表键下的指定值的数据。
  • RegCreateKeyEx:在注册表中创建指定的键。如果键已存在,该函数还可以打开它。
  • RegDeleteKey:删除注册表中的一个键及其所有子键。
  • RegCloseKey:关闭之前打开的注册表键的句柄。

文件操作(续)

  • DeleteFile:删除一个现有文件。
  • MoveFile:将一个现有文件或目录(包括其子项)移动到新位置,可以跨卷移动。
  • CopyFile:将现有文件复制到新文件。
  • CreateDirectory:创建一个新目录。如果中间目录不存在,该函数可以一并创建它们。
  • RemoveDirectory:删除一个现有目录。该目录必须为空,除非使用了特定标志。

管道和通信

  • CreateNamedPipe:创建一个命名管道,并返回其句柄。命名管道是进程间通信的一种机制。
  • ConnectNamedPipe:等待客户端连接到命名管道。
  • WaitNamedPipe:等待命名管道可用,即等待客户端连接或数据可用于读取。
  • TransactNamedPipe:在命名管道上进行读写操作,通常用于完成一次完整的客户端-服务器交互。

网络操作

  • InternetOpen:初始化一个应用程序对WinINet函数的调用,并返回一个句柄。
  • InternetOpenUrl:打开一个URL并读取数据,该函数结合了InternetOpenInternetConnectHttpOpenRequest的功能。
  • InternetReadFile:从由InternetOpenUrl或类似函数打开的句柄中读取数据。
  • InternetCloseHandle:关闭由WinINet函数打开的单个句柄。

服务控制

  • StartServiceCtrlDispatcher:连接服务控制管理器,并启动服务的控制请求处理循环。
  • RegisterServiceCtrlHandler:注册一个服务控制处理程序函数,以处理来自服务控制管理器的控制请求。
  • SetServiceStatus:更新服务控制管理器中关于服务的状态信息。

性能计数器

  • PdhOpenQuery:打开一个性能数据查询,并返回一个查询句柄。
  • PdhAddCounter:向查询中添加一个性能计数器。
  • PdhCollectQueryData:收集查询中所有计数器的当前值。
  • PdhGetFormattedCounterValue:检索给定计数器的格式化值。

窗口管理

  • ShowWindow:设置指定窗口的显示状态(如最大化、最小化、隐藏等)。
  • UpdateWindow:强制立即更新窗口。发送一个 WM_PAINT 消息给窗口,即使窗口的更新区域为空。
  • SetWindowPos:设置窗口的大小、位置及层次(Z-order)。
  • GetWindowRect:检索窗口的边界矩形的大小和位置。
  • GetClientRect:检索窗口客户区的大小和位置。

图形设备接口 (GDI)

  • TextOut:在指定的位置输出格式化的文本。
  • Ellipse:在当前设备上下文中绘制椭圆。
  • Rectangle:在当前设备上下文中绘制矩形。
  • LineTo:从当前位置到指定点绘制一条线。
  • MoveToEx:将指定的点设置为绘图操作的当前位置。
  • SelectObject:选择一个对象(如画笔、画刷或字体)到设备上下文中。

消息和输入

  • TranslateMessage:翻译虚拟键消息为字符消息。通常用在消息循环中。
  • DispatchMessage:分发一个应用程序消息到窗口过程。
  • GetMessage:从应用程序的消息队列中检索消息。
  • PeekMessage:检查应用程序的消息队列,查看是否有消息可供检索,但不会从队列中移除它们。
  • SendMessage:向指定窗口发送消息,并等待消息处理完成后才返回。

进程和线程(续)

  • CreateProcess:创建一个新进程和它的主线程。新进程运行在其自己的地址空间中,并且可以独立于调用进程运行。
  • TerminateThread:结束指定线程的执行。这是一个危险的操作,因为它可能导致资源泄露和其他问题。
  • GetExitCodeThread:检索指定线程的终止状态。
  • SetThreadAffinityMask:设置线程的处理器亲和性掩码,以确定线程可以在哪些处理器上运行。

同步

  • CreateMutex:创建一个互斥对象。
  • ReleaseMutex:释放指定的互斥对象。
  • WaitForSingleObject:等待指定的对象(如互斥体、事件或信号量)变为有信号状态。
  • CreateSemaphore:创建一个新的信号量对象。
  • ReleaseSemaphore:增加指定信号量的计数。

文件和文件系统

  • CreateFile:创建或打开一个文件、文件流、目录、物理磁盘、卷、控制台缓冲区或设备。
  • ReadFile:从文件中读取数据。通常与 CreateFile 函数一起使用来打开文件。
  • WriteFile:将数据写入文件。
  • FlushFileBuffers:清空指定文件的缓冲区,将所有缓冲的数据写入磁盘。
  • DeleteFile:删除一个现有的文件。

系统信息和控制

  • GetVersion:获取当前操作系统的版本号。
  • GetVersionEx:获取详细的操作系统版本信息(注意:在 Windows 8.1 之后,推荐使用 GetVersionExW 或 RtlGetVersion)。
  • SystemParametersInfo:检索或设置系统级参数,如桌面壁纸、屏幕保护程序等。
  • GetSystemInfo:获取当前系统的信息,包括处理器架构、页面大小等。

进程和线程

  • GetCurrentProcess:获取调用线程的当前进程的伪句柄。
  • GetCurrentThreadId:获取调用线程的线程标识符。
  • OpenProcess:打开一个已存在的进程对象,并返回进程的句柄。
  • CreateThread:创建一个新线程来执行指定的函数。
  • ExitThread:立即终止调用线程的执行。
  • ExitProcess:终止当前进程和所有它的线程。

内存管理

  • VirtualAlloc:在调用进程的虚拟地址空间中保留、提交或更改页的状态。
  • VirtualFree:释放之前通过 VirtualAlloc 保留的页区域。
  • HeapAlloc:从堆中分配内存块。
  • HeapFree:释放通过 HeapAlloc 分配的内存块。

时间

  • GetSystemTime:获取当前系统日期和时间。
  • GetSystemTimeAsFileTime:获取当前系统日期和时间,格式为 FILETIME 结构。
  • GetTickCount:获取自系统启动以来的毫秒数。
  • QueryPerformanceCounter:获取高分辨率性能计数器的当前值。
  • QueryPerformanceFrequency:获取高分辨率性能计数器的频率。

用户界面(续)

  • InvalidateRect:使整个窗口客户区或指定的矩形区域无效,导致系统在下次消息循环时重绘该区域。
  • ValidateRect:使窗口的指定矩形区域有效,消除之前的无效区域标记。
  • RedrawWindow:重绘指定的窗口区域。
  • EnableWindow:启用或禁用窗口,以响应用户输入。
  • IsWindowEnabled:确定窗口是否已启用以响应用户输入。

剪贴板

  • OpenClipboard:打开一个剪贴板以便读写。
  • CloseClipboard:关闭剪贴板。
  • EmptyClipboard:清空剪贴板并释放剪贴板中数据的句柄。
  • SetClipboardData:将指定类型的数据放置到剪贴板上。
  • GetClipboardData:从剪贴板中检索指定类型的数据。

动态链接库 (DLL)

  • LoadLibrary:加载指定的模块到调用进程的地址空间。
  • GetProcAddress:检索指定模块中导出函数的地址。
  • FreeLibrary:释放通过 LoadLibrary 加载的模块。

文件操作

  • CreateFileMapping:创建一个文件映射对象,用于将文件数据映射到进程的地址空间。
  • MapViewOfFile:将文件映射对象的视图映射到调用进程的地址空间。
  • UnmapViewOfFile:取消文件映射对象视图在调用进程地址空间中的映射。
  • CloseHandle:关闭一个打开的句柄。
  • SetFilePointer:移动指定文件的文件指针。

进程间通信 (IPC)

  • CreateNamedPipe:创建一个命名管道,用于进程间通信。
  • ConnectNamedPipe:等待客户端连接到命名管道。
  • DisconnectNamedPipe:断开与命名管道的客户端连接。
  • TransactNamedPipe:在命名管道上进行读写操作。

线程同步

  • CreateEvent:创建一个事件对象。
  • SetEvent:将指定的事件对象设置为有信号状态。
  • ResetEvent:将指定的事件对象重置为无信号状态。
  • WaitForMultipleObjects:等待多个对象中的任何一个变为有信号状态。
  • CreateSemaphoreEx:创建一个信号量对象(扩展版本,支持更多功能)。

注册表操作

  • RegOpenKeyEx:打开一个指定的注册表键。
  • RegQueryValueEx:检索指定注册表键的值。
  • RegSetValueEx:设置指定注册表键的值。
  • RegCreateKeyEx:创建一个新的注册表键。
  • RegDeleteKey:删除一个注册表键。

服务控制

  • StartServiceCtrlDispatcher:连接服务控制管理器并启动服务的控制请求分发线程。
  • RegisterServiceCtrlHandlerEx:注册一个处理函数来接收服务控制请求。
  • SetServiceStatus:更新服务的状态信息。

网络编程

  • socket:创建一个新的套接字,并为其分配系统资源。
  • bind:将一个本地地址与套接字关联。
  • listen:使套接字处于监听状态,准备接受连接请求。
  • accept:接受一个连接请求,并创建一个新的套接字用于与该客户端通信。
  • connect:尝试与远程服务器建立连接。
  • send / recv:发送和接收数据。

安全

  • LogonUser:尝试以指定的用户名、域和密码登录用户。
  • ImpersonateLoggedOnUser:允许线程模拟另一个用户的安全上下文。
  • RevertToSelf:结束线程对当前用户的模拟,恢复为进程令牌的原始用户。

调试和错误处理

  • OutputDebugString:向调试器发送一个字符串。
  • GetLastError:检索调用线程的最后错误代码。
  • SetLastError:设置调用线程的最后错误代码(通常不直接调用,而是由 API 函数在出错时设置)。
  • FormatMessage:格式化一个错误消息字符串。

内存管理

  • GlobalAlloc:从全局堆中分配指定数量的字节。
  • GlobalFree:释放通过 GlobalAlloc 分配的全局内存块。
  • GlobalLock:锁定一个全局内存对象,并返回指向它的第一个字节的指针。
  • GlobalUnlock:解锁之前通过 GlobalLock 锁定的全局内存对象。
  • LocalAlloc:从本地堆中分配内存。
  • LocalFree:释放通过 LocalAlloc 分配的本地内存。

进程和线程

  • CreateProcessAsUser:在指定用户的安全上下文中创建一个新进程。
  • TerminateProcess:立即终止指定进程及其所有线程。
  • OpenThread:打开一个已存在的线程对象,并返回线程的句柄。
  • SuspendThread:挂起(暂停)指定线程的执行。
  • ResumeThread:恢复指定线程的执行。
  • SwitchToThread:使调用线程放弃其时间片,使其他线程可以运行。

文件操作

  • CopyFile:复制一个已存在的文件到一个新文件。
  • MoveFile:移动(或重命名)一个已存在的文件或目录。
  • DeleteFile:删除一个已存在的文件。
  • FindFirstFile:搜索目录中的第一个文件或子目录。
  • FindNextFile:继续搜索目录中的文件或子目录。
  • FindClose:关闭由 FindFirstFile 或 FindFirstFileEx 打开的搜索句柄。

系统信息

  • GetComputerName:检索当前计算机的名称。
  • GetUserName:检索当前用户的登录名称。
  • GetSystemDirectory:检索系统目录的路径。
  • GetWindowsDirectory:检索 Windows 目录的路径。
  • GetTempPath:检索当前系统的临时文件夹路径。
  • GetEnvironmentStrings:检索当前进程的环境块。

性能计数

  • QueryPerformanceCounter:检索当前的高分辨率性能计数器的值。
  • QueryPerformanceFrequency:检索高分辨率性能计数器的频率。

时间和日期

  • GetSystemTimeAsFileTime:以 FILETIME 结构的形式获取当前系统日期和时间。
  • FileTimeToSystemTime:将 FILETIME 结构转换为 SYSTEMTIME 结构。
  • SystemTimeToFileTime:将 SYSTEMTIME 结构转换为 FILETIME 结构。
  • GetLocalTime:检索当前本地日期和时间。

字符串处理

  • lstrcmp:比较两个字符串(区分大小写)。
  • lstrcmpi:比较两个字符串(不区分大小写)。
  • lstrcpy:复制一个字符串到另一个字符串。
  • lstrcat:将一个字符串附加到另一个字符串的末尾。
  • lstrlen:获取字符串的长度。

注: 以上列出的一些函数(如 lstrcmplstrcpy 等)是 Windows API 中较旧的部分,现在推荐使用更安全的字符串处理函数,如 CompareStringStringCchCopyStringCchCatStringCchLength 等,它们提供了更好的缓冲区溢出保护。

这些只是其中的一小部分函数。每个函数都有详细的参数说明、返回值和错误处理信息,这些信息对于正确使用这些函数至关重要。

要获取每个函数的详细用法和用处,应该:

  1. 查阅官方的 Windows API 文档,这通常是最准确和最新的资源。
  2. 使用 Microsoft 的开发工具,如 Visual Studio,这些工具提供了对 Windows API 的内置帮助和智能感知功能。
  3. 参考书籍和在线教程,这些通常提供对 API 的更深入解释和示例代码。

由于 Windows API 的广度和深度,学习它的最佳方式是通过实践经验,结合具体的项目和需求来逐渐掌握。

以上是一部分windows.h中的函数,更多函数可参考:Programming reference for the Win32 API - Win32 apps | Microsoft Learn

谢谢大家,以上就是今天的内容!