今天我来给大家介绍一些常用的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版本中,建议使用GetVersionEx或RtlGetVersion。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并读取数据,该函数结合了InternetOpen、InternetConnect和HttpOpenRequest的功能。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:获取字符串的长度。
注: 以上列出的一些函数(如 lstrcmp, lstrcpy 等)是 Windows API 中较旧的部分,现在推荐使用更安全的字符串处理函数,如 CompareString, StringCchCopy, StringCchCat, StringCchLength 等,它们提供了更好的缓冲区溢出保护。
这些只是其中的一小部分函数。每个函数都有详细的参数说明、返回值和错误处理信息,这些信息对于正确使用这些函数至关重要。
要获取每个函数的详细用法和用处,应该:
- 查阅官方的 Windows API 文档,这通常是最准确和最新的资源。
- 使用 Microsoft 的开发工具,如 Visual Studio,这些工具提供了对 Windows API 的内置帮助和智能感知功能。
- 参考书籍和在线教程,这些通常提供对 API 的更深入解释和示例代码。
由于 Windows API 的广度和深度,学习它的最佳方式是通过实践经验,结合具体的项目和需求来逐渐掌握。
以上是一部分windows.h中的函数,更多函数可参考:Programming reference for the Win32 API - Win32 apps | Microsoft Learn
谢谢大家,以上就是今天的内容!


发布评论