beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1379回复:9

为什么不能创建消息。

楼主#
更多 发布于:2002-07-05 08:49
应用层的设置是
HANDLE hEvent;
HANDLE hDevice;
int length;
hDevice = CreateFile(....)
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if(!DeviceIoControl(hDevice, IOCTL_SECOND_SEND_EVENT,
&hEvent, sizeof(HANDLE), //input
NULL, 0,                 //output
&length,
NULL))
运行时hDevice = 0x0070  hEvent = 0x0078

驱动层的设置:
typedef struct _SECOND_DEVICE_EXTENSION
{
PDEVICE_OBJECT fdo;
PDEVICE_OBJECT NextStackDevice;
UNICODE_STRING ifSymLinkName;
PKEVENT         pEvent;
HANDLE          hEvent;
} SECOND_DEVICE_EXTENSION, *PSECOND_DEVICE_EXTENSION;

PSECOND_DEVICE_EXTENSION pdx =
         (SECOND_DEVICE_EXTENSION*)fdo->DeviceExtension;
   HANDLE ioBuffer;
ioBuffer = Irp->AssociatedIrp.SystemBuffer;
switch( ControlCode)
{
case IOCTL_SECOND_SEND_EVENT:
status =
           ObReferenceObjectByHandle(ioBuffer,0x0002,
     NULL, UserMode,
 (PVOID*)(&pdx->pEvent), NULL);
            }
为什么status的返回值老是STATUS_INVALID_HANDLE。
只要能解决问题,就一定给分。 希望高手赐教!
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-05 09:02
pdx->pEvent这个值是空的,

你需要把你创建的事件句宾付给他
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-05 09:03
怎么做呢?

只要能解决问题,就一定给分。 希望高手赐教!
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-05 09:09
sorry,看错了

pdx->event是个输出参数
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-05 09:15
看看ioBuffer的值是不是你传下来的hevent
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-05 10:09
不是的ioBuffer = 0x000000
怎么回事?

我是在××create()中分配1024个字节的
KIRQL irql;
KeAcquireSpinLock(&BufferLock,&irql);
ULONG NewBufferSize = 1024;
PVOID NewBuffer =
       ExAllocatePool(NonPagedPool,NewBufferSize);
if( NewBuffer == NULL)
{
DebugPrint(\"Can\'t allocate memory!\");
}
else
{
RtlZeroMemory(NewBuffer,NewBufferSize);
Buffer = (PUCHAR)NewBuffer;
BufferSize = NewBufferSize;
}
KeReleaseSpinLock(&BufferLock,irql);

在×××DeviceControl()中
PIO_STACK_LOCATION IrpStack =
                 IoGetCurrentIrpStackLocation(Irp);
NTSTATUS status = STATUS_SUCCESS;
ULONG BytesTxd = 0;
/*-----------------------------------*/
PSECOND_DEVICE_EXTENSION pdx =
         (SECOND_DEVICE_EXTENSION*) fdo->DeviceExtension;
HANDLE ioBuffer;
ioBuffer = Irp->AssociatedIrp.SystemBuffer;
/*-------设定消息--------------------*/

ULONG ControlCode  =
         IrpStack->Parameters.DeviceIoControl.IoControlCode;
ULONG InputLength  =
     IrpStack->Parameters.DeviceIoControl.InputBufferLength;
ULONG OutputLength =
    IrpStack->Parameters.DeviceIoControl.OutputBufferLength;
KIRQL irql;
KeAcquireSpinLock(&BufferLock,&irql);
switch( ControlCode)
{
...........和前面一样了。
}
什么地方不对呢?
只要能解决问题,就一定给分。 希望高手赐教!
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-05 20:13
祝贺你,你是用我的那种方法做好的吗?
Tom_lyd
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-05 20:18
把你的这个
IOCTL_SECOND_SEND_EVENT
定义贴上来看看
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-08 09:06
用tom的方法解决了。
多谢二位高手了。
只要能解决问题,就一定给分。 希望高手赐教!
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2002-10-24 14:46
用tom的方法解决了。
多谢二位高手了。

解决了就铁出来看看嘛,强烈建议,
不少人只发帖子问问题,搞定了就不管了,这样不好吧 :)
游客

返回顶部