terrace
驱动牛犊
驱动牛犊
  • 注册日期2004-02-11
  • 最后登录2005-12-04
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1343回复:7

请问用ioctl如何从驱动返回一个数?

楼主#
更多 发布于:2004-07-20 16:13
实在不好意思问这么简单的问题,但是初写NT下的驱动(用Driver
Works),好多都不明白。我只需要将驱动程序中的一个UINT
类型的变量的值传给应用程序,使用DeviceIoctl如何处理?

就是下面这段代码如何填充?应用程序如何得到这个变量的值?

VOID NetBrakeDevice::Serial_NETBRAKE_IOCTL_GET_LOC_Handler(KIrp I)
{
NTSTATUS status = STATUS_SUCCESS;

t << "Entering NetBrakeDevice::Serial_NETBRAKE_IOCTL_GET_LOC_Handler, " << I << EOL;
I.Information() = 0;
I.Status() = status;
NextIrp(I);
}
myswin
驱动小牛
驱动小牛
  • 注册日期2003-10-13
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-20 16:38
看看DS的例子啊~~~
应用程序可以去读,(direct /buffer/neither)
=========== D =========== R =========== I =========== V =========== E ---------抵制日货-------
hellangel
驱动中牛
驱动中牛
  • 注册日期2004-02-16
  • 最后登录2016-04-19
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望236点
  • 贡献值0点
  • 好评度205点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2004-07-20 17:38
VOID NetBrakeDevice::Serial_NETBRAKE_IOCTL_GET_LOC_Handler(KIrp I)
{
NTSTATUS status = STATUS_SUCCESS;

t << "Entering NetBrakeDevice::Serial_NETBRAKE_IOCTL_GET_LOC_Handler, " << I << EOL;
I.Information() = sizeof(UINT);
UINT *P=I.IOCTLBuffer();
*P=(UINT)100;
I.Status() = status;
NextIrp(I);
}
春眠不觉晓,处处闻啼鸟。 夜来风雨声,花落知多少?
terrace
驱动牛犊
驱动牛犊
  • 注册日期2004-02-11
  • 最后登录2005-12-04
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-20 18:38
非常感谢楼上大虾的指点,再问一下,那么应用程序怎么得到驱动程序传递的值?如应用程序通过以下调用

DeviceIoControl(hDevice, IOCTL_NetBrake_GET_LOC,
  NULL, // no input
  0,
 outbuffer,
 sizeof(outbuffer),
 & realSize,
  NULL // not overlapped I/O
 );
传递的值在哪个参数里?
ruyili9803
驱动牛犊
驱动牛犊
  • 注册日期2004-06-07
  • 最后登录2005-09-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-21 08:06
在outbuffer里面
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2004-07-21 08:56
不好好看书,真服了你,嘿嘿.....
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
hellangel
驱动中牛
驱动中牛
  • 注册日期2004-02-16
  • 最后登录2016-04-19
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望236点
  • 贡献值0点
  • 好评度205点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2004-07-21 12:06
非常感谢楼上大虾的指点,再问一下,那么应用程序怎么得到驱动程序传递的值?如应用程序通过以下调用

DeviceIoControl(hDevice, IOCTL_NetBrake_GET_LOC,
  NULL, // no input
  0,
 outbuffer,
 sizeof(outbuffer),
 & realSize,
  NULL // not overlapped I/O
 );
传递的值在哪个参数里?
 


在 UINT outbuffer;
春眠不觉晓,处处闻啼鸟。 夜来风雨声,花落知多少?
terrace
驱动牛犊
驱动牛犊
  • 注册日期2004-02-11
  • 最后登录2005-12-04
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-21 19:10
多谢,楼上各位大虾的帮助。
终于明白是怎么回事。
我也知道自己问的有些弱智,不过没办法,任务紧,没功夫看书。
斑竹教训的很对,我以后一定多看些书,否则问题问简单了自己汗颜。呵呵,再次感谢各位!
游客

返回顶部