wangxdong
驱动小牛
驱动小牛
  • 注册日期2002-07-08
  • 最后登录2003-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2100回复:4

驱动中发IOCTL给串口,为什么串口就一直被占用?

楼主#
更多 发布于:2002-07-17 14:03
我在驱动中发IOCTL码到串口,只有第一次有反应,后来串口就一直被占用了,需重启机器才行,不知何故?我的代码如下:NTSTATUS BaudDevice::BAUD_IOCTL_800_Handler(KIrp I)
{
NTSTATUS status = STATUS_SUCCESS;
t << \"Entering audDevice::BAUD_IOCTL_800_Handler, \" << I << EOL;
I.Information() = 0;
ULONG Unit = 0;
KUnitizedName uname(L\"\\\\Device\\\\Serial\", Unit);
KLowerDevice* pSerialPort = new (NonPagedPool)
KLowerDevice((PWSTR)uname,FILE_ALL_ACCESS);
if (pSerialPort && NT_SUCCESS(pSerialPort->ConstructorStatus()))
{
SERIAL_BAUD_RATE GetBaud; // global static
//------------------------------------------
KIrp I =
KIrp::Allocate(pSerialPort->StackRequirement());
I.MajorFunction(NEXT) = IRP_MJ_DEVICE_CONTROL;
I.MinorFunction(NEXT) = 0;
I.IoctlCode(NEXT) = IOCTL_SERIAL_GET_BAUD_RATE;
I.IoctlInputBufferSize(NEXT) = 0;
I.IoctlOutputBufferSize(NEXT) =
sizeof(SERIAL_BAUD_RATE);
I.IoctlBuffer() = &GetBaud;
I.SetCompletionRoutine( DeviceIoCompleteRoutine,NULL,TRUE,TRUE,TRUE );

status = pSerialPort->Call(I);

}


t << \"I.Information()= \" << I.Information();

return status;
}
请多多指教!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-07-17 18:11
你的完成例程呢?
wangxdong
驱动小牛
驱动小牛
  • 注册日期2002-07-08
  • 最后登录2003-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-17 18:27
完成例程:
NTSTATUS DeviceIoCompleteRoutine (
PDEVICE_OBJECT DeviceObject,
PIRP pIrp,
PVOID Context)
{
// the baud rate is in global GetBaud.
KIrp::Deallocate(pIrp);

return STATUS_MORE_PROCESSING_REQUIRED;
}
我发现是因为pSerialPort用new生成后,没有用delete删除,所以串口一直占用,下次再想生成也不行了。但是 把delete pSerialPort直接放到最后会出错。
我现在把new的部分放到设备的构造函数中,delete部分放到析构函数中,勉强可以。但这也不是解决办法,因为必须驱动卸载后串口才能释放!!
怎么才能做到每次控制时new,控制完了delete而不出错呢?请指点!给分!!
请多多指教!
chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-17 19:44
driverstudio写的驱动实在看不懂,对不起了。
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-07-18 11:16
很难看懂,用猜的了。
什么时候IoComplelteRequest呢?
游客

返回顶部