摘要:
原文在这里 宏参数 function-like宏可以带参数,就好像函数带参数一样。定一个一个带参数宏的时候,把参数插入到两个括号之间,就好像定义函数的参数一样。这就是该类宏被称为function-like宏的原因。宏参数必须是合法的C标识,由逗号和空格隔开。 调用带参数的宏,你可以在写完宏名之后插一对括号,然后在括号里跟实参,由逗号隔开。宏调用的代码并不是必须写在一行里,你可以想写多少行就写多少行... 阅读全文
摘要:
原文在这里 function-like 宏 除了定义一个宏当变量使用,你也可以定义一个宏当函数用,这种宏就叫function-like宏。定义function-like宏同样用#define语句,不同的是还要宏名字后面跟一对括号,比如: #define lang_init() c_init() lang_init() ==> c_init()只有在宏名字后... 阅读全文
摘要:
原文在这里 Object-like 宏 Object-like宏是一个简单的标识,在编译器会被一段代码代替。由于它看上去很像一个在代码中被使用的数据域,所以管它叫Object-like宏。最常使用该类型宏的场合是:用一个指定符号代替一个数字常量。 使用“#define”指令定义一个宏,#define之后跟一个宏名,宏名之后跟一段宏内容,编译器在预处理时会把宏名用宏内容替代。举例来说, #defi... 阅读全文
摘要:
原文见这里 宏,是一小片被命名了的代码段。在程序的其他地方引用该名字时,编译器会自动用宏的内容取代它。宏有两种,它们的不同之处比较多的表现在它们在代码中的样子:Object-like 宏指代 objects, 而function-like宏指代function call。 你可以把任何合法的标识符定义成宏,连c语言的保留字也可以,因为预处理器根本不知道那些字符串是保留字。这个特性在某种场合很有... 阅读全文
摘要:
错误处理分为状态代码返回,异常处理和bug check三种
内存分为两块,按照安全性和完整性分可以分为用户模式地址和内核模式地址,按照分页能力分可以分为分页内存和非分页内存。
内核中操作字符串有自己的一套机制 阅读全文
摘要:
上层和驱动通信用DeviceIoControl函数,这是一个Win32 API,在SDK中定义。这个函数都会产生一个IRP_MJ_DEVICE_CONTROL包,如果驱动中注册过相应的例程,那么这个包就会引发该例程的工作。如果是驱动和驱动间的通信,那么用IoBuildDeviceControlRequest函数,该函数在DDK中定义,会产生一个IRP_INTERNAL_DEVICE_CONTROL包,并引发相应的例程。这两个IRP包中都有一个非常重要的结构叫IOCTL(io control code),用于指定通信中的各类细节。该数据结构是一个32比特的数据块,有6个区域,每个区域包含一类信息。 阅读全文
摘要:
IRP基本上是NT驱动架构中最重要的一个数据结构了,哪儿都能看到它,哪儿都需要用到它 阅读全文
摘要:
定义一个Filter的分发例程时,如有需要,可以指定DEFINE_KSFILTER_NODE_DESCRIPTORS以便在Filter里生成Node。 阅读全文
摘要:
BDA minidriver的职责:调制(tunning)信号,解调(demodulating)信号,获取(capture),分流(demultiplexing)。BDA是在AVStream上的扩展,Bdasup.lib提供了BDA的属性集和方法集。写BDA驱动的主要工作就是把Bdasup.lib中要求的属性集方法集的例程都注册一遍(需要的注册,确实不需要的也可以不管),提供自己的实现。 阅读全文
摘要:
功能拓扑图(Functional Topology):BAD的目标是不管硬件或者接收信号如何变,它的整体架构可以不做大调整,为此BDA引入功能拓扑图的概念,它把类似DirectShow Filter的结构作为节点(Node),包含在一个receiver filter中,因此一个filter可以做很多工作,这取决于该filter包含了哪些node,以及这些node都具备哪些功能。Functio... 阅读全文