[驱动开发] struct _LDR_DATA_TABLE_ENTRY

@Windows XP Professional Service Pack 3 (x86) (5.1, Build 2600)

 1 lkd> dt -b _LDR_DATA_TABLE_ENTRY
 2 nt!_LDR_DATA_TABLE_ENTRY
 3    +0x000 InLoadOrderLinks : _LIST_ENTRY
 4       +0x000 Flink            : Ptr32
 5       +0x004 Blink            : Ptr32
 6    +0x008 InMemoryOrderLinks : _LIST_ENTRY
 7       +0x000 Flink            : Ptr32
 8       +0x004 Blink            : Ptr32
 9    +0x010 InInitializationOrderLinks : _LIST_ENTRY
10       +0x000 Flink            : Ptr32
11       +0x004 Blink            : Ptr32
12    +0x018 DllBase          : Ptr32
13    +0x01c EntryPoint       : Ptr32
14    +0x020 SizeOfImage      : Uint4B
15    +0x024 FullDllName      : _UNICODE_STRING
16       +0x000 Length           : Uint2B
17       +0x002 MaximumLength    : Uint2B
18       +0x004 Buffer           : Ptr32
19    +0x02c BaseDllName      : _UNICODE_STRING
20       +0x000 Length           : Uint2B
21       +0x002 MaximumLength    : Uint2B
22       +0x004 Buffer           : Ptr32
23    +0x034 Flags            : Uint4B
24    +0x038 LoadCount        : Uint2B
25    +0x03a TlsIndex         : Uint2B
26    +0x03c HashLinks        : _LIST_ENTRY
27       +0x000 Flink            : Ptr32
28       +0x004 Blink            : Ptr32
29    +0x03c SectionPointer   : Ptr32
30    +0x040 CheckSum         : Uint4B
31    +0x044 TimeDateStamp    : Uint4B
32    +0x044 LoadedImports    : Ptr32
33    +0x048 EntryPointActivationContext : Ptr32
34    +0x04c PatchInformation : Ptr32 

@Windows 7 Ultimate (x64) (6.1, Build 7600)

 1 lkd> dt -b _LDR_DATA_TABLE_ENTRY
 2 nt!_LDR_DATA_TABLE_ENTRY
 3    +0x000 InLoadOrderLinks : _LIST_ENTRY
 4       +0x000 Flink            : Ptr64
 5       +0x008 Blink            : Ptr64
 6    +0x010 InMemoryOrderLinks : _LIST_ENTRY
 7       +0x000 Flink            : Ptr64
 8       +0x008 Blink            : Ptr64
 9    +0x020 InInitializationOrderLinks : _LIST_ENTRY
10       +0x000 Flink            : Ptr64
11       +0x008 Blink            : Ptr64
12    +0x030 DllBase          : Ptr64
13    +0x038 EntryPoint       : Ptr64
14    +0x040 SizeOfImage      : Uint4B
15    +0x048 FullDllName      : _UNICODE_STRING
16       +0x000 Length           : Uint2B
17       +0x002 MaximumLength    : Uint2B
18       +0x008 Buffer           : Ptr64
19    +0x058 BaseDllName      : _UNICODE_STRING
20       +0x000 Length           : Uint2B
21       +0x002 MaximumLength    : Uint2B
22       +0x008 Buffer           : Ptr64
23    +0x068 Flags            : Uint4B
24    +0x06c LoadCount        : Uint2B
25    +0x06e TlsIndex         : Uint2B
26    +0x070 HashLinks        : _LIST_ENTRY
27       +0x000 Flink            : Ptr64
28       +0x008 Blink            : Ptr64
29    +0x070 SectionPointer   : Ptr64
30    +0x078 CheckSum         : Uint4B
31    +0x080 TimeDateStamp    : Uint4B
32    +0x080 LoadedImports    : Ptr64
33    +0x088 EntryPointActivationContext : Ptr64
34    +0x090 PatchInformation : Ptr64
35    +0x098 ForwarderLinks   : _LIST_ENTRY
36       +0x000 Flink            : Ptr64
37       +0x008 Blink            : Ptr64
38    +0x0a8 ServiceTagLinks  : _LIST_ENTRY
39       +0x000 Flink            : Ptr64
40       +0x008 Blink            : Ptr64
41    +0x0b8 StaticLinks      : _LIST_ENTRY
42       +0x000 Flink            : Ptr64
43       +0x008 Blink            : Ptr64
44    +0x0c8 ContextInformation : Ptr64
45    +0x0d0 OriginalBase     : Uint8B
46    +0x0d8 LoadTime         : _LARGE_INTEGER
47       +0x000 LowPart          : Uint4B
48       +0x004 HighPart         : Int4B
49       +0x000 u                : <unnamed-tag>
50          +0x000 LowPart          : Uint4B
51          +0x004 HighPart         : Int4B52       +0x000 QuadPart         : Int8B

C++ Code

