CONTAINING_RECORD的实现】的更多相关文章

宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的指针来推算出该结构体的指针! 下面从一个简单的例子开始说起: 我们定义一个结构体, 同时类型化: typedef struct{ int a; int b; int c; }ss; 这是一个很简单的结构体, 没什么特殊的, 稍微分析下该结构体: 结构体的大小(字节):4+4+4=12字节 成员a的偏移:0 成员b的偏移:4 成员c的偏移:8 我们用ss来定义一个变量: ss s…
Windows中提供了一个宏 #define CONTAINING_RECORD (address, type, field ) ((type *)( \ (PCHAR)(address ) - \ (ULONG_PTR)(&((type *)0)->field))) address : 结构体内成员实际地址 type : 结构体类型 field : 结构体内成员字段名称   作用: 更加提供的结构体成员地址反推结构体实例的地址.   宏进行的操作实际是:成员变量实际地址 - 成员变量偏移量…
CONTAINING_RECORD Containing record是一个在C++编程中用处很大的一种技巧,它的功能为已知结构体或类的某一成员.对象中该成员的地址以及这一结构体名或类名,从而得到该对象的基地址. 由于写法简单,它被当做一个宏来使用,写法是这样的. #define CONTAINING_RECORD(address,type,field) \ ((type*)((PCHAR)(address)-(ULONG_PTR)(&((type*)0)->field))) 这个宏运用的是…
// 9.25.cpp : 定义控制台应用程序的入口点.///*----------------------------CONTAINING_RECODER的实现------------------------*/ #include "stdafx.h"#include <windows.h> typedef struct _DATA_ { int a; int b; int c; int d;}DATA,*PDATA; DATA Sub_1(); DWORD WINAPI…
完成端口(Completion Port)详解 此文讲解最好,也很全面一下其他文章看看就行,也可不看. 单句柄数据,单IO数据 此文讲述比较清晰,可以辅助理解上文. IOCP编程之基本原理:http://www.cnblogs.com/FCoding/archive/2012/07/16/2594442.html#undefined 此文对IOCP基本原理做了比较好的解释,易于理解,但没有好的实践实例. IOCP模型与网络编程:http://blog.csdn.net/neicole/artic…
部分代码 #include "my_sys_fun.h"#ifdef __cplusplusextern "C"{#endif //驱动加载函数 NTSTATUS DriverEntry(PDRIVER_OBJECT pPDriverObj, PUNICODE_STRING pPuniStr); //驱动卸载函数 VOID UnLoadDriver(_In_ PDRIVER_OBJECT pPDriverObj); #ifdef __cplusplus}#endif…
枚举进程模块的方法有很多种,常见的有枚举PEB和内存搜索法,今天,先来看看实现起来最简单的枚举PEB实现获取进程模块列表. 首先,惯例是各种繁琐的结构体定义.需要包含 ntifs.h 和 WinDef.h, 此处不再列出,各位看官根据情况自行添加. typedef PPEB (__stdcall *PFNPsGetProcessPeb)(PEPROCESS pEProcess); typedef ULONG   PPS_POST_PROCESS_INIT_ROUTINE; typedef str…
一.内存管理概念 1. 物理内存概念(Physical Memory Address)     PC上有三条总线,分别是数据总线.地址总线和控制总线.32位CPU的寻址能力为4GB(2的32次方)个字节.用户最多可以使用4GB的真实物理内存.PC中很多设备都提供了自己的设备内存.这部分内存会映射到PC的物理内存上,也就是读写这段物理地址,其实读写的是设备内存地址,而不是物理内存地址. 2. 虚拟内存概念     虽然可以寻址4GB的内存,但是PC中往往没有如此多的真实物理内存.操作系统和硬件(主…
#pragma once #include <WinSock2.h> #include <MSWSock.h> #include <Windows.h> #pragma comment(lib,"ws2_32.lib") #define BUFFER_SIZE (1024*8) // 8KB #define BUFFER_SIZE_DATA (3*BUFFER_SIZE ) #define NOTIFY_MSG_ACCEPT 0xa1 #define…
手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                              ----- By PiggyXP(小猪) 前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后,终于决定开始动笔了,但愿还不算晚….. 这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方…