Windows
Peter_Wang
虽然我不勤奋,但是依然没有留下简述
展开
-
VC++ Service编程(五)编写Control Handler函数
编写Control Handler函数 下面例子中的MyServiceCtrlHandler函数是一个Handler函数。当被调度线程调用时,它处理Opcode参数传进来的控制码,然后调用SetServiceStatus函数更新服务的状态。Handler函数收到一个控制码后,不管做什么操作,服务都应该调用SetServiceStatus函数。 当接收到暂停请求,MySe翻译 2014-12-02 23:18:14 · 1549 阅读 · 0 评论 -
文件管理(一)创建并打开文件
这是好早前学习MSDN时留下的东西,现在把它放到新地方来 最近由于工作需要,一直在学习MSDN里面有关于服务编程的东西。整天看英文文档真是觉得无聊,所以我决定边看边翻译一下,也算是给学习留下一点成果吧。 CreateFile函数可以创建新的或者打开已存在的文件。你必须指定文件名,创建规则,以及一些别的属性。一旦创建一个新的文件,操作系统就把它放到指定的文件夹里去。翻译 2014-12-02 23:25:12 · 762 阅读 · 0 评论 -
位图初级(二)——相关数据结构
这是当时媳妇对我博客的评价,哈哈:小雨 2007-1-7 14:18顶~ 这个最最有用!! 真是好人啊好人[emot]5[/emot]BITMAPFILEHEADER BITMAPFILEHEADER结构包含关于类型,大小,布局设备无关的位图信息。 typedef struct tagBITMAPFILEHEADER { WORD原创 2014-12-02 23:23:55 · 494 阅读 · 0 评论 -
Windows多线程编程(4)同步对象——Mutex对象
Mutex对象Mutex对象是一个同步对象,如果没有被任何线程占有,它的状态就会被设置为signaled,如果被线程占有,它的状态就是nonsignaled。在同一时刻,只能有一个线程占有一个mutex对象,这对于协调互斥地访问共享资源非常有用。举个例子,为了防止两个线程同时往共享内存中写入数据。在往内存中写入数据之前,都等待mutex对象的所有权。想共享内存中写完数据之后,线程释放这翻译 2014-12-02 23:36:19 · 733 阅读 · 0 评论 -
VC++简单数据库编程(一)
从我的好网博客转过来的,以后技术类的文章在这里安家了。近日要做一个数据库操作的小程序,找了很多资料,终于解决了数据库连接的问题。使用的是ADO技术:首先要引入一个动态连接库:#import "c:program filescommon filessystemadomsado15.dll" no_namespace rename("EOF","adoeof")原创 2014-12-02 23:10:01 · 1614 阅读 · 0 评论 -
VC++简单数据库编程(三)——修改一条指定记录
其实修改一条记录和添加一条记录差不多:声明SQL语句:CString sql;sql="select top 1 * from table where 你好='你好'"; (从table表中调出字段值为“你好”的一条记录,第二个“你好”放在一对单引号中)将记录集与数据库绑定,并执行SQL语句: rs->Open(_variant_t(tsql), co原创 2014-12-02 23:12:33 · 1755 阅读 · 0 评论 -
VC++ Service编程(二)编写ServiceMain函数
编写ServiceMain函数 下面例子中的MyServiceStart函数是这个服务的ServiceMain函数。MyServiceStart函数可以使用命令行参数,就像控制台程序中main函数那样的方式。第一个参数是传递给服务的值的个数,并且这个个数的最小值总是1。第二个参数是一个字符数组指针。数组的第一项总是当前服务的名称。 MyServiceStart函数首先填充一个S翻译 2014-12-02 23:16:27 · 2206 阅读 · 0 评论 -
位图初级(一)——位图的存储
这是N年前给媳妇做bitmap相关的解析软件时,学习bitmap格式的内容。之前发表于我的好网博客,现在把它转移到新地方来 位图应该以一种既定的格式存储在文件中,并被赋予一个以.bmp扩展名结尾的文件名。这个既定的格式依次由下面几种结构组成:BITMAPFILEHEADER结构,BITMAPINFOHEADER结构,BITMAPV4HEADER或者BITMAPV5HEADER 结构。原创 2014-12-02 23:21:24 · 3371 阅读 · 0 评论 -
文件管理(二)创建文件映射对象
映射文件的第一步是调用CreateFile函数来打开这个文件。为了确保被映射的文件不能被其他的进程写入,你应该使用专门的权限打开这个文件。另外,文件句柄要一直打开,直到进程不再需要它。一个得到专门的权限的简单方法是,将CreateFile的fdwShareMode参数设置为零。CreateFileMapping函数使用CreateFile函数返回的句柄来创建一个文件映射对象。翻译 2014-12-02 23:26:42 · 1086 阅读 · 0 评论 -
使用远程桌面维护系统可能会失败
在windows 2003中,每一个已经登录到计算机的用户都对应一个session,这些session都是相对独立的。正因为有这个相对独立性,同时登陆到计算机上的用户的操作才互不干扰,所以跨session访问某些系统资源将会比较麻烦。(这一点在windows vista中体现的非常明显,运行在session0下的所有服务已经不能像在2003中那样自由显示用户界面。)系统启动完毕后,windows原创 2014-12-02 23:29:27 · 618 阅读 · 0 评论 -
Windows多线程编程(2)多线程同步
为了避免竞争条件和死锁,非常有必要做一些多线程存取共享资源的同步工作。对于确保几个相关的代码能够以正确的顺序执行,同步也非常重要。 下面的这些对象可以用于多线程同步: Console input buffers Events Mutexes Processes Semaphores翻译 2014-12-02 23:35:11 · 614 阅读 · 0 评论 -
Windows PE文件结构简介
① Optional header从字面上看,这个文件头是可选的,但实际上它是PE文件中必不可少的。它在winnt.h中被定义称为:typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion;翻译 2014-12-02 23:37:28 · 784 阅读 · 0 评论 -
VC++ Service编程(六)Control Handler函数
Control Handler函数 每个服务都有一个控制处理器,HandlerEx函数。当服务程序从一个服务控制程序那里收到一个控制请求时,HandlerEx函数就会被控制调度器调用。因此,这个函数运行在控制调度器的环境中。服务调用RegisterServiceCtrlHandler或者RegisterServiceCtrlHandlerEx函数来注册它的Control Hand翻译 2014-12-02 23:18:43 · 3248 阅读 · 1 评论 -
Windows多线程编程(3)同步对象——Event对象
Event对象 Event对象是一个同步对象,它的状态可以被SetEvent函数显式的设置成为signaled状态。下面是event对象的两种类型:对象描述手动重置eventEvent对象的状态会保持signaled状态,除非显式的调用ReseEvent函数将它重置为nonsignaled状态。一旦它的状态被设置成为sign翻译 2014-12-02 23:35:47 · 721 阅读 · 0 评论 -
文件管理(四)共享文件和内存
文件映射可以用来在多个进程之间共享文件或者内存。要共享文件或内存,所有的进程都必须使用相同的文件映射的名称或句柄。 要共享一个文件,首先,第一个进程使用CreateFile函数创建或者打开一个文件。然后,使用CreateFileMapping函数创建一个文件映射对象,声明文件句柄和文件映射对象的名称。所有的内核对象(event,semaphore,mutex,waitable t翻译 2014-12-02 23:27:28 · 596 阅读 · 0 评论 -
Windows Vista 的服务
Windows Vista 的服务2006-8-9本文档提供了一些Windows Vista服务的相关信息。对于想在这个版本的Windows上面开发服务程序的开发者们,本文档也提供了一些最优方法。这些信息应用在Windows操作系统上。微软可能会随时更改本文档内容,可在以下地址获取最新的英文版本。http://go.microsoft.com/fwlink/?LinkId=71翻译 2014-12-03 00:23:03 · 1144 阅读 · 0 评论 -
VC++ Service编程(七)创建多线程服务
创建多线程服务 下面的例子论述了,一个简单的服务怎么样创建工作进程、响应SCM(服务控制管理器)、通知线程退出、不断地向SCM通知当前状态和处理过程、然后向SCM报告服务停止。要安装这个服务,请把它创建成为以给控制台程序,并使用Platform SDK中的SC工具。使用控制面板中的服务控制工具来开启关闭这个服务。#include #include #inclu翻译 2014-12-02 23:19:19 · 1389 阅读 · 0 评论 -
PE文件结构(PE文件头二)
① Optional header Optional header从字面上看,这个文件头是可选的,但实际上它是PE文件中必不可少的。它在winnt.h中被定义称为:typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; BYTE MajorLinkerVersion; BYTE Mi翻译 2014-12-02 23:45:03 · 1081 阅读 · 0 评论 -
VC++简单数据库编程(二)——添加新记录
声明记录集对象:_RecordsetPtr rs;初始化:rs.CreateInstance(__uuidof(Recordset));声明SQL语句:CString sql;sql="select * from table"; (table为数据库中的任意表名,sql可以是任何合法的select语句)将记录集与数据库绑定,并执行SQL原创 2014-12-02 23:12:08 · 1038 阅读 · 0 评论 -
VC++ Service编程(一)编写main函数
翻译自MSDN,是好多年前我发布在好网博客上的,现在把它转过来编写服务程序的main函数 服务程序的main函数调用StartServiceCtrlDispatcher函数,将它与SCM(服务控制管理器)联系起来,并开启一个控制调度线程。控制调度线程不停的循环,等待接收在调度表中已经定义好的控制请求。除非程序中的所有服务都中止或者遇到错误,要不这个线程不会返回。当程序中的所有服务翻译 2014-12-02 23:14:41 · 2288 阅读 · 0 评论 -
VC++ Service编程(三)服务入口
服务入口 通常,我们把服务做成控制台程序。控制台程序的入口是main函数。main函数从注册表中的ImagePath值来获取参数,提供给服务。 当SCM(服务控制管理器)开启一个服务,它就开始等待这个服务调用StartServiceCtrlDispatcher函数。使用下面的原则: 1、SERVICE_WIN32_OWN_PROCESS类型的服务必须在主线程中马上调用翻译 2014-12-02 23:16:48 · 1519 阅读 · 0 评论 -
VC++ Service编程(四)服务ServiceMain函数
服务ServiceMain函数 当一个服务控制程序请求开启一个新的服务时,SCM(服务控制管理器)开启服务的同时,向控制调度器发送一个开始请求。控制调度器为服务创建一个新的线程来运行ServiceMain函数。 ServiceMain函数应该执行下面的这些任务: 1、立刻为服务调用RegisterServiceCtrlHandlerEx函数,用来注册一个处理控翻译 2014-12-02 23:17:22 · 5126 阅读 · 0 评论 -
VC++ Service编程(八)多线程服务
多线程服务 SCM(服务控制管理器)向服务的控制处理器发送服务控制事件来控制一个服务。服务必须在短时间内响应控制请求,使得SCM可以明确服务的当前状态。还有,服务的当前状态必须和它向SCM报告的状态相一致。 由于服务和SCM之间的这种通信机制,使用多线程服务必须小心。当从SCM那里收到停止指示,在向SCM报告服务已经停止之前,必须等待服务中的所有线程全部退出。否则,翻译 2014-12-02 23:20:21 · 724 阅读 · 0 评论 -
文件管理(三)创建文件视图
要将文件中的数据映射到进程的虚拟内存中,你必须创建一个文件的视图。MapViewOfFile和MapViewOfFileEx函数使用CreateFileMapping返回的文件映射对象句柄来在进程的虚拟地址空间里建立文件的视图,或者文件的某个部分。如果这些函数指定的权限标志和CreateFileMapping中的权限标志不一致,则会执行失败。 MapViewOfFile函数返回一翻译 2014-12-02 23:27:25 · 738 阅读 · 0 评论 -
Windows多线程编程(1)创建线程
CreateThread函数为进程创建一个线程。必须给创建的线程声明一个开始地址,使这个线程可以从这个地址开始执行。一般的,这个地址就是程序里定义的一个函数的名字。这个函数有一个参数,一个DWORD类型的返回值。进程可以拥有运行同一函数的多个线程。 下面的例子说明怎么样创建一个新线程,这个线程执行一个本地定义的函数:ThreadProc。被建立的线程利用一块动态开辟的缓存,给翻译 2014-12-02 23:34:22 · 656 阅读 · 0 评论 -
PE文件结构(PE文件头一)
3、 PE文件结构① MS-DOS头MS-DOS头在winnt.h中定义成为IMAGE_DOS_HEADER,这个结构中,最需要关心的是成员e_lfanew,它给出了PE Header在文件中的偏移量。比如,e_lfanew的值是0xE0,则PE Header在文件距离开头0xE0处。② MS DOS 2.0 Stub Program这是一段DOS程序,如果把w翻译 2014-12-02 23:43:47 · 1039 阅读 · 0 评论