关于创建irp的问题

blackmagic 2003-03-28 01:06:02
自己创建一个irp(自定义的)怎么创建啊
是不是象定义消息一样用#define 啊
...全文
59 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackmagic 2003-04-01
  • 打赏
  • 举报
回复
谢谢 jinkaoyan(jinkaoyan)
火焰射手 2003-04-01
  • 打赏
  • 举报
回复
blackmagic,我开发过相关程序,给你一点代码:

ULONG GetDiskGeometry(DISK_GEOMETRY *pDiskGeometry,
struct DEVICE_EXTENSION * devExt)
{
PIRP pIrp;
KEVENT event;
IO_STATUS_BLOCK iostatus;
NTSTATUS ntstatus;

if(!(pIrp=IoBuildDeviceIoControlRequest(IOCTL_DISK_GET_DRIVE_GEOMETRY,
devExt->topDevObj,
NULL,
0,
pDiskGeometry,
sizeof(DISK_GEOMETRY),
FALSE,
&event,
&iostatus))){
return 1;
}
KeInitializeEvent(&event,NotificationEvent,FALSE);
if(IoCallDriver(devExt->topDevObj,pIrp)==STATUS_PENDING)
KeWaitForSingleObject(&event,Executive,KernelMode,FALSE,NULL);
if(!NT_SUCCESS(iostatus.Status)){
return iostatus.Status;
}
return 1;
}
在上面的例子中你可以看到,我使用了IoBuildDeviceIoControlRequest来获取硬盘的结构,比如多少个Head、Track,DISK_GEOMETRY定义在ntdddisk.h中。
一般来说,构造自己的IRP可以使用IoBuildDeviceIoControlRequest或者IoBuildSynchronousFsdRequest,前者用于device control,后者用于读写。
更详细的解释参看ddk的帮助文档。
jinkaoyan 2003-04-01
  • 打赏
  • 举报
回复
what's ifs?
火焰射手 2003-04-01
  • 打赏
  • 举报
回复
呵呵,被扁了,居然没人谢我
blackmagic 2003-03-29
  • 打赏
  • 举报
回复
to :vcmfc(【痛苦的虫虫】)
没有办法啊 我就是很菜啊
我wdm和ifs都是才刚刚开始学
郁闷……………………
你学ifs是怎么学的啊
教教我好嘛
该看什么样的书啊
ifs的书好象太少了
我差不多就只是在看ifs ddk里面的例子
很多都理解不到
好痛苦
谢谢了
vcmfc 2003-03-29
  • 打赏
  • 举报
回复
IoAll之类函数,你要先知道相关IRP的相关参数设置,不然..........



受不了,你太菜了.....................
nustzhua 2003-03-29
  • 打赏
  • 举报
回复
是啊,是啊,要好好学习,不仅要重新创建一个irp,还要填充里面的结构,呵呵。
做驱动和用c编程可不一样啊。一个地方搞不好,嘿嘿,有你好看的。
CDMA_man 2003-03-28
  • 打赏
  • 举报
回复
你是想定义io control码呀,还是要做irp.
定义io control码用#define。
你所谓的自定义IRP是什么意思呀,晕?

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