WindowsNT・2000ネイティブAPIリファレンスが高すぎる

NtCreateSectionとNtMapViewOfSectionの挙動を記した本が欲しいなあ、と思って
探してみたんだけど…

WindowsNT・2000ネイティブAPIリファレンス―アンドキュメンテッドAPIとNT・2000の内部構造を知る (Windows programming technique)

WindowsNT・2000ネイティブAPIリファレンス―アンドキュメンテッドAPIとNT・2000の内部構造を知る (Windows programming technique)

うはー、またプレミアムかよ!!
どこかに定価で落ちていたら情報求む。

[追記]

テストプログラムを書いて、
NTSTATUSをFormatMessageでエラーメッセージ化したものを見たりしているうちに挙動を理解。
そして、その挙動が自分が期待していたものと違ってガックリ…

USB 印刷サポートを用いてレガシーなパラレルポート双方向通信を行うプログラムをWinwdows Vistaで動かす

自分が昔(10年前!)に作ったプログラムを発掘したので、
そのプログラムを動かすためのメモ。
実機もないPC/AT互換機用コードを書いてちゃんと動かしていた当時の自分、やるな。


アプリケーションの中身は、
パラレルポートに接続した機器との双方向データ転送。
自前でSTROBEの制御をしていて、
(確か普通はレベルトリガなんだけど、相手の機器がエッジトリガだった)
データ受信は標準とは異なりステータスビットを使っている。
(たぶんACK, BUSY, PAPER, ONLINEかな)
元のアプリケーションでは、
LPTx相当のポート(0x0408 + x * 2)に対して直にI/Oを行っていた。
(Windowsで0x0408系に触る方法は Warmcat を参考に)



いろいろ調べた結果、どうやら敗北のようだ。
深追いすればなんとかイケるのかもしれないが、そんな勢いはもうないぞ。

方針

  • パラレルポートを叩くレガシーなプログラムがある
  • すでにパラレルポートのないパソコンを使っている
  • USBプリンタケーブルを活用して状況を打破

USB 印刷サポートの利用方法や、同等のドライバ

お役立ち情報

これを読んで白旗を挙げることにした。


確かに、データシートのベンダ固有命令のところが適当すぎる。
ここらへんもうちょっと情報があるとピン毎の制御・情報取得が出来てよいのだが…


上記ブログにあるようにパラレルポートを増設するPCカードを買うべきか。
日本では以下のページで売っている。

こんどはよくよく調査して、LPTxに直にマップしてくれる機器を買わねばなるまい。
なんとか安く手に入れてやるぜ。
giveioも入れないといけない。


しかし、他のエントリから浮きすぎた。今は反省している

Windowsのcmdでコードページを変更

以下のエントリを読んで、直接関係ないのですが備忘録を。

Windowsのcmdでコードページを変えるコマンドは「CHCP」。
これ、ついこの間まで僕知りませんでした。
cmdで「HELP」とするといろんなコマンドが出てきて面白い。


上記の機能を利用して、こんなこともできる。

Visual Studioでのビットフィールド

gccには-mwindowsの場合-mms-bitfieldsが指定できるらしいけど、
ターゲットがWindowsでない場合はダメっぽい。

`-mms-bitfields'
If set, RECORD_TYPE bit-fields are laid out following the rules of
Microsoft Visual C/C++, namely: (i) a bit-field won't share the
same storage unit with the previous bit-field if their underlying
types have different sizes, and the bit-field will be aligned to
the highest alignment of the underlying types of itself and of the
previous bit-field; (ii) a zero-sized bit-field will affect the
alignment of the whole enclosing structure, even if it is unnamed;
except that (iii) a zero-sized bit-field will be disregarded
unless it follows another bit-field of non-zero size. Currently,
this option is supported on `cygwin' and `mingw32'.

リークをチェック

ずっと前使ったDevPartnerProの中のBoundsCheckerは便利だった。
ま、当時はVC6のSTLでリークでもないものをリークと報告して
ウザかったりもしたのだが。

で、メモリリーク対策を探していたんだけど、
http://piza.2ch.net/tech/kako/978/978705727.html
の16,17
http://piza.2ch.net/log/prog/kako/946/946364904.html
の11
のような方法があるのね。知らんかった。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
にプログラム名(DLL名)でキーを作る。
GlobalFlag(REG_SZ) "0x02000000"
でヒープチェック有効。
PageHeapFlags(REG_SZ) "1"
でさらに厳密なヒープチェック有効。ただしこれはメモリ食う。

この本に詳細が載っているらしい。英語読むのめんどいずら。

Debugging Windows Programs: Strategies, Tools, and Techniques for Visual C++ Programmers (DevelopMentor Series)

Debugging Windows Programs: Strategies, Tools, and Techniques for Visual C++ Programmers (DevelopMentor Series)