TigerDing
驱动牛犊
驱动牛犊
  • 注册日期2002-04-02
  • 最后登录2002-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2490回复:10

ZwReadFile and ZwWriteFile调用冲突

楼主#
更多 发布于:2002-10-28 15:08
使用ZwCreateFile打开串行口,再开两个系统线程,一个调ZwReadFile,一个调ZwWriteFile.问题是一个线程调用的函数不返回,除非another线程结束.How to Solve this problem?
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-28 18:06
是不是ZwCreateFile的参数的不对?
Tom_lyd
TigerDing
驱动牛犊
驱动牛犊
  • 注册日期2002-04-02
  • 最后登录2002-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-29 08:14
参数如下
status = ZwCreateFile(&m_pRealPort,
           FILE_READ_DATA|FILE_WRITE_DATA,//SYNCHRONIZE|
           &objectAttributes,
&IoStatus,
0,
           FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ|FILE_SHARE_WRITE,
FILE_OPEN,
FILE_NON_DIRECTORY_FILE |   FILE_SYNCHRONOUS_IO_NONALERT,
 NULL,    
 0 );
请Tom老大帮我瞧瞧,多谢!!!
yymrhxf
驱动牛犊
驱动牛犊
  • 注册日期2002-08-07
  • 最后登录2011-10-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-10-29 08:29
FILE_SYNCHRONOUS_IO_NONALERT?

有问题吧
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-29 09:11
照yymrhxf说的,把FILE_SYNCHRONOUS_IO_NONALERT参数选项去掉试试
Tom_lyd
TigerDing
驱动牛犊
驱动牛犊
  • 注册日期2002-04-02
  • 最后登录2002-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-10-30 16:16
把FILE_SYNCHRONOUS_IO_NONALERT参数选项去掉后,status=ZwReadFile(m_pComPort,NULL,NULL,NULL,&IoStatus,Buf,256,NULL,NULL)函数会返回参数不正确.哪位老大再点拨一下,答对每人20分.
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-10-30 22:50
你用ZwCreateFile打开的时候用异步方式,在ZwReadFile和ZwWriteFile的时候有几个异步的参数不能为NULL,这样或许会好些。
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-10-31 09:31
status = ZwCreateFile( &ntFileHandle, //output file handle
SYNCHRONIZE|FILE_ANY_ACCESS,
&ObjectAttributes,
&IoStatus, //output status of result
NULL, //pallocate size
0, //file attributes
FILE_SHARE_READ|FILE_SHARE_WRITE, //share access
FILE_OPEN, //create disposition
FILE_SYNCHRONOUS_IO_NONALERT|FILE_DIRECTORY_FILE, //create options
NULL, //EA buffer
0 );
Tom_lyd
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-10-31 09:36
POBJECT_ATTRIBUTES objectAttributes;
IO_STATUS_BLOCK     IoStatus;
InitializeObjectAttributes(...
)  ;

HANDLE ntFileHandle;
ZwCreateFile( &ntFileHandle, SYNCHRONIZE | FILE_ANY_ACCESS, &objectAttributes, &IoStatus,, NULL, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT|FILE_NON_DIRECTORY_FILE,NULL,0 );
试试
Tom_lyd
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-02-01 14:23
应该可以
Ideas for life!
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2005-02-01 17:45
记得在CHRIS CANT的书上看到,对ZWWRITEFILE的调用和ZWCREATEFILE必须在相同的线程环境中,根据你的描述,你开了二个线程,但用一个CREATEFILE创建二个COM口,是不是这个原因。试一试分别在这二个线程中CREATE然后READ、WRITE。
一起交流,共同提高!
游客

返回顶部