
Windows核心编程(书)
文章平均质量分 57
焦三仙本仙
学无止境,共同进步
展开
-
c++中的异步和同步机制
关于异步和同步到底什么意思?一开始时有人问起来,不解,后来自己总结资料,弄明白在这里给大家分享:异步:发起请求后,不等待这个发起的请求返回任何响应就去先干别的事,当然最后是等待到这个返回呢还是不等呢?关键就是要看,是否真的返回,如果返回了,则接受,不返回,也不会一直等待,遇到main函数结束时,操作系统会结束并清理这个进程的所有资源和痕迹。同步:相对于异步就是必须等到发原创 2012-11-23 14:08:27 · 13654 阅读 · 5 评论 -
文件(file)和流(stream)的联系和区别
文件(File)和流(Stream)是既有区别又有联系的两个概念。 文件是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。 存储介质:文件是指在各种存储介质上(如硬盘、可移动磁盘、CD等)永久存储的数据的有序集合,它是进行数据读写操作的基本对象。 特性:每个文件都有文件名原创 2013-01-21 18:01:24 · 14038 阅读 · 2 评论 -
关于数字签名SignTool
通过微软的数字签名工具SignTool对指定的文件进行数字签名,出现几个小问题,第一:提示警告:SignTool Warning:Signing succeeded,but an error occurred while attempting to timestamp:路径。好像是提示时间戳的问题,这个问题不是经常出现,只是偶尔出现。具体解决办法还没有,只是感觉可能对具体的签名原创 2013-02-17 14:01:06 · 2523 阅读 · 0 评论 -
关于提升某个进程的权限(ShellExecuteEx)
提升一个进程的权限可以有两种办法第一、自动提升进程的权限第二、手动提升进程权限(通过函数提升权限) 使用函数(ShellExecuteEx)一直到今天,遇到问题才写测试程序实现:// testlog.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#include原创 2012-10-22 16:43:03 · 3918 阅读 · 0 评论 -
错误代码741 因为文件名产生符号链接,所以需由对象管理器重新运行分析操作。
错误现象重现:错误代码741 因为文件名产生符号链接,所以需由对象管理器重新运行分析操作。具体细节:今天就是运行程序,启动一个进程,遇到一个问题;错误代码如上:就是在用一个WinExec("*.exe",SW_SHOW);int ll = GetLastError();得到错误代码741.最后解决办法:这个问题就是关于进程权限的问题,使用普通函数来创建一原创 2013-03-08 13:51:11 · 3183 阅读 · 0 评论 -
WinExec, ShellExecute, CreateProcess三个函数的区别和联系
三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。 WinExec 两个参数,前一个指定路径,后一个指定显示方式。 ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加原创 2013-03-08 14:10:46 · 2693 阅读 · 0 评论 -
CreateThread多线程编程测试
C++中的多线程编程技术,C++本身并没有提供任何多线程机制,但是在windows下,我们可以调用SDK win32 api来编写多线程的程序创建线程的函数: HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize,原创 2012-08-17 16:57:38 · 1447 阅读 · 3 评论 -
CloseHandle()函数
关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。若在线程执行完之后,没有调用CloseHandle,在进程执行期间,将会造成内核对象的泄露,相当于句柄泄露,但不同于内存泄露,这势必会对系统的效率带来一定程原创 2013-03-14 15:02:15 · 1840 阅读 · 1 评论 -
遍历所有进程并找到指定进程停止
// testlog.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#includeusing namespace std;int _tmain(int argc, _TCHAR* argv[]){//HMODULE Mymhandle;//_tsystem(L"calc.exe原创 2013-03-26 15:44:38 · 5192 阅读 · 0 评论 -
子进程继承父进程的当前工作目录的问题
今天也算是自己工作之余帮助运维写个小程序:时刻监测服务器中的服务或者说是进程,是否在运行,如果一旦发现,进程或者服务停止了则立刻重新启动.代码写好了,可是调试出错。凭借自己的经验,知道这是进程需要的资源路径有问题。后来自己解决。从网上找到procexp.exe来查看工作路径。果然不出所料。通过函数setcurrentdirectory();来设置工作路径。得到解决。程序原创 2013-08-01 13:50:35 · 2332 阅读 · 0 评论 -
几个#pragma总结
(1)、#pragman once // 防止头文件重复加载 #ifndef....#define.....#endif // 防止头文件重复加载(2)、#pragma pack(4) //重定义字节对齐方式,在使用struct的时候用。原创 2013-08-15 20:21:31 · 1614 阅读 · 0 评论 -
多进程间通信方式和多线程同步机制总结
文件映射:本地之间共享内存:本地之间匿名管道:本地之间命名管道:跨服务器邮件槽:剪切板:本地之间socket:跨服务器原创 2013-08-15 20:26:09 · 6664 阅读 · 0 评论 -
实现只在debug配置下执行部分代码
高手指点,写程序规范就是实现部分代码,或者错误提示只在debug配置下可以提示对话框而在发布给用户使用的release版本下面则不跳出提示错误,而是仅仅记录log怎么实现呢,其实很简单(也许高手都笑话,自己少见多怪)其实就是c++中的条件编译#ifdef _DEBUG messagebox();#else LOG_ERR();#endif即可实现,原创 2012-11-02 15:35:17 · 1938 阅读 · 1 评论 -
c++中怎么防止一个应用程序的多个实例同时运行
就是通过函数,利用命名对象来防止运行一个应用程序的多个实例,只需要调用Create*函数来创建一个命名对象,再调用GetLastError函数来获取返回值若是ERROR_ALREADY_EXISTS,则说明应用程序的另外一个实例正在运行。然后就可以调用其他操作的函数。原创 2012-11-20 17:07:08 · 1485 阅读 · 0 评论 -
再次深入理解win32控制台
今天,从网上查看代码,测试功能实现,遇到了不解的问题,最后经过摸索,算是基本解决问题,但是是否是这样的真正原因还不确定,自己理解:win32项目,就是可以显示控制台和窗口两种显示,因此它版本的项目里面是可以或者说包涵着windows的函数。win32控制台,就是只是显示控制台界面,其他的窗口可以在这个基础之上出来。但是他里面是不包涵部分的windows函数的,通常报错如原创 2012-11-01 18:19:47 · 1952 阅读 · 1 评论 -
windows核心编程心解--字符和字符串处理
程序一贯使用Unicode字符串有很多好处。处理字符串需要注意的重要问题是安全问题,就是处理字符串时发生缓冲区溢出的问题,要引起关注。也就是使用处理字符串的函数尽量使用可以检测缓冲区溢出的函数。一直以来,本地化的核心问题就是处理不同字符集的问题。用于表示字符的几个UTF标准: UTF-8、UTF-16、UTF-32(对于三者之间的区别和联系有待于以后补充)关于字符原创 2012-11-15 16:58:45 · 1727 阅读 · 0 评论 -
windows核心编程--作业相关
1、概述:Windows提供了一个作业内核对象,就可以认为作业对象是一个进程容器,通过这个对象来对属于他的所有进程来进行控制。从命令行启动的程序不会与作业相关联,但是要是从Windows资源管理器中启动一个应用程序时,进程会自动同一个专业的作业关联,这个作业的名称使用“PCA”字符串前缀。2、简单关于实现:第一:验证当前进程是否在一个现有的作业控制之下运行,使用函数IsProces原创 2012-11-27 17:35:23 · 1293 阅读 · 0 评论 -
windows核心编程心解--内核对象
据说这里挺抽象,不知道自己能不能读懂。 1、操作系统内核怎么操作内核对象: 每个内核对象都只有一个内存块,它有操作系统内核分配,这个内存块是一个数据结构,其成员维护着与对象相关的信息,这个内核对象的数据结构只能有操作系统内核访问。也就是说操作系统内核来通过计数的方式来操作内核对象。 2、应用程序怎么操作内核对象: 应用程序通过利用windows提供的一组函数,原创 2012-11-16 17:44:46 · 1018 阅读 · 0 评论 -
windows核心编程心解--错误机制
windows编程的实现,首先从函数开始。其中函数的实现有一定的既定规则,他会先验证输入参数,然后开始执行函数的功能。当出现了错误,无论是参数的错误还是函数执行中的错误,都会通过这个函数的返回值来告知使用者,这是一个不错的习惯。 下面就总结几个常用返回值类型VOID,BOOL,HANDLE,PVOID,LONG/DWORD. 每种函数类型都有返回类型(成功时和 失败时)原创 2012-11-15 13:34:44 · 921 阅读 · 0 评论 -
什么是用户界面特权隔离机制
用户界面特权隔离(User Interface Privilege Isolation,简称UIPI),是从Windows NT 6.0开始引入的技术。其目的在于防止粉碎窗口攻击(英语:Shatter attack)。用户界面特权隔离阻止较低等完整性级别(Integrity level)进程的窗口向较高等完整性级别进程的窗口发送消息,但也有一些消息不被阻止。[1] Windows消息是一种进程原创 2012-11-26 16:38:57 · 3490 阅读 · 0 评论 -
管理员以标准用户权限运行时
在这里介绍一个对于应用程序开发人员影响最大的技术:用户账户控制(UAC)Windows操作系统会创建一个安全令牌(security token).每当有代码试图访问一个受保护的安全资源时时,操作系统就会使用(出示)这个安全令牌,从Windows在内的第一个进程开始,这个令牌会与新建的所有进程关联,这样如果新下载了一个恶意程序,就会继承管理员的高权限,------因此可以肆无忌惮的修改机器上原创 2012-11-26 15:05:46 · 3024 阅读 · 0 评论 -
windows内核机制简单理解
windows内核对象,其实说白了就是:windows内核处理任何事件能够有条不紊地进行,是怎么安排和运行的内部机制(其中包含事件机制,互斥锁机制和信号量机制,等待机制)。"汽车场有车位,汽车过来停车"的例子来形象解释关于windows内核对象的含义, 1.Event N(无穷)车N(无穷)车位。对于人工重置event,就像有无穷车位的停车场。停车场一开放(SetEv原创 2012-11-19 10:52:43 · 1999 阅读 · 0 评论 -
(CloseHandle函数)内核对象、进程和线程
从CloseHandle函数说起,三者之间的关系, 这个函数是关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。 若在线程执行完之后,没有调用CloseHandle,在进程执行期间,将会造成内核原创 2012-11-23 14:53:28 · 1280 阅读 · 0 评论 -
windows核心编程心解--进程相关
总述,系统如何管理正在运行的所有应用程序。1、进程解释:正在运行的一个程序的一个实例定义为进程。进程一般包含两部分:*一个内核对象,操作系统用它来管理进程,同时也是操作系统保存进程统计信息的地方。*一个地址空间,其中包含所有可执行文件或者dll模块的代码和数据。同时也包含动态内存分配,比如线程堆栈和堆的分配。进程要做一件事情的时候,其实不是进程在做,而是只要进程一旦创建,就原创 2012-11-21 16:19:35 · 1547 阅读 · 0 评论 -
c++ 专有命名空间
终端服务命名空间、全局命名空间和会话命名空间,这如同集合中子集的包含与被包含概念。全局命名空间包含会话命名空间,而边界描述符则包含于会话命名空间。当然,这是我所理解的。边界描述符好像把会话命名空间分为一个小区域,而专有命名空间则以这个边界描述符为界限。我来画一幅图,我想像中的就是类似于这个概念:边界描述符可以包含多个专有命名空间,它只是类似于现实生活中的一道围栏,在其中可以存在原创 2012-11-21 11:14:34 · 1306 阅读 · 1 评论 -
什么是终端服务命名空间
总起,windows提供终端服务:终端服务器是一种服务器,它为终端服务客户端托管基于 Windows 的程序或完整的 Windows 桌面。用户可以连接到终端服务器来运行程序,保存文件,以及使用该服务器上的网络资源。用户可以使用 RDC 或 RemoteApp 程序访问终端服务器。 使用终端服务的优势:使用终端服务,用户可以在企业网络内部或通过 Internet 访问终端服务器。原创 2012-11-20 17:39:39 · 1667 阅读 · 0 评论 -
关于字符串的相互转化问题(全)
《第一部分》CString ,BSTR ,LPCTSTR之间关系和区别CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。typedef OLECHAR FAR* BSTR;typed原创 2012-10-26 15:58:15 · 3017 阅读 · 6 评论