typedef struct _LDR_DATA_TABLE_ENTRY {
    // Start from Windows XP
    LIST_ENTRY InLoadOrderLinks;
    LIST_ENTRY InMemoryOrderLinks;
    LIST_ENTRY InInitializationOrderLinks;
    PVOID DllBase;
    PVOID EntryPoint;
    ULONG SizeOfImage;
    UNICODE_STRING FullDllName;
    UNICODE_STRING BaseDllName;
    ULONG Flags;
    USHORT LoadCount;
    USHORT TlsIndex;
    union {
        LIST_ENTRY HashLinks;
        struct {
            PVOID SectionPointer;
            ULONG CheckSum;
        };
    };
    union {
        ULONG TimeDateStamp;
        PVOID LoadedImports;
    };
    PVOID EntryPointActivationContext;        //_ACTIVATION_CONTEXT *
    PVOID PatchInformation;

    // Start from Windows Vista
    LIST_ENTRY ForwarderLinks;
    LIST_ENTRY ServiceTagLinks;
    LIST_ENTRY StaticLinks;
    PVOID ContextInformation;
    PVOID OriginalBase;
    LARGE_INTEGER LoadTime;

} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
时间: 2024-12-24 05:11:59

[驱动开发] struct _LDR_DATA_TABLE_ENTRY的相关文章

Windows驱动开发基础(八)内存管理

Windows驱动开发基础系列,转载请标明出处:http://blog.csdn.net/ikerpeng/article/details/38826159 就32位的计算机来说,他有4G的真实的物理内存.但是这样是不够的,于是引入了虚拟内存的概念.使得每一个进程都有4G的虚拟内存. 虚拟内存实际上就是采用了一种映射的方式.4G的内存实际上被分页.一般来说一个页的大小是4K.也是说它被分为了1M个页.在这么多的页里面,有一部分是对应于物理内存的(可以是多对一的):有一部分是对应于磁盘上的空间,但

Linux下spi驱动开发

转载至:http://www.embedu.org/Column/Column367.htm 作者:刘洪涛,华清远见嵌入式学院讲师. 一.概述 基于子系统去开发驱动程序已经是linux内核中普遍的做法了.前面写过基于I2C子系 统的驱动开发.本文介绍另外一种常用总线SPI的开发方法.SPI子系统的开发和I2C有很多的相似性,大家可以对比学习.本主题分为两个部分叙述,第一 部分介绍基于SPI子系统开发的理论框架:第二部分以华清远见教学平台FS_S5PC100上的M25P10芯片为例(内核版本2.6

驱动开发之 设备读写方式:直接方式

上一节介绍了缓冲区方式读写,这一节咱们来看看直接方式读写设备. 1. 直接方式读写设备,操作系统会将用户模式下的缓冲区锁住,然后操作系统将这段缓冲区在内核模式地址再次映射一遍.这样,用户模式的缓冲区和内核模式的缓冲区指向的是同一区域的物理内存.无论操作系统如何切换进程,内核模式地址都保持不变. 创建好设备IoCreateDevice后,需要设置DO_DIRECT_IO,  pDevObj->Flags |= DO_DIRECT_IO. 2. 这里涉及到内存描述符表(MDL) MDL结构的声明如下

Linux驱动开发 -- 打开dev_dbg()

Linux驱动开发 -- 打开dev_dbg() 2012-10-23 19:21:54 分类: LINUX linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用printk(KERN_DEBUG )来输出打印信息.要打开这个开关需要下面两步. 1.打开调试开关:你调试的文件中必然包含了<linux/device.h>,或者<linux /paltforam_device.h>,后者包含了前者,在包含此头文件之前,使用#define D

Android深度探索HAL与驱动开发

第五章 开发板是嵌入式开发的前提,我们使用的是三星公司生产的s3c6410开发板.s3c6410开发板是一款低功耗,性价比极高的处理器,也为2.5G和3G通信服务提供了优化的硬件性能以及强大的加速器.包括运动视频处理,音频处理等.接下来安装串口调试工具:minicom.检查当前系统是否支持usb转串口,安装minicom,配置minicom,测试minicom.配置完成后烧写android系统.用串口线或usb转串口线连接开发板与pc启动minicom.进入eboot状态,擦除nandflash

驱动编程思想之初体验 --------------- 嵌入式linux驱动开发之点亮LED

这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的住,不然真像一些人说的,学了一年嵌入式感觉还没找到门. 不能再扯了,涉及到linux的驱动开发知识面灰常广,再扯文章就会变得灰常长.首先还是回到led驱动的本身上,自从linux被移植到arm上后,做驱动开发的硬件知识要求有所降低,很多都回归到了软件上,这是系统编程的一大特点,当然 ,也不排除有很多

Windows 驱动开发 - 7

在<Windows 驱动开发 - 5>我们所说的读写操作在本篇实现. 在WDF中实现此功能主要为:EvtIoRead和EvtIoWrite. 首先,在EvtDeviceAdd设置以上两个回调事件. ioQueueConfig.EvtIoRead = EvtIoRead; ioQueueConfig.EvtIoWrite = EvtIoWrite; 然后,在EvtDevicePrepareHardware中获取WDFUSBPIPE并测试他. pDeviceContext->BulkRead

Windows 驱动开发 - 8

最后的一点开发工作:跟踪驱动. 一.驱动跟踪 1. 包含TMH头文件 #include "step5.tmh" 2. 初始化跟踪 在DriverEntry中初始化. WPP_INIT_TRACING( DriverObject, RegistryPath ); WDF_OBJECT_ATTRIBUTES_INIT(&attributes); attributes.EvtCleanupCallback = EvtDriverContextCleanup; (1) WPP跟踪初始化

驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇

驱动开发读书笔记. 0.04  linux 2.6 platform device register 平台设备注册  1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentation/driver-model/platform.txt Device Enumeration 82 ~~~~~~~~~~~~~~~~~~ 83 As a rule, platform specific (and often board-specific) setup code will 84 reg