注:源码为学习<Windows核心编程>的一些尝试,非原创.若能有助于一二访客,幸甚. 1.程序框架 #include "Queue.h" #include <tchar.h> #include <windowsx.h> #include <StrSafe.h> #include <process.h> #include "resource.h" /*****************************…
内核对象 本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性. 首先让我们来了解一下什么是内核对象.内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问.在此数据结构中少数成员如安全描述符和使用计数是所有对象都有的,但其他大多数成员都是不同类型的对象特有的.内核对象的数据结构只能由操作系统提供的API访问,应用程序在内存中不能访问.调用创建内核对象的函数后,该函数会返回一个句柄,它标识了所创建的…
随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并额外提供了“垃圾回收器”.对于不再使用的内存资源,垃圾回收器能自动将其释放. 5.1 用构造器确保初始化 //:initialization/SimpleConstructor.java //Demonstration of a simple constructor. class Rock { Ro…
练习 4-1. Python对象.与所有Python对象有关的三个属性是什么?请简单的描述一下. 答:身份.类型和值: 身份:每一个对象都有一个唯一的身份标识自己,可以用id()得到.  类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则.可以用type()查看类型. 值:对象表示的数据项. 4-2.类型.不可更改(immutable)指的是什么?Python的那些类型是可更改的(mutable),哪些不是? 答:对象的值是否可以更改称为对象的可改变性,…
9.4 等待定时器内核对象 等待定时器是在某个时间或按规定的间隔时间发出自己的信号通知的内核对象.它们通常用来在某个时间执行某个操作. 若要创建等待定时器,只需要调用C r e a t e Wa i t a b l e Ti m e r函数: HANDLE CreateWaitableTimer( PSECURITY_ATTRIBUTES psa, BOOL fManualReset, PCTSTR pszName ); p s a和p s z N a m e这两个参数在第3章中做过介绍.当然,…
Python并不强求你以面向对象的方式编程(与Java不同) # coding=utf8 class FooClass(object): version = 0.1 def __init__(self, nm='John Doe'): self.name = nm print('Created a class instance for', nm) def showname(self): print('Your name is ', self.name) print('My name is ',…
// Heap.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include <iostream> #include <new> using namespace std; ); class CSomeClass { protected: static size_t s_Counts; static HANDLE s_hHeap; public: CSomeClass…
Github https://github.com/gongluck/Windows-Core-Program.git //第3章 内核对象.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第3章 内核对象.h" int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLin…
无论怎样创建内核对象,都要向系统指明将通过调用 CloseHandle 来结束对该对象的操作: BOOL CloseHandle(HANDLE hobj); 该函数首先检查调用进程的句柄表,以确保传递给它的索引(句柄)用于标识一个进程实际上无权访问的对象.如果该索引是有效的,那么系统就可以获得内核对象的数据结构的地址,并可确定该结构中的使用计数的数据成员.如果使用计数是0,该内核便从内存中撤消该内核对象.如果将一个无效句柄传递给CloseHandle,将会出现两种情况之一.如果进程运行正常,Cl…
第9章 线程与内核对象的同步 上一章介绍了如何使用允许线程保留在用户方式中的机制来实现线程同步的方法.用户方式同步的优点是它的同步速度非常快.如果强调线程的运行速度,那么首先应该确定用户方式的线程同步机制是否适合需要. 虽然用户方式的线程同步机制具有速度快的优点,但是它也有其局限性.对于许多应用程序来说,这种机制是不适用的.例如,互锁函数家族只能在单值上运行,根本无法使线程进入等待状态.可以使用关键代码段使线程进入等待状态,但是只能用这些代码段对单个进程中的线程实施同步.还有,使用关键代码段时,…