window
文章平均质量分 83
Martin89
这个作者很懒,什么都没留下…
展开
-
Windows 进程权限浅谈 -- 提权 / 降权
如何以编程方式控制进程的执行级别?如果登录用户是管理员账户,且开启了UAC,那么默认情况下双击一个程序时是以medium权限运行,称为受限的管理员权限,如果右键程序“以管理员权限运行”,那么程序是high权限,称为不受限的管理员权限。以产品更新为例,大部分时候产品主程序以在标准(非提升)级别运行,为了能够自我更新,它需要启动一个单独的更新进程,该更新进程需要提升才能正确执行升级。还是以产品更新为例,当以提升级别运行的更新程序完成更新任务,需要启动产品主进程,以标准(非提升)级别运行,此时则需要降权。转载 2024-07-24 17:43:16 · 177 阅读 · 0 评论 -
DACL &; SACL
任意访问控制列表( Discretionary ACL )、系统访问控制列表( System ACL )。任意访问控制列表包含了用户和组的列表,以及相应的权限,允许或拒绝。每一个用户或组在任意访问控制列表中都有特殊的权限。而系统访问控制列表是为审核服务的,包含了对象被访问的时间,他们都是在sd中的!什么是sd呢?先来看看安全对象吧安全对象Securable Object是拥有SD的Wi...原创 2016-03-16 15:20:05 · 3357 阅读 · 0 评论 -
以程序的方式操纵NTFS的文件权限
本篇文章内容主要参考了陈皓《以程序的方式操纵NTFS的文件权限》,然后加入了一些自己学习和理解的东西。在NTFS文件系统出现后,在Windows系统(2K/XP/Vista..)下的对象,包括文件系统,进程、命名管道、打印机、网络共享、或是注册表等等,都可以设置用户访问权限。在Windows系统中,其是用一个安全描述符(Security Descriptors)的结构来保存其权限的设置信息,简称为SD,其在Windows SDK中的结构名是“SECURITY_DESCRIPTOR”,这是包括了...转载 2021-03-18 20:10:05 · 205 阅读 · 0 评论 -
自己实现的使用c++解析文本中的emoji表情
1、基本的表情,这类表情的对应utf-8编码又分为两种,例如 哈哈 这个表情的编码是\ud83d\ude04 占了两个字节长度,心 这个表情的编码为\u2764 只占了一个字节长度,这是因为emoji在Unicode中的编码范围不同,有一定的规律可循。3、特殊的数字表情,常见的就是0-9带一个框的,这种的编码又有所不同,例如 1 是1\ufe0f\u20e3,2 是 2\ufe0f\u20e3,规律相同,都是数字后跟\ufe0f\u20e3。解析文本,将emoji表情替换成对应的编码输出出来。转载 2024-08-29 17:01:31 · 110 阅读 · 0 评论 -
C++实现unicode码转换成UTF-16的加码和解码函数
Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的,但是在实际存储和传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(UnicodeTransformation Format,简称为UTF)。 对Unicode编码的主要有UTF-16BE、UTF-16LE、UTF-8、UTF-7以及UTF-32等实现方式,目前常用的实现方式是UTF-16LE、UTF-...转载 2021-12-29 20:32:21 · 1212 阅读 · 0 评论 -
多线程程序中操作的原子性
0. 背景原子操作就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头。本文主要讨论了三个问题:1. 多线程程序中对变量的读写操作是否是原子的?2. 多线程程序中对Bit field(位域)的读写操作是否是线程安全的?3. 程序员该如何使用原子操作?我们先从一道很热门的百度笔试题讲起。很多人讲不清楚其背后的原理,下面我们就来对它进行一下剖析(其实这个题目有点歧义,后面我们会讲到):以下多线程对int转载 2022-01-29 10:52:29 · 761 阅读 · 0 评论 -
栈为什么效率比堆高
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。使用堆时,第一步将分配的地址放到寄存器,然后取出这个地址的值,然后放到目标地址。3、栈是编译时系统自动分配空间,而堆是动态分配(运行时分配空间),所以栈的速度快。链接:https://www.jianshu.com/p/27c0fc1aecab。1、有寄存器直接对栈进行访问(esp,ebp),而对堆访问,只能是间接寻址。4、栈是先进后出的队列结构,比堆结构相对简单,分配速度大于堆。...转载 2022-08-17 11:05:51 · 2637 阅读 · 0 评论 -
进程地址空间与虚拟存储空间的理解
早期的内存分配机制在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。那当程序同时运行多个程序时,操作系统是如何为这些程序分配内存 的呢?下面通过实例来说明当时的内存分配方法:某台计算机总的内存大小是128M,现在同时...转载 2015-01-24 18:47:07 · 1034 阅读 · 1 评论 -
VC++实现Windows中双显示器(主屏、扩展屏)
Windows中鼠标右键桌面->“屏幕分辨率”时出现的“更改显示器的外观”对话框下实现了双屏操作的诸多功能,如:主屏的设置、主屏和扩展屏的分辨率、方向、屏幕合并等。实际项目中需要通过VC++代码实现这些功能,用了将近一周的事件,在网上经过几番搜索、整合及改写,终于开发出了所需功能。以下将cpp源码贴出,以弥补此方面网上资料的匮乏。完整工程见上传资源Windows下双屏各种设置的VC++实现(完整源转载 2016-08-09 14:14:13 · 10556 阅读 · 1 评论 -
获取设备管理器的信息
有些时候需要先获取设备管理器里面的硬件信息,才能执行对应的操作,简单的鼓捣了一下,贴出来共享。具体有两个方法,大致来说差不多,流程一样 ,懒得整理了,直接贴出来原始体。//PrintDeviceInfo.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<Windows.h>#include<setupapi.h>#...转载 2018-03-22 14:53:34 · 2491 阅读 · 2 评论 -
键盘基础
Windows程序获得键盘输入的方式:键盘输入以消息的形式传递给程序的窗口过程。实际上,第一次学习消息时,键盘就是一个明显的例子:消息应该传递给应用程序的信息类型。 Windows用8种不同的消息来传递不同的键盘事件。这好像太多了,但是(就像我们所看到的一样)程序可以忽略其中至少一半的消息而不会有任何问题。并且,在大多数情况下,这些消息中包含的键盘信息会多于程序所需要的。处理键盘的部分工作就是识...转载 2015-01-25 13:14:52 · 456 阅读 · 0 评论 -
自动更新SVN版本号
VC2005利用SVN的版本号,生成DLL和EXE文件的版本号TortoiseSVN下有一个SubWCRev程序,可以获取任意个路径对应的SVN版本库的版本号。并替换到文件对应位置。VC2005的资源文件可以控制生成的二进制文件版本号。可以利用VC2005的生成前命令,调用SubWCRev来获取最新的SVN版本号并写入生成的二进制文件中。程序也可以判断调用的DLL版本号是否比本身大转载 2015-01-24 15:22:42 · 2489 阅读 · 0 评论 -
深入浅出图解Git,入门到精通
Git简介在我们的认知范围Git和SVN都是对于代码托管的工具,那么这两者又有什么不同呢?Git是世界上先进的「分布式的版本控制系统」,而SVN是「集中式的版本控制系统」,SVN对于版本的管理集中于中央服务器中,而Git对于版本的管理可以在本地。SVN管理的模式从SVN服务器中拉取代码,然后开始自己的开发,开发完后再向SVN服务器提交代码,所以集中式的版本管理,需要联网才能进行,一旦没网就没办法向SVN服务器提交代码。而Git是分布式的版本管理,每个开发者的本地都会有完整的版本库,不需要来联转载 2021-04-08 10:52:39 · 209 阅读 · 0 评论 -
使用devenv/MSBuild在命令行编译sln或csproj
一 使用devenv来build单个project devenv是VisualStudio的可执行程序,一般安装在“C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE”下。用来在命令行或GUI方式运行VisualStudio。其中devenv.com是命令行程序,devenv.exe是GUI的程序。默认地当你调转载 2017-04-14 10:20:49 · 8097 阅读 · 0 评论 -
32bit程序在64bit操作系统下处理重定向细节
1. 64bit操作系统的重定向机制以及目的 在64bit操作系统中,为了无缝兼容32bit程序的运行,64bit的Windows操作系统采用重定向机制。目的是为了能让32bit程序在 64bit的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与64bit程序冲突。 微软采用重定向机制的原理很简单,说白了就是 让关键文件/文件夹或者关键注册表有2个副本。 1个副本是给32bit程...转载 2015-01-24 13:55:59 · 488 阅读 · 0 评论 -
64bit系统下操作注册表的注意事项
转贴地址:http://blog.sina.com.cn/s/blog_43ca06360100h5uv.html1、注册表位置 64bit系统(Windows Server 2008 R2只有64bit系统)的注册表分32位注册表项和64位注册表项两部分。 在64bit系统下,通过regedit中查看到指定路径下的注册表项均为64位注册表项,而32位注册表项被重定位到:...转载 2015-01-24 13:55:35 · 293 阅读 · 0 评论 -
获取文件数字签名证书信息
验证文件数字签名是否有效可以使用函数 WinVerifyTrust取得文件数字签名证书信息需要使用函数 CryptQueryObject。[cpp] view plaincopy// FileSign.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #in转载 2015-01-29 12:34:29 · 1198 阅读 · 0 评论 -
HOOK技术的一些简单总结
转自:https://blog.csdn.net/u010488395/article/details/8889723在Window平台上开发任何稍微底层一点的东西,基本上都是Hook满天飞, 普通应用程序如此,安全软件更是如此, 这里简单记录一些常用的Hook技术。SetWindowsHookEx基本上做Windows开发都知道这个API, 它给我们提供了一个拦截系统事件...转载 2019-07-19 09:41:43 · 553 阅读 · 0 评论 -
DLL注入大法—之CreateRemoteThread
要实现线程的远程注入必须使用Windows提供的CreateRemoteThread函数来创建一个远程线程该函数的原型如下:HANDLE CreateRemoteThread( HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_R...转载 2015-01-25 15:14:51 · 450 阅读 · 0 评论 -
获取操作系统版本号
#ifndef SM_SERVERR2# define SM_SERVERR2 89#endif#ifndef VER_SUITE_STORAGE_SERVER# define VER_SUITE_STORAGE_SERVER 0x00002000#endif#ifndef VER_SUITE_COMPUTE_SERVER# define VER_SUITE_COMPUTE_...转载 2015-01-24 15:15:07 · 1417 阅读 · 0 评论 -
一些通用的函数实现
一些共通的函数实现 常用的宏定义 说明,这些宏可能在下面的函数中用到,如果要想直接反这些函数拷来用的话,一定要正确定义这些宏(这些宏定义也要一起拷贝) 下面这些函数都很独立,也就是说,你直接把这个函数拷到你的代码中,就可以用,前提是你要把一些头文件及我定义的宏加上。 1,根据文件路径提取其ICON2,根据文件转载 2016-06-03 15:33:03 · 837 阅读 · 0 评论