![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
WINDOWS编程
文章平均质量分 91
WINDOWS编程 记录
x-2010
这个作者很懒,什么都没留下…
展开
-
编写一个dll文件
使用记事本创建一个cpp文件,名为dll_nolib.cpp:代码如下:#include #include BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void *lpReserved){ HANDLE g_hModule; switch (dwReason) { case DLL_PROCESS_ATTACH原创 2017-09-15 16:09:33 · 1046 阅读 · 0 评论 -
VS2013 编写汇编程序
步骤如下:1.打开VS2013,创建一个空项目2.创建空项目masm_example之后,打开以下:3.选择自定义项文件为masm4.打开配置属性项5.选择子系统为控制台6.微软宏汇编配置7.创建文件8.编写代码:.386 //指令原创 2017-08-15 18:33:56 · 7556 阅读 · 2 评论 -
IDA 汇编命令分析以及函数调用过程
dll的文件,入口函数DllEntryPoint:.text:000000018000525C ; BOOL __stdcall DllEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved).text:000000018000525C public DllEntryPoint.te原创 2017-08-15 19:39:41 · 12503 阅读 · 0 评论 -
Source Insight添加 注释 宏
1.Project--->Open Project... 打开Base工程。2.选中Base工程的文件Utils.em,将下面代码Copy进去。macro MultiLineComment() { hwnd = GetCurrentWnd() selection = GetWndSel(hwnd) LnFirst = GetWndSelLn...原创 2019-10-25 09:20:48 · 1060 阅读 · 0 评论 -
服务和应用程序间在用户级的交互(Windows Vista及其后)
PHANDLE GetCurrentUserToken(){ PHANDLE currentToken = 0; PHANDLE primaryToken = 0; int dwSessionId = 0; PHANDLE hUserToken = 0; PHANDLE hTokenDup = 0; PWTS_SESSION_INFO pSes原创 2017-11-29 15:11:46 · 1357 阅读 · 0 评论 -
访问令牌(access token)
访问令牌是用来描述进程或线程安全上下文的对象,令牌所包含的信息是与该user账户相关的进程或线程的身份和权限信息。当user登录时,系统通过将user输入的密码与储存在安全数据库中的密码进行对比。若密码正确,系统此时会为user生成一个访问令牌。之后,该user执行的每个进程都会拥有一个该访问令牌的拷贝。当线程和一个安全对象交互时或者线程试图执行一个需要权限的系统任务时,系统使用访问令牌来辨别user。访问令牌包含以下信息:原创 2017-10-31 15:38:28 · 9312 阅读 · 0 评论 -
DWORD转为char *
使用头文件#include函数char *_ultoa(unsigned long value,char *string,int radix)其中unsigned long为要转换的 DWORD。string为转换成的char *,radix为要转换为什么进制的,十六进制为16,十进制为10,二进制为2代码片段:char buf[20] = {'\0'}; _ultoa(p原创 2017-10-27 18:21:16 · 7329 阅读 · 0 评论 -
glog
glog 0.3.5编译,使用Cmake选择VS2015 X64编译release,得到glog.dll。再使用VS2015 X64 release创建一个测试代码如下:// testglog.cpp : 定义控制台应用程序的入口点。////#include #define GLOG_NO_ABBREVIATED_SEVERITIES#define GOOGLE_GLOG_DLL_DE原创 2017-09-13 12:02:54 · 2956 阅读 · 0 评论 -
microprofile
microprofile是一个嵌入式的跨平台的网络分析器。要集成进代码中需要如下代码:#include "microprofile.h"{ MICROPROFILE_SCOPEI("group","timername", MP_YELLOW); ... code to be timed}且每刷一帧都要调用以下函数:MicroProfileFlip(nullptr);原创 2017-09-12 14:58:48 · 1924 阅读 · 0 评论 -
minhook
它是最小化的Windows x86/x64的API钩子库,github地址。它能够重写目标函数。以下是最常用的一个实例,在此是以VS2013 Release Win32的格式编译它,需先编译好MinHook VC12的工程,得到libMinHook.x86.lib,再连接到此工程中:// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"原创 2017-09-12 11:15:12 · 1202 阅读 · 0 评论 -
winsparkle
winsparkle是一个Windows的App更新框架。它是一个Windows下应用程序的即插即忘的软件升级库。它容易开发:该库容易使用以及发布,WinSparkle.dll没有任何额外的依赖(设置没有动态CRT)。只需要包含该文件即可,并且它的API都是C语言形式的,可以用任何语言来使用它。工具包以及语言依赖:WinSparkle的UI使用本地Windows控制器的且它是单独的线程原创 2017-09-11 16:45:43 · 1726 阅读 · 0 评论 -
PathRemoveFileSpec
删除一个完整文件名路径中的文件名和反斜杠。函数声明:BOOL PathRemoveFileSpec( _Inout_ LPTSTR pszPath);参数:_Inout_ LPTSTR pszPath类型:LPTSTR一个指向完整路径名的指针,指向的路径名长度最大为MAX_PATH且以null字符串结束。返回:类型:BOOL若删除成原创 2017-09-14 17:29:06 · 918 阅读 · 0 评论 -
内核对象命名空间(Kernel object namespace)
远程桌面服务具有后面命名内核对象的多个命名空间:事件,信号,互斥,可等待的定时器,文件映射对象,和任务对象。在客户端/服务器应用程序中服务使用一个全局的命名空间。还有,对这些对象而言,每个客户端会话都有一个独立的命名空间。比如Windows Vista。独立客户端会话命名空间使能多个客户端互不干扰地去跑同样的应用程序。对在一个客户端会话下启动的进程而言,系统使用默认的会话命名空间。然而,这些进原创 2017-11-01 10:34:26 · 1689 阅读 · 0 评论 -
std::map::find
头文件声明iterator find(const key_type &k);const_iterator find(const key_type& k) const;获取元素的迭代。在一个map容器中搜索索引k对应的键值key,若找到索引k值,则返回它对应的键值,否则,返回map::end。若容器的对比对象返回false,则认为两个键值相等(与元素参数传入的顺序无关原创 2017-11-13 13:58:55 · 5187 阅读 · 0 评论 -
strncpy
头文件<cstring>函数原型char *strncyp(char* destination, const char* source, size_t num);复制字符串中的字符将source字符串中的前num个字符复制到destination中。若还没复制完num个字符就发现了source C字符串中包含的结尾符(也就是null字符),则destination会在此处填充0值,之后继续复制还没复制完的字符,直到复制完num个字符为止。若source字符串不止num个字符,且nul原创 2017-11-13 15:47:33 · 935 阅读 · 0 评论 -
写一个ServiceMain函数
SvcMain函数首先调用RegisterServiceCtrlHandler函数来注册SvcCtrlHandler函数作为服务的Handler函数,然后开始初始化。RegisterSreviceCtrlHandler是在ServiceMain中第一个必须返回成功的函数,之后服务能够使用该函数返回的状态去调用SetServiceStatus函数设置状态,若发生错误,则状态设为SERVICE_STOPPED。原创 2017-11-29 09:58:53 · 2997 阅读 · 0 评论 -
在LocalSystem账户下启动应用程序且无UAC弹框(Vista及其后)
本章在LocalSystem账户下通过一个服务辅助程序来介绍如何从session 0到session 1启动一个应用程序。在Vista系统中,遇到的问题是在administrator账户下想要启动一个exe程序来执行一些任务,但是由于弹出的UAC对话框让用户不得不做出去做一些操作而导致失败。围绕这个问题,想到了通过服务来启动应用程序,这过程会以LocalSystem账号权限切换到当前用户的se原创 2017-11-29 15:56:11 · 1027 阅读 · 0 评论 -
QT托盘小图标多菜单片段-ReviveOverlay
Windows Vista之后的文件打包复制重命名, QT托盘程序运行,Winspark在线升级程序原创 2017-12-08 17:08:24 · 609 阅读 · 0 评论 -
C++ 多线程编程 互斥量
Win10下多线程中访问公共变量时,可使用mutex类来做,头文件为mutex,实例(VS2013):原创 2017-12-04 15:27:09 · 717 阅读 · 0 评论 -
HKEY_CURRENT_USER下在服务中注册自启动exe
在目录“计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run”下写入test.exe服务中注册一个exe自启动程序到HKEY_CURRENT_USER,比注册到HKEY_LOCAL_MACHINE要复杂一点。首先要进行session切换,由服务所在session 0切换到当前用户账号下,虽然切换了,但是此时仍原创 2017-11-29 18:44:52 · 2101 阅读 · 1 评论 -
WINDOWS威胁与防护服务无法开启解决方法
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows DefenderWindows+r,输入:regedit,定位路径:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender,查看是否存在 DisableAntiSpyware 这个键值,若有删除之。...原创 2018-04-26 09:03:02 · 5348 阅读 · 4 评论 -
WIN10上使用HYPE-V安装UBUNTU16.04
1.在Windows功能内,勾选Hype-V2.在BIOS内Enable 虚拟化支持系列3.开启hype-v,创建虚拟机,安装ubuntu16.04镜像。4.设置内禁用检查点5.连接外网,在hype-v管理器选择,虚拟交换机管理器,选择外部外部:表示虚拟机可以像宿主机一样上外网,也可以和其他虚拟机通信内部:表示只能在虚拟机和虚拟机,虚拟机和宿主机之间通信,不能上外网专用:表示在虚拟机之间构建一个局...原创 2018-04-26 09:11:13 · 8363 阅读 · 0 评论 -
Revive的inject技术
首先,InjectDLL函数:bool InjectDLL(HANDLE hProcess, const char *dllPath, int dllPathLength){ LOG("Injecting DLL: %s\n", dllPath); HMODULE hModule = GetModuleHandle(L"kernel32.dll"); LPVOID loadLibra原创 2017-09-13 15:57:08 · 527 阅读 · 0 评论 -
GetExitCodeThread
获取指定线程的终止状态声明:BOOL WINAPI GetExitCodeThread( _In_ HANDLE hThread, _Out_ LPDWORD lpExitCode);参数:_In_ HANDLE hThread 需要获取终止状态的线程句柄 _Out_ LPDWORD lpExitCode 是一个指针,原创 2017-09-18 15:22:50 · 1870 阅读 · 0 评论 -
wcsncmp
对比两个宽字符串,对比前num个字符串。该函数首先对比每个宽字符串的第一个字符,若相等,则继续对比下面一对字符,直到有两个字符不同,或到达结束符null,或num个字符全部匹配完为止。函数声明:int wcsncmp (const wchar_t* wcs1, const wchar_t* wcs2, size_t num);头文件:参数:wcs1 要匹配的宽原创 2017-09-18 15:05:07 · 1094 阅读 · 0 评论 -
WaitForSingleObject
来自MSDN作用:一直等待到所指定的对象生命周期终止或者超时时间到达。若要进入一个能够提出警告的等待状态,则使用WaitForSingleObjectEx函数。等待多个对象,使用WaitForMultipleObjects函数。语法:C++DWORD WINAPI WaitForSingleObject{_In_ HANDLE hHandle,_In_ DWORD翻译 2017-08-10 20:54:45 · 3843 阅读 · 0 评论 -
Window10安装VS2013 中文语言包提示程序兼容性已打开,请将其关闭
安装vs2013.4,再安装VS2013.5完后,直接点击安装中文语言包时弹出界面如下:cmd下输入命令行:出现错误:取消安装,进入漫长等待:等待完成后再去打开一个工程出现无法编译,重启电脑。再次使用命令安装中文语言包:安装成功!再去打开一个工程,可正常使用。原创 2017-07-26 11:09:33 · 4412 阅读 · 3 评论 -
strrchr
头文件:const char *strrchr(const char *str, int character);char *strrchr(char *str, int character);作用:返回一个指针,它指向字符character在字符串str中最后出现的位置。结尾处的null字符被认为是字符串的一部分。因此,指针也可返回字符串结尾的null字符。参数翻译 2017-08-10 11:34:56 · 961 阅读 · 0 评论 -
.vcxproj和.props的文件结构
在新的VS2010 C++工程文件中会发现有后缀为.vcxproj的文件,用notepad打开后可看到,有许多顶级MSBuild元素以一定的顺序布局。在Microsoft.Cpp.Default.props导入后,产生了大多数的组属性以及项目定义属性。还有,大多数的target在工程文件结尾处被导入。它们以Lable标志来区分。这些有序的布局到底有什么作用?为什么会有多种属性组而不是只有一个?翻译 2017-08-08 19:29:33 · 7632 阅读 · 0 评论 -
std::this_thread::sleep_until
头文件: (C++11)templatevoid sleep_until(const std::chrono::time_point& sleep_time);作用:阻塞当前正在执行的线程直到sleep_time溢出。sleep_time是和时钟相关联的,也就是要注意时钟调整会影响到sleep_time。因此,翻译 2017-07-24 18:43:46 · 4742 阅读 · 0 评论 -
strtok
头文件:声明:char *strtok(char *str, const char *delimiters);功能:对该函数的连续调用,将会使一个完整字符串str以delimiters为分割符进行分割,最终得到一小片一小片各自独立的字符串。如何使用:在第一次调用时,该函数需要一个字符串参数str,它的第1个字符用来做扫描的起始位置。在随后翻译 2017-07-24 18:25:34 · 3323 阅读 · 0 评论 -
fopen
头文件:声明:FILE *fopen(const char *filename, const char *mode);功能:打开文件打开一个由参数filename指定的文件,并且将它和一个流关联。该流能够在之后的操作中使用返回值FILE来作识别。允许如何在该流上面进行操作及其操作方式均由参数mode来指定。可调用函数fclose或翻译 2017-07-24 18:24:18 · 840 阅读 · 0 评论 -
Cmake编译出错
CMake使用Visual Studio 14 2015 Win64编译报错:The C compiler identification is unknown The CXX compiler identification is unknown CMake Error at CMakeLists.txt:5 (project): No CMAKE_C_COMPILER coul原创 2017-07-24 18:22:23 · 5277 阅读 · 0 评论 -
std::thread
class thread;Thread:表示一个独立的执行线程类。在多线程环境中,一个线程的指令执行在同一个地址空间是并发的。意思是不同线程可共享同一个地址空间并且能够各自执行自己的指令而不会相互干扰,在线程自己看来好像是独占该地址空间。一个已经初始化的线程对象表示的是一个激活的执行过程。这样的线程处于joinable状态,并且拥有一个独一无二的线程id。一翻译 2017-07-24 18:19:21 · 337 阅读 · 0 评论 -
va_list
作用:存储可变参数信息的类型。该类型是作为一个参数,会在头文件中的一个宏中被用到,它用来声明一组可变参数。vr_start初始化该类型的对象,随后会调用va_arg来获取传入函数的参数。在vr_start返回后,该函数初始化完va_list对象之前,还要调用va_end宏作为结束。该类型的细节依赖于特定的库。该类型的对象应该仅仅作为参数被后面这些宏使用:va_start,va_翻译 2017-07-28 10:19:06 · 234 阅读 · 0 评论 -
boost::program_options
作用:它是一个C++解析命令行的库。它使用命令行和配置文件对程序选项进行设置。该库有错误检查机制,它的选项值可从命令行,配置文件以及环境变量中提取。要解析一个命令行选项,需要以下三步:1.定义命令行选项。取名且设置值。若一个命令行选项解析为键/值对,还需要设置值的类型,比如是一个字符串还是一个数字2.用解析器去解析命令行。从main()的两个参数中获取命令行,argc与argv翻译 2017-07-28 21:04:05 · 1294 阅读 · 0 评论 -
GetModuleFileName
获取当前进程已加载模块的文件的完整路径。可使用函数GetModuleFileNameEx获取另一个已加载模块的文件路径。函数声明:DWORD WINAPI GetModuleFileName( _In_opt_ HMODULE hModule, _Out_ LPTSTR lpFilename, _In_ DWORD nSize);返原创 2017-09-13 14:10:18 · 1781 阅读 · 0 评论 -
wcsncat
wchar_t* wcsncat (wchar_t* destination, const wchar_t* source, size_t num);头文件:作用:附加字符到宽字符串。附加source中从第一个到第num个为止的字符到destination后,最后添加一个null宽字符结尾。若source中C宽字符串长度小于num,则全部字符包括一个null结束符都会被拷贝原创 2017-08-29 14:04:34 · 933 阅读 · 0 评论 -
wcsrchr
const wchar_t* wcsrchr (const wchar_t* ws, wchar_t wc); wchar_t* wcsrchr ( wchar_t* ws, wchar_t wc);查询字符在宽字符串中最后的位置。结束符null被认为是字符串的一部分。因此,它也会被包括进来被查询。它与strrchr()对宽字符的处理相等。参数:w原创 2017-08-28 17:54:30 · 1272 阅读 · 0 评论 -
C++基础
<br />C与C++的关系:<br />C++是从C的基础上发展而来的:<br />①支持新的数据类型和语法改进<br />②支持面向对象程序设计<br />③支持泛型程序设计<br />C++ 既支持面向对象也支持面向过程。<br />不要把面向对象与面向过程对立起来。<br />面向对象编程:类与对象<br />对象:现实世界中某个具体的物理实体,每个对象都包含特定的属性与行为。<br />类:现实世界中具有相同属性和行为的物理实体的抽象。通常既包含数据成员又包含成员函数的抽象数据类型,如结构体。<b原创 2011-01-10 20:10:00 · 359 阅读 · 0 评论