常用的WinAPI函数整理

一、进程
 
 创建进程:
 
   CreateProcess("C:\\windows\\notepad.exe",0,0,0,0,0,0,0,&si,&pi);
 
   WinExec("notepad",SW_SHOW);
 
   ShellExecute(0,"open","notepad","c:\\a.txt","",SW_SHOW);
    
   ShellExecuteEx(&sei);
 
 遍历进程:
 
   CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    
   Process32First(hsnap,&pe32);
    
   Process32Next(hsnap,&pe32);
 
 终止进程:
 
   ExitProcess(0);
    
   TerminateProcess(hProc,0);
 
 打开进程:
 
   OpenProcess(PROCESS_ALL_ACCESS,0,pid);\
 
 获取进程ID:
 
  GetCurrentProcesssId();
 
 获取进程可执行文件路径:
 
   GetModuleFileName(NULL,buf,len);
    
   GetProcessImageFileName(hproc,buf,len);
    
 遍历进程模块信息:
 
   CreateToolhelp32Snapshot(TH32CS_SNAPMODILE,pid);
    
   Module32First(hsnap,&mdl32);
    
   Module32Next(hsnap,&mdl2);
    
 获取指定模块句柄:
 
   GetModuleHandle(“kernel32.dll”);
 
 获取模块内函数地址:
 
   GetProcessAddr(hmdl,”MessageBox”);
 
 动态加载DLL:
 
   LoadLibrary(“user32.dll”);
 
 卸载DLL:
 
   FreeLibrary(hDll);
 
 获取进程命令行参数:
 
   GetCommandLine();任何进程GetCommandLine函数地址后偏移一个字节后的4字节地址为命令行地址。
 
 读写远程进程数据:
 
   ReadProcessMemory(hproc,baseAddr,buf,len,&size);
    
   WriteProcessMemory(hproc,baseAddr,buf,len,&size);
 
 申请内存:
    
   VirtualAlloc(0,size,MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    
   VirtualAllocEx(hproc,0,size,MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    
 修改内存属性:
    
   VirtualProtect(addr,size,PAGE_EXECUTE_READWRITE,&oldAddr);
    
   VirtualProtectEx(hproc,addr,size,PAGE_EXECUTE_READWRITE,&oldAddr);
    
 释放内存:
    
   VirtualFree( addr, size, MEM_RELEASE);
    
   VirtualFreeEx(hproc, addr, size, MEM_RELEASE);
    
 获取系统版本(Win NT/2K/XP<0x80000000):
    
   getVersion();
    
 读写进程优先级:
    
   SetPriorityClass(hproc,Normal);
    
   GetPriority(hproc);
    
   SetProcessPriorityBoost(hproc,true);
    
   GetProcessPriorityBoost(hproc,pBool);
    
二、线程
    
 创建线程(CreateThread的线程函数调用了strtok、rand等需使用_endthread()释放内存):
    
   CreateThread(0,0,startAddr,&para,0,&tid);
    
   _beginthread(startAddr,0,0);
    
   _beginthreadex(0,0,startAddr,0,0,&tid);
    
   CreateRemoteThread(hproc,0,0,func,&para,0,&tid);
    
 获取线程ID:
    
   GetCurrentThreadId();
    
 关闭线程句柄(减少内核对象使用次数,防止内存泄漏):
    
   CloseHandle(hthread);
    
 挂起与激活线程(维护暂停次数):
    
   SuspendThread(hthread);
    
   ResumeThread(hthread);
    
 获取线程退出代码:
    
   GetExitCode(hthread,&code);
    
 等待线程退出(线程受信状态或超时):
    
   WaitForSignleObject(htread,1000);
    
   WaitForMultipleObjects(num,handles,true,INFINITE);
    
 遍历线程:
    
   CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
    
   Thread32First(hsnap,&mdl32);
    
   Thread32Next(hsnap,&mdl2);
    
 获取线程函数入口:
    
   ZwQueryInfomationThread(hthread,ThreadQuerySetWin32StartAddress,&buf,4,NULL);
    
 打开线程:
    
   OpenThread(THREAD_ALL_ACCESS,false,&tid);
    
 获取线程函数地址所属模块:
    
   GetMappedFileName(hproc,addr,buf,256);
    
 读写线程优先级:
    
   SetThreadPriority(hthread,Normal);
    
   GetThreadPriority(hthread);
    
   SetThreadPriorityBoost(hproc,true);
    
   GetThreadPriorityBoost(hproc,pBool);
    
 终止线程:
    
   ExitThread(5);
    
   TerminateThread(hthread,5);
    
 线程同步临界区对象:
    
   InitializeCriticalSection(&cs);
    
   EnterCriticalSection(&cs);
    
   LeaveCriticalSection(&cs);
    
   DeleteCriticalSection(&cs);
    
 线程同步事件内核对象:
    
   OpenEvent(EVENT_ALL_ACCESS,false,name);
    
   CreateEvent(NULL,false,true,NULL);
    
   WaitForSingleObject(hevnt,INFINITE);
    
   SetEvent(hevnt);
    
   ResetEvent(hevnt);
    
 线程同步互斥内核对象:
    
   CreateMutex(NULL,false,NULL);
    
   WaitForSingleObject(hmutex,INFINITE);
    
   ReleaseMutex(hmutex);
    
   OpenMutex(MUTEX_ALL_ACCESS,false,name);
    
三、注册表
    
 创建键:
    
   RegCreateKeyEx(HKEY_CURRENT_USER,”TestNewKey”,0,0,REG_OPTION_VOLATILE,KEY_ALL_ACCESS,0,&subkey,&state);
    
 打开键:
    
   RegCreateKeyEx(HKEY_CURRENT_USER,”Control Panel”,0,KEY_ALL_ACCESS,&subkey);
    
 关闭键:
    
   RegCloseKey(hkey);
    
 遍历键:
    
   RegEnumKeyEx(hsubkey,index,keyname,&nameSize,0,0,0,&time);
    
   FileTimeToSystemTime(&time,&systime);
    
   RegQueryInfo(hsubkey,0,0,0,&count,0,0,0,0,0,0,0);
    
 删除键:
    
   RegDeleteKeyEx(hmainkey,subkeyName);
    
 创建值:
    
   RegSetValueEx(hsubkey,”test”,0,REG_WORD,(BYTE*)&value,4);
    
 遍历值:
    
   RegEnumValue(hsubkey,index,name,&nameSize,0,&type,valuebuf,valueLen);
    
   RegQueryValueEx(hsubkey,name,0,type,buf,&size);
    
 删除值:
    
   RegDeleteValue(hsubkey,valuename);
    
四、文件
    
 创建/打开文件:
    
   CreateFile(“a.txt”,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    
 设置文件指针:
    
   SetFilePointer(hFile,0,NULL,FILE_END);
    
 读写文件:
    
   ReadFile(hFile,buf,len,&size,0);
    
   WriteFile(hFile,buf,len,&size,0);
    
 强制文件写入磁盘,清空文件高速缓冲区:
    
   FlushFileuffers(hFile);
    
 [解]锁文件区域:
    
   LockFile(hFile,0,0,100,0);
    
   UnlockFile(hFile,0,0,100,0);
    
 复制文件:
    
   CopyFile(src,des,true);
    
   CopyFileEx(src,des,func,&para,false, COPY_FILE_FAIL_IF_EXISTS);
    
 移动文件:
    
   MoveFile(src,des);
    
   MoveFileEx(src,des,false);
    
   MoveFileWithProgress(src,des,fun,&para, MOVEFILE_COPY_ALLOWED);
    
 删除文件:
    
   DeleteFile(filename);
    
 获取文件类型(FILE_TYPE_PIPE):
    
   GetFileType(hFile);
   
 获取文件大小:
    
   GetFileSize(hFile,&high);
    
 获取文件属性(例如FILE_ATTRIBUTE_DIRECTORY进行&运算):
    
   GetFileAttributes(hFile);
    
 遍历文件:
    
   FindFirstFile(nameMode,&wfd);
    
   FindNextFile(hFile,&wfd);
    
 创建管道:
    
   CreatePipe(&hRead,&hWrite,&sa,0);
   
 创建内存映射文件:
    
   CreateFile(“d:\\a.txt”,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,”myMap”);
    
 加载内存映射文件:
    
   MapViewOfFile(hmap,FILE_MAP_ALL_ACCESS,0,0,0);
    
 打开内存映射文件:
    
   OpenFileMapping(FILE_AMP_ALL_ACCESS,false,”myMap”);
    
 卸载内存映射文件:
    
   UnmapViewOfFile(baseAddr);
    
 强制写入内存映射文件到磁盘:
    
   FlushViewOfFile(baseAddr,len);
    
 创建文件夹(只能创建一层):
    
   CreateDirectory(“D:\\a”,NULL);
    
   CreateDirectory(“C:\\a”,”D:\\b”,NULL);
    
 删除文件夹(只能删除空文件夹):
    
   RemoveDirectory(“C:\\a”);
    
 检测逻辑驱动器:
    
   GetLogicalDrives();
    
   GetLogicalDriveStrings(len,buf);
    
 获取驱动器类型(DRIVE_CDROM):
    
   GetDriveType(“D:\\”);
    
五、网络
    
 打开网络资源枚举过程(winnetwk.h、Mpr.lib):
    
   WNetOpenEnum(RESOURCE_GLOBAL,RESOURCETYPE_ANY,0,NULL,hnet);
    
 枚举网络资源:
    
   WNetEnumResource(hnet,&count,pNetRsc,&size);
    
 关闭网络资源枚举过程:
    
   WNetCloseEnum(hnet);
    
 打开关闭WinSocket库:
    
   WSAStartup(version,&wsa);
    
   WSACleanup();
    
 创建套接字:
    
   socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    
 绑定套接字IP和端口:
    
   bind(sock,&addr,len);
    
 监听TCP连接:
    
   listen(sock,10);
    
 接收TCP连接请求:
    
   accept(sock,&addr,&len);
    
 客户端连接:
    
   connect(sock,&addr,len);
    
 发送TCP数据:
    
   send(sock,buf,len,0);
    
 接收TCP数据:
    
   recv(sock,buf,len,0);
    
 发送UDP数据:
    
   sendto(sock,buf,len,0,&addr,len);
    
 接收UDP数据:
    
   recvfrom(sock,buf,len,0,&addr,&len);
    
六、服务
    
 打开SCM服务控制管理器:
    
   OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
    
 创建服务:
    
   CreateService(mgr,"MyService"," MyService",SERVICE_ALL_ACCESS,       SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,path,NULL,NULL,NULL,NULL,NULL);
    
 打开服务对象:
    
   OpenService(mgr," MyService ",SERVICE_START);
    
 启动服务:
    
   StartService(serv,0,NULL);
    
 查询服务状态:
    
   QueryServiceStatus(serv,&state);
    
 关闭服务句柄:
    
   CloseServiceHandle(hdl);
    
 连接到SCM:
    
   StartServiceCtrlDispatcher(DispatchTable);
    
 注册服务控制函数:
    
   RegisterServiceCtrlHandler("MyServicer",ServiceCtrl);
    
 设置服务状态:
    
   SetServiceStatus(hss,&ServiceStatus);
    
 控制服务:
    
   ControlService(serv,SERVICE_CONTROL_STOP,&state);
    
 删除服务:
    
   DeleteService(serv);
    
 遍历服务:
    
   EnumServicesStatus(hscm,SERVICE_WIN32|SERVICE_DRIVER,SERVICE_STATE_ALL,&srvSts,len,&size,&count,NULL);
    
 查询服务配置:
    
   QueryServiceConfig(hserv,&srvcfg,size,&size);
    
七、消息
    
 发送消息:
    
   SendMessage(HWND_BROADCAST,WM_LBUTTONDOWN,0,0);
    
 接收消息:
    
   GetMessage(&msg,NULL,0,0);
    
 投递消息:
    
   PostMessage(HWND_BROADCAST,WM_LBUTTONDOWN,0,0);
    
 获取消息:
    
   PeekMessage(&msg,NULL,0,0);
    
 转换消息:
   TranslateMessage (&msg);
    
 分发消息:
   DispatchMessage (&msg);
    
 等待消息:
   WaitMessage();
    
 发送退出消息:
   PostQuitMessage(0);
    
 安装消息钩子:
   SetWindowsHookEx(WH_KEYBOARD,keyBoardProc,0,tid);
    
 卸载消息钩子:
   UnhookWindowsHookEx(hhk);

常用的WinAPI函数整理的更多相关文章

  1. 常用WinAPI函数整理------------转载

    常用WinAPI函数整理原创 玩撕你 发布于2019-09-04 20:06:55 阅读数 101 收藏展开 之前的博客写了很多关于Windows编程的内容,在Windows环境下的黑客必须熟练掌握底 ...

  2. 黑客常用WinAPI函数整理

    之前的博客写了很多关于Windows编程的内容,在Windows环境下的黑客必须熟练掌握底层API编程.为了使读者对黑客常用的Windows API有个更全面的了解以及方便日后使用API方法的查询,特 ...

  3. 工作中常用的JS函数整理分享(欢迎大家补充)

    今年在渣X工作整理的常用JS函数 今年来了渣X工作,我所在这个部门分工很奇怪,CSS竟然有专门的人在搞,开发PHP的人员需要处理JS,以至于有时候开发起来不是那么得心应手,感觉把JS和CSS拆开就像是 ...

  4. js 数组常用的操作函数整理

    平时多做企业应用开发,抱着实用为主,对前端技术理解得比较肤浅,下面就是肤浅地对 js 数组的属性和方法及对它操作的 jquery 方法做些记录: js 数组是 js 内建的一个非常强大数据类型,由于 ...

  5. PHP常用数组(Array)函数整理

    整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...

  6. 【PHP】PHP常用数组(Array)函数整理

    整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...

  7. python常用内置函数整理

    1.最常见的内置函数是print print("Hello World!") 2.数学运算 abs(-5) # 取绝对值,也就是5 round(2.6) # 四舍五入取整,也就是3 ...

  8. Python常用内置函数整理(lambda,reduce,zip,filter,map)

    匿名函数lambda lambda argument1,argument2,...argumentN :expression using arguments 1.lambda是一个表达式,而不是一个语 ...

  9. MySQL常用内置函数整理

    [1]@@datadir 函数作用:返回数据库的存储目录构造SQL语句 select @@datadir;ps:@@basedir返回mysql的根目录[2]@@version_compile_os ...

随机推荐

  1. Page-encoding specified in XML prolog (UTF-8) is different from that specified in page directive (utf-8)

    org.apache.jasper.JasperException:xxx.jsp(1,1) Page-encoding specified in XML prolog (UTF-8) is diff ...

  2. hasLayout && Block Formatting Contexts

    转自:http://www.smallni.com/haslayout-block-formatting-contexts/ 因为本人脑子不好使,自己打印出了一张hasLayout和Block For ...

  3. [NOIP2011]Mayan游戏 题解

    题目大意: 有一个5*7的方格,上面有几种颜色的方块,如果在一横行或者竖列上有连续三个或者三个以上相同颜色的方块,则它们将立即被消除,方块消除之后,消除位置之上的方块将掉落.每步移动可以且仅可以沿横向 ...

  4. 一言不合敲代码(1)——DIV+CSS3制作哆啦A梦头像

    先展示一下我的头像吧. 作为一个前端ER,我的头像当然不能是绘画工具画出来的.没错,这个玩意是由HTML+CSS代码实现的,过年的某一天晚上无聊花了一个小时敲出来的.来看看它原本的样子: 为什么会变成 ...

  5. NOIP2012拓展欧几里得

    拉板题,,,不说话 我之前是不是说过数据结构很烦,,,我想收回,,,今天开始的数论还要恶心,一早上听得头都晕了 先来一发欧几里得拓展裸 #include <cstdio> void gcd ...

  6. php查找字符串首次出现的位置 判断字符串是否在另一个字符串中

    strpos - 查找字符串首次出现的位置 说明 int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) 返回 nee ...

  7. springboot与shiro配置

    详情参考:  http://blog.csdn.net/catoop/article/details/50520958 http://blog.csdn.net/qiuqiupeng/article/ ...

  8. 常见的HTTP Headers

    协议就是交互双方协商好要遵守的规范,打个不恰当的比方,就好像交谈双方约定要使用的同一种语言.如果我讲英文,你讲中文,大家都相互听不懂,交流那就得嗝屁了. HTTP协议就是需要交互的客户端(通常是浏览器 ...

  9. vim_cfg

    set nocompatible set langmenu=en_US let $LANG = 'en_US' source $VIMRUNTIME/delmenu.vim source $VIMRU ...

  10. 关于Java异常

    此处讲运行时异常和非运行时异常地区别,并分别举例 运行时异常一般为程序逻辑错误引起的,可选择捕获处理或不处理,如:IndexOutOfBoundException, NullPointerExcept ...