今天我来给大家介绍一些常用的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 的广度和深度,学习它的最佳方式是通过实践经验,结合具体的项目和需求来逐渐掌握。
以上是一部分windows.h中的函数,更多函数可参考:Programming reference for the Win32 API - Win32 apps | Microsoft Learn
谢谢大家,以上就是今天的内容!