
Windows核心编程
panda1987
这个作者很懒,什么都没留下…
展开
-
读Windows核心编程 - 1
当调用一个Windows函数失败,可以用DWORD GetLastError(); 返回该线程的32位错误代码。WinError.h头文件中包含了Microsoft公司定义的错误代码列表。每一个错误代码包含消息ID(ERROR_PATH_NOT_FOUND),消息文本和一个号码(0L、1L)三部分。当Windows函数运行失败时,应该立即调用GetLastError函数,如果调用了原创 2008-04-01 20:00:00 · 749 阅读 · 0 评论 -
读Windows核心编程 - 13
每个进程都被赋予它自己的虚拟地址空间。对于32位进程来说,这个地址空间是4GB,因为32位指针可以拥有从0x00000000至0xFFFFFFFF之间的任何一个值。当你因为拥有如此大的地址空间可以用于应用程序而兴高采烈之前,记住,这是个虚拟地址空间,不是物理地址空间。该地址空间只是内存地址的一个范围。在你能够成功地访问数据而不会出现违规访问之前,必须赋予物理存储器,或者将物理存储器映射到各个部分的原创 2009-02-03 11:25:00 · 774 阅读 · 0 评论 -
读Windows核心编程 - 10 ~ 12
这三章分别介绍了线程同步工具包、线程池的使用、纤程。线程同步工具包主要以代码的方式完成了个性化的线程同步工具包。不详细介绍了,具体内容参看核心编程page229. 这里简单介绍一下线程池的使用及纤程的概念。线程池的使用: 我们知道创建多线程程序是非常困难的,需要面临两大问题:线程创建、撤销进行管理,资源访问的同步。Microsoft公司的Windows2000提供了一系列的原创 2008-07-27 22:38:00 · 714 阅读 · 0 评论 -
读Windows核心编程 - 9
上一章我们介绍了用户方式的线程同步,它的优点是速度非常快。但是它也有其局限性,比如互锁函数只能在单值上运行,根本无法使线程进入等待状态。使用关键代码段可以使线程进入等待状态,但是只能用这些代码段对单个进行中的线程进行同步。另外,使用关键代码段容易导致死锁,因为在等待进入关键代码段时无法设定超时值。 这一章中我们要介绍的是内核方式的线程同步,它唯一的确定就是速度比较慢。当调用本章提原创 2008-07-27 01:37:00 · 1038 阅读 · 1 评论 -
读Windows核心编程 - 8
线程需要在下面两种情况下互相进行通信:1. 当有多个线程访问共享资源而不使资源被破坏时。2. 当一个线程需要将某个任务已经完成的情况通知另外一个或多个线程时。线程同步问题在很大程度上与原子访问有关。来看一个例子:// Define a global variablelong g_x = 0;DOWRD WINAPI ThreadFunc1(PVOID pvParam)...{原创 2008-04-15 22:39:00 · 690 阅读 · 0 评论 -
读Windows核心编程 - 7
windows是抢占式的,我们无法保证线程在某个事件的某个时间段内开始运行。系统只调度可以调度的线程,但实际情况是,系统中的大多数线程是不可调度的。除了暂停的线程外,还有其他许多线程也是不可调度的,因为它们正在等待某些事情的发生。例如,如果运行Notepad,但是并不输入任何数据,那么Notepad的线程就没有什么事情要做。系统不给无事可做的线程分配CPU时间。当我们移动Note原创 2008-04-10 22:09:00 · 2036 阅读 · 0 评论 -
读Windows核心编程 - 5
Windows2000 提供了一个新的作业内核对象,使你能够将进程组合在一起,并且创建一个"沙框",以便限制进程能够进程的操作,最好将作业对象视为一个进程的容器。与其他所有内核对象相似,创建作业对象需要调用Handle CreateJobObject(PSECURITY_ATTRIBUTES psa, PCTSTR pszName),第一个参数与其他类似Create*函数相同,第二原创 2008-04-08 21:30:00 · 1093 阅读 · 0 评论 -
读Windows核心编程 - 3
什么是内核对象?比如:事件对象,文件对象,文件映射对象,互斥对象,进程对象,作业对象,线程对象等等都是内核对象。每个内核对象只是内核分配的一个内存块,并且只能 由内核访问。该内存块是一个数据结构,它的成员负责维护该对象的各种信息。当调用一个用于创建内核对象的函数时,该函数就返回一个用于标识该对象的句柄。该句柄可以被视为一个不透明值,进程中的任何线程都可以使用这个值。注意:该句柄是与原创 2008-04-04 18:10:00 · 1045 阅读 · 1 评论 -
读Windows核心编程 - 2
Microsoft对Unicode的支持:Windows 98 :只支持ANSIWindows 2000: 即支持Unicode也支持ANSI,但是用Unicode会更快,因为会有一个内部的转化过程,比如调用CreateWindowEx函数,参数传非Unicode字符串,那么CreateWindowEx必须分配内存(进程的默认堆中),将非Unicode字符转化成Unicode字符,然后在传原创 2008-04-01 21:43:00 · 998 阅读 · 0 评论 -
读Windows核心编程 - 6
线程由两部分构成:线程堆栈+线程内核对象。通常情况下,一个应用程序拥有一个用户界面线程,用于创建所有窗口,并且有一个GetMessage循环。进程中的所有其他线程都是工作线程,它们与计算机或者I/O相关联,但是这些线程从不创建窗口。虽然单个进程拥有多个用户界面线程的情况并不多见,但是这种情况有着某种有效的用途。Windows Explorer为每个文件夹窗口创建了一个独立的线程。它原创 2008-04-08 23:30:00 · 1446 阅读 · 0 评论 -
读Windows核心编程 - 4
进程分为两部分,一个是操作系统用来管理进程的内核对象,一个是地址空间。进程是不活泼的,活泼的是线程,每个线程都有它自己的一组CPU寄存器和它自己的堆栈。 Windows支持两种应用程序,一种是GUI(基于图形用户界面),还有一种CUI(基于控制台用户界面)。Windows应用程序必须有一个在应用程序启动运行时的进入点函数。一共有4个:WinWain、wWinMai原创 2008-04-05 22:05:00 · 999 阅读 · 0 评论 -
读Windows核心编程 - 14
GetSystemInfo函数将用于检索与主机相关的值:VOID GetSystemInfo(LPSYSTEM_INFO psinf);typedef struct _SYSTEM_INFO{ union { DWORD dwOemId; // 已作废 struct {原创 2009-02-03 17:09:00 · 730 阅读 · 0 评论