WindowsNT・2000ネイティブAPIリファレンスが高すぎる
NtCreateSectionとNtMapViewOfSectionの挙動を記した本が欲しいなあ、と思って
探してみたんだけど…
WindowsNT・2000ネイティブAPIリファレンス―アンドキュメンテッドAPIとNT・2000の内部構造を知る (Windows programming technique)
- 作者: ギャリーネベット,Gary Nebbett,日向俊二
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/06
- メディア: 単行本
- クリック: 2回
- この商品を含むブログ (1件) を見る
どこかに定価で落ちていたら情報求む。
[追記]
テストプログラムを書いて、
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"
でさらに厳密なヒープチェック有効。ただしこれはメモリ食う。
この本に詳細が載っているらしい。英語読むのめんどいずら。
- 作者: Everett N. Woodring, Mike McKay
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2000/08/18
- メディア: ペーパーバック
- クリック: 5回
- この商品を含むブログ (2件) を見る