求助:如何用 CONTAINING_RECORD() 宏,返回正确的 IRP 指针?

VC/MFC > 硬件/系统 [问题点数:100分,结帖人dazhanhongtu]
等级
本版专家分:3
结帖率 100%
等级
本版专家分:14999
勋章
Blank
红花 2010年3月 VC/MFC大版内专家分月排行榜第一
等级
本版专家分:3
等级
本版专家分:3
等级
本版专家分:3
等级
本版专家分:902
等级
本版专家分:3
等级
本版专家分:902
等级
本版专家分:3
等级
本版专家分:1310
等级
本版专家分:3
dazhanhongtu

等级:

CONTAINING_RECORD宏详解

问题如下: Device Development Kit里的...CONTAINING_RECORD(address, type, field) ((type *)( \ (PCHAR)(address) - \ (ULONG_PTR)(&((type *)0)->field))) 里面的(&((type *)0)->field)中的0怎么解释。 Device

CONTAINING_RECORD的理解

晚上有个同学给小C提了个问题:小C觉得还蛮典型的,发篇日志交流一下吧~ ...#define CONTAINING_RECORD(address, type, field) ((type *)( \ (PCHAR)(address) - \ (ULONG_PTR)(&((type *)0)->field

irp的异步完成_irp等待插入队列_删除队列_结束irp

#include <windows.h> #include <stdio.h> int main() { HANDLE hDevice = CreateFile(L"\\\\.\\HelloDDK", GENERIC_READ | GENERIC_WRITE, 0, NULL, ... FIL...

<学习笔记>Windows驱动开发技术详解__IRP的同步

对设备的任何操作都会最终转化为IRP请求,而IRP一般都是由操作系统异步发送的。异步处理IRP有助于提高效率,但是有时异步...将IRP同步化的方法有StartIO例程,使用中断服务例程等。 应用程序对设备的同步异步操作

IRP的同步

以WriteFile为例,一般的同步操作是调用WriteFile完成后,并不会返回,应用程序会在此处暂停,一直等到函数将数据写入文件中并正常返回,而异步操作则是调用WriteFile后会马上返回,但是操作系统有另一线程在继续...

IRP的同步完成与异步完成

应用程序中对设备进行同步、异步操作,都必须得到...另一种方法是在派遣函数中不结束IRP请求,而是让派遣函数直接返回IRP在以后的某个时候再进行处理。 1)IRP的同步完成  在应用程序中调用CreateFile win32API函

27、Windows内核编程,IRP的同步(1)

27、Windows内核编程,IRP的同步(1) 对设备的任何操作都会转化为IRP请求,而IRP一般都是由操作系统异步发送的。...同步方法有:StartIO例程,使用中断服务例程等。 1、应用程序对设备的同步异步操作 1)同步

IRP的同步问题

转载自:  ...   一、前言 对设备的任何操作都会最终转化为IRP请求,而IRP一般都是由操作系统异步发送的。异步处理IRP有助于提高效率,但是有时异步处理会带来逻辑...将IRP同步化的方法有StartIO例程,使用中断服务例

应用程序对设备 + IRP 的同步异步学习

对设备的的操作转换为IRP请求,而一般IRP都是由操作系统异步发送的。 异步处理IRP有助于提高效率,但有时会导致逻辑错误,需要将异步的IRP进行同步化 StartIOl例程,使用中断服务例程等。 应用程序对设备的...

Windows IRP处理的“标准模型”

并不是每种IRP都经过这些步骤,由于设备类型和IRP种类的不同某些步骤会改变或根本不存在。尽管这个过程可能有各种变化形式,但这个图为我们将要展开的讨论提供了一个很好的起点。 比你想象的更复杂... 当你第一次...

IRP的串行化处理

操作系统为程序员提供了一个IRP队列来实现串行,这个队列KDEVICE QUEUE 数据结构表示。 typedef struct _KDEVICE_QUEUE { //IRP队列来实现串行 CSHORT Type; CSHORT Size; LIST_ENTRY devicelisthead; //该...

挂起当前IRP

如果需要将IRP异步完成, 一般不会在处理函数中调用IoCompleteRequest函数, 因为调用IoCompleteRequest函数就意味着,该IRP请求处理完成了, 事实上很多时候是需要多次处理, 或者有其他需求的, 这边先谈谈将当前IRP挂起...

IRP 续三 挂起当前IRP(转)

挂起当前IRP 如果需要将IRP异步完成, 一般不会在处理函数中调用IoCompleteRequest函数, 因为调用IoCompleteRequest函数就意味着,该IRP请求处理完成了, 事实上很多时候是需要多次处理, 或者有其他需求的, 这边先谈谈...

3.4 IRP处理

简要介绍IRP的生成、创建、发送等,然后介绍多种IRP处理示例。 3.4.1 简单的IRP流动图 应用程序打开磁盘上一个数据文件的基本流程: 1. Windows子系统使用系统服务函数NtCreateFile打开目标文件 2. I/O管理器调用...

遍历驱动的设备栈遇到的问题及解决

首先来说一下我遇到的几个问题: 可以看到上面的代码中我是要打印4项,分别是驱动名称, 设备名称,驱动地址以及设备地址。但结果: 驱动名称出来了但设备名没有。...Name.Buffer都存在,怎么会打印不出来呢?...

指针和结构体偏移量

指针和结构体偏移量 转自:http://hi.baidu.com/debugtime/item/42ce11ca5d063d24ef4665c6 定义一个结构体 struct A { ... int a; char b; short c; ... } 其中已知int a=100; ...

[Win32驱动11] 驱动中的IRP同步异步以及串行化处理方式(Part 1)

由于设备一次性无法立即处理完所有IRP,所以设备在收到IRP后首先将其挂载到一个链表中并挂起该IRP返回STATUS_PENDING。这些挂在链表上的IRP会在设备被关闭时被处理掉。即当CloseHandle被调用后,设备收到CLEANUP...

转 枚举设备栈

hello.h #pragma once #include <ntddk.h> #define CountArray(Array) ( sizeof(Array) / sizeof(Array[0]) ) typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT pDevice;... UNI...

枚举设备栈

hello.h #pragma once #include #define CountArray(Array) ( sizeof(Array) / sizeof(Array[0]) ) typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT pDevice; //设备对象 UNICODE_STRING ...

Android开发精典案例60个【源码】

60个Android开发精典案例,好东西 - 给大家分享60个Android开发的精典案例,包含任务监听、设备适配,游戏框架搭建,特效实现,多点触控,网络协议,游戏关卡设置等内容。特别是做游戏开发的朋友值得研究。喜欢就拿走吧!

C语言游戏代码大全

双人贪吃蛇,别踩白方块,玫瑰花,矿井逃生等多种C语言游戏代码等你来实践!

Windows程序设计应用开发

养具备Win32 API SDK级别对Windows平台程序编码能力,可以参与Windows应用工程类别的GUI程序开发,对算法策略有容错性表现;提升的、软件设计经验,初步具备面向对象软件设计思想,能针对性的应用事件驱动编程开发应用程序。 丁宋涛老师是南京大学博士,微软中国认证讲师,任江苏微软技术中心、美国大学理事会计算机学科教师,捷帝科技有限公司联合创始人,拥有15年以上程序开发经验。 源码下载加入 windows编程qq群中 165714616 课程由丁宋涛老师主讲,夏曹俊老师辅讲 课程提供全部源码,开发使用次新版本的vs2015保证适应最新应用,又不会有最新版本的bug

Parallels Desktop 16 联网启动脚本.command

Parallels Desktop 16 联网启动脚本.command 管理员运行 就能上网(Mac 虚拟机:Parallels Desktop v16.0.1-48919 TNT 直装版 支持 macos 11)

C#高性能大容量SOCKET并发完成端口例子(有C#客户端)完整实例源码

例子主要包括SocketAsyncEventArgs通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议,用于测试SocketAsyncEventArgs的性能和压力,最大连接数支持65535个长连接,最高命令交互速度达到250MB/S(使用的是127.0.0.1的方式,相当于千兆网卡1Gb=125MB/S两倍的吞吐量)。服务端用C#编写,并使用log4net作为日志模块; 同时支持65536个连接,网络吞吐量可以达到400M。

jdk1.8 64位官方正式版 jdk-8u91-windows

jdk1.8 64位官方正式版 jdk-8u91-windows

<8>Lua从入门到精通

lua语言以其,轻量级: 可扩展,支持面向过程编程和函数式编程;自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;闭包(closure);提供多线程支持; 在 游戏开发,独立应用脚本,Web 应用脚本,扩展和数据库插件,安全系统,等领域得到了广泛应用。 实现从lua入门到精通。

C#入门必看实力程序100个

C#入门必看含有100个例字,每个例子都是针对C#的学习关键知识点设计的,是学习C#必须知道的一些程序例子,分享给大家,需要的可以下载

c语言项目开发实例

十个c语言案例 (1)贪吃蛇 (2)五子棋游戏 (3)电话薄管理系统 (4)计算器 (5)万年历 (6)电子表 (7)客户端和服务器通信 (8)潜艇大战游戏 (9)鼠标器程序 (10)手机通讯录系统

ctf之图片隐写

在CTF题目中,图片隐写题属于杂项的一部分,题目较为简单。本文大致梳理了下CTF比赛中图片隐写题的常用套路,如果未能看出题目破题点,可按照以下方法顺序逐一尝试。 帮助想学习ctf的同学入门,先从最简单的隐写学起。

navicat简体中文版 绿色版 (64位)

解压后安装navicat,打开navicat执行PatchNavicat即破解成功。可以正常使用啦。

相关热词 c# cmd执行 c# 获取文件只读 c#集合求最大值 c#+如何访问堆栈 c# 定义main函数 c# 监听usb相机拍照 0x开头的字符串 c# c# tcp接收超过2k c#多线程与高并发 c#登录token