今日のクリップ

調べもの

「DOS窓からGUIアプリをコマンドライン起動した場合、
 コマンドラインプロセッサの標準入出力ハンドルは、
 継承されない」

 いちど、ダイアログボックスを生成した時点で、標準出力がコンソールから切り離される。
 MFCを使ったコードだと、CWinクラスあたり(かな?)の初期化の段階で、(たぶん)コンソールからの切り離しが行われている。
 MFCライブラリは、システムが/SYSTEM:WINDOWSを既定にしていて、/SYSTEM:CONSOLEを指定するとMFCライブラリのコンストラクタ内でエラーが発生するっぽい。
 Win32APIで直接記述したら、コンソールとダイアログボックスの共存が簡単にできるのにねぇ。

AllocConsole() API

 AllocConsole()で生成したコンソールには、そのままでは標準出力で書き込みができない*1
 その代わりとして、_cprintf()という関数を使え、という話。

これだけではcoutやprintfを使ってこのコンソールに文字を表示する事はできません.
まだ標準出力がこのコンソールに設定されていないからです.

 最近は、デバッグ用コードのライブラリ化(ってほどおおげさなものではないですが)をいろいろと考えている。
 コンソール表示を、客先に提示するモジュールに入れることはないと思うけど、デバッグ出力にはMessageBoxよりコンソールの方が便利だと思うわけで。
 へたにMFCとかを使ったレガシーコードだと、コンソールを表示するにも一苦労ですね。

その為にファイル名を"CONOUT$"としてfreopen関数を呼びます.
この関数はストリームと関連付ける物ですが,ファイル名にコンソールを表す"CONOUT$"が使えます.

freopen("CONOUT$", "w", stdout); //標準出力をコンソールにする
freopen("CONIN$", "r", stdin); //標準入力をコンソールにする

これだけでcoutやprintfを使って,コンソールに文字を表示できるようになります.

 ファイルにもカキコみたい時は、stdin,stdoutあたりを、GetStdHandle() APIでファイルハンドルに変換し、WriteFile() APIでwrite()すればOK。

いずれにしても

 MFCライブラリで作ったアプリをコマンドラインから起動した際に、起動元コンソールにメッセージを表示させるというのはちょっと無理っぽい。
 方法があるのかもしれないけど、ちょっと見つけられなかった。*2

Windows関連

バージョン8.1、8.5のユーザーは9月半ば、バージョン14のユーザーは10月末から第2段階に入る。この段階ではアップグレードしないと、Live Messengerにサインインできなくなる。

ソフトウェアライセンス

 内訳は文書作成ソフト「一太郎」(ジャストシステム)583本、統合ソフト「オフィス」(マイクロソフト)39本、ファイル閲覧ソフト「アクロバット」(アドビシステムズ)29本など。
 無断複製を始めた時期は不明だが、複製ソフトには02年の一太郎が多いため、06年の3市町村合併前からそれぞれ自治体の職場で行われていたとみられる。新しい年代のソフトは一定数量を超えた複製を防止する機能が付いているが、こうした新しい製品でも無断複製がみられるという。
 市の調査によると「パソコンに入っていないからコピーしてほしい」などと職員間でやり取りした例が多く、組織的な行為はなかったとしている。

 PC用ワープロの世界では一太郎の方が先行していたので、いまでも行政では一太郎がそこそこ使われていると聞いています。
 MSが、90年代半ばにEXCELとWORDのバンドル販売を仕掛けたのが、ジャストシステムにとっては痛恨の一撃となりましたね。AMIPROとかOASYSあたりもその煽りを食らった格好ですが。*3

インターネット関連

 IPv6が話題になったのはIT革命ブームの2000年。当時の森喜朗首相が所信表明で取り上げ、翌年の「e―Japan戦略」で「v6移行推進」をうたった。応用技術の実証実験など、これまでの関連予算も計約146億円にのぼる。

 ところが、普及ははかばかしくない。今年3月のネット接続事業者への調査(110社回答)では、v6対応サービス提供済みと予定を合わせて27社。83社は提供予定もなかった。

Security

 長沢氏は,あるソフトウエア・ベンダーでシステム・エンジニアをしている。長沢氏の会社では情報漏洩対策を強化する施策の一環として,リモート・アクセスを制限するセキュリティ・ポリシーを定めていた。しかし,長沢氏をはじめとする社員の間では,「とても現場の業務を理解しているとは思えない」と不満が募っていた。

 その原因は,リモート・アクセスが課長以上の役職者にのみ許可され,長沢氏ら一般社員には一切認められなかったことにある。

 しかし,「リモート・アクセスを許可する基準が実態に合っていなかった」というのがこのケースの問題点だ。一般には役職者に高いアクセス権限を割り当てる(つまりリモート・アクセスも許可する)と考えがちだが,そう単純なものではない。

 「管理職」≠「(セキュリティ)管理者」。
 東京三菱UFJ証券の情報漏えいに関与していたのも、管理職でした。

*1:具体的には、AllocConsole()⇒printf()はできないということ。

*2:コマンドを叩いたコンソールのプロセスを判別して、そのプロセスの標準出力のハンドルを取得すればOK?いずれにしても、コンソールとアプリは別プロセス扱いになるっぽい。

*3:時々、SOURCENEXTなんかの廉価版統合オフィスソフトラインナップの一員になっているのを見て、時代の流れを感じます。