シリアルポートの切断についてNo.02438
てるる さん 08/09/08 21:13
 
初投稿となります。よろしくお願いします。

シリアルドライバの開発のテストツールとして秀TermEvolutionを
利用させていただいています。

シリアルポートで接続後、「電話を切る」で切断の際にCloseHandle()
が発行されないようです。

原因はこちらで開発中のシリアルドライバにあるのですが、
直前でClearCommError()で期待しているエラー等があって、
CloseHandle()が実行されない場合があるのでしょうか?

場違いかと思いますが、ご回答願います。

[ ]
RE:02438 シリアルポートの切断についてNo.02439
秀まるお2 さん 08/09/09 11:49
 
 こちらで簡単なテストをした限りはCloseHandleしているようです。デバッ
ガーでトレースしてみた限りは、ちゃんと呼び出していました。

 COM1に何も接続してないんですけど、そこに「シリアルポートに接続...」で
接続させてやって、「電話を切る」とやると、電話を切るダイアログボックスが
出て、それが消えた段階でCloseHandleを呼び出しています。

 ClearCommError関数は、受信の処理の中で呼び出すことはありますけど、「電
話を切る」の処理で呼ぶことは無いと思います。

 モデムを接続してテストした訳では無いですけど。

[ ]
RE:02439 シリアルポートの切断についてNo.02440
てるる さん 08/09/09 16:05
 
お忙しいところ、ご確認ありがとうございました。

Closeが実施されない場合、ドライバ側で最後に呼ばれるのが、
IOCTL_SERIAL_GET_COMMSTATUS(ClearCommError)で、CLOSE処理の
先頭のログが出力されなかったので、関係があるのではないかと
思い質問させていただきました。

また、スクリプトを利用して強制的にCloseさせることは
可能でしょうか?
#既存のスクリプトしか利用したことがないため、フォーマット等
#を理解していないため、変な質問ですが・・・


[ ]
RE:02440 シリアルポートの切断についてNo.02441
秀まるお2 さん 08/09/09 16:28
 
 ドライバーのことはまったく分かりませんけど、秀Term以外の他のソフトでも
いろいろ試してみると何か分かかもしれないと思います。

 少なくとも秀Termで、COMポートのファイルハンドルをクローズしてないって
ことは無いはずだと思いますけども…。例えばタスクマネージャの「プロセス」
ページで、「表示・列の選択...」で「ハンドルの数」をONにしておいて見ると、
例えば僕の所では秀Term起動時にはハンドル数が57となっていて、そこから「シ
リアルポートに接続」を実行すると67になって、「電話を切る」とすると、また
57に戻ります。ハンドルは全部Closeされてる証拠になると思います。

> また、スクリプトを利用して強制的にCloseさせることは
> 可能でしょうか?

 hangup文を実行すればいいと思います。

[ ]
RE:02441 シリアルポートの切断についてNo.02442
てるる さん 08/09/09 16:49
 
素早い回答ありがとうございました。

現状としては、ハイパーターミナル、TeraTermで確認したところ、
同様の現象は発生しないことは確認済みです。

ドライバがなんらかの状態で、Closeを受け付けていないのが
原因と思われますので、独力で調べてみます。

[ ]