Windows

Vistaの画面キャプチャ

http://d.hatena.ne.jp/ryocotan/20071026 真っ黒い画面がキャプチャされる Vistaでの画面キャプチャ GetDC(GetDesktopWindow()) BitBlt(..) ReleaseDC(..) しかし、VistaのAero環境ではこれが使えませんでした。 私が知っているキャプチャの方法としてはGDI…

ATI + NVIDIA

家人がATI RS480チップセットのPCを使っていて、NVIDIAの7900GSベースのビデオカードに交換したら3時間ほどでXPがBoDで死ぬというので見てみたら、0x000000EA(THREAD_STUCK_IN_DEVICE_DRIVER)が発生していた。ドライバのバージョンとか変えてみたけど改善…

tips

Windowsだけでできる――3つのファイル操作ワザ これの二つ目 開いたフォルダの中で、目的のファイルやフォルダを探すとき、キーボード操作だけである程度探し出せる。フォルダを開いた状態で目的のファイル名の先頭の文字を入力。例えば、「B」と入力すれば、…

64bit IDE in Visual C++ 2005 Express Edition

64bit環境下で64bitアプリを開発するには、正式には製品版のVS2005を購入する必要があるが、設定を書き換えればExpress Editionでもある程度は可能だ。 手順は以下の通り。 install Visual C++ 2005 Express Edition install Platform SDK 「Visual C++ 2005…

PE Golf(3)

この半端なコードを、 http://d.hatena.ne.jp/firewood/20061120/1163957029 プロゴルファーが「ありあり」に改良してくれました。さすがですなあ。 http://d.hatena.ne.jp/shinichiro_h/20061202#1165067227自分でも同じことをやろうとして、コード領域はre…

64bit値の32bit変数への代入

warning C4244対策は、LONG_PTRをLONGに暗黙変換すると警告されるというものだが、この種の警告はいくつかあった。 64bit WindowsではLONG_PTRは64bitの整数型すなわち__int64だ。PTRという名前だからポインタかと思ったらそうではなくて、ポインタを保持で…

DbgPrint

DbgPrintで何か出すときに #define MyKdPrint(msg) DbgPrint("header"); DbgPrint msg; みたいなのを使うと、DbgViewで見たときに二行になってしまう。 バッファに一度ためてから出力すればOKで、こんな感じ。#if DBG #define DBG_MSG_HEADER "[MyKernelModu…

PE Golf (2)

メッセージが「Hello,world」(11バイト) GetStdHandle(STD_OUTPUT_HANDLE)を使用せず、7固定(私の手元の環境) WriteFileが固定アドレス だと、PEでは最小と思われる97バイトで出力可能。 nasm用ソース → https://github.com/firewood/test/blob/master/h…

PE Golf (1)

リンカオプション/align:16を追加したら672バイトになった。VC++(GUI)だとその辺が限界っぽい。 /stub:stub.exeみたいので自分のstubを使うと544バイトになった。でもこの状態でもPEヘッダの前に64バイトの謎の領域(Richなんとかってやつ)が入っている。 …

Hello, world!

http://d.hatena.ne.jp/shinichiro_h/20061113 明日SEA & FSIJ 合同フォーラムを聴講しに行く予定です。 最小Hello worldだけど、Windowsでメッセージボックスを出力するものだと何バイトなんだろうか。(Windowsの場合、メッセージボックスの方がコンソール…

_TCHAR / TCHAR について考える 頭の T って、何の略だろう…テキストマクロ _TEXT から来ているのでは。意味合いとしてはinternationalized textまたはgeneric textっぽいけど。TCHARと_TCHAR TCHARと_TCHARのどちらを使うか悩むこともあるんだけど、tchar.h…

Windows on Xen

この前カーネル読書会の帰りに、高橋さんに「Windowsプログラマです」と言ったら、「君、XenのWindowsドライバを書いて高速化したまえ」と言われたのだが、水面下で進んでいた模様。 XenSource、WindowsをサポートしたXenを発表 VMware serverが無料で使える…

新しいコマンドプロンプトを開く

はてなブックマークにこれが入っていた。 Windows XP, 2000, NT4 Command Prompt私がコマンドプロンプトから実行するコマンドで、最も多いのはstartだ。 startは、シェルの「開く」という動作と同等で、 start test.dsw とすればVisual C++が起動するし、 st…

Windows 64-Bit Edition

How to Port Drivers to 64-Bit Windows Windows 64-Bit EditionはLLP64 int、long、DWORDは32bit size_t、ポインタ、LRESULT、WPARAM、LPARAMは64bit 少し注意が必要なのは、intは32bitだが、64bitアラインされること。struct A { int a[2]; }sizeof(struct…

warning C4244対策

これの対処方法を考えてみた。 まだまだ出るぞ、64bit移植性関連トラブル! SetWindowLongPtr APIの第3引数にLONG_PTR型を渡すと警告される!!(1) SetWindowLongPtr専用に型を定義する すぐ思いつく方法。美しくないけど、warningをゼロにする必要があるなら仕…

タスクバーを左に置く人

タスクバーを上に置く人がいるんだけど、私は左に置いて、長めにしている。 マウスカーソルは比較的左上の方にあり、移動量が少ない ウィンドウが増えても位置が変わらないので、選択しやすい(上か下の場合は、幅=位置が変わる) ウィンドウが増えても幅が…

safe mode check in case of WDM

セーフモードで起動しているかどうかドライバ内で判定する方法は、How to determine whether the system is running in Safe Mode from a device driver セーフ モードでデバイス ドライバからシステムが実行されているかどうか確認する方法に書いてあって、…

cross platform development

クロスプラットフォームというか、プラットフォーム依存というか、そういうことをよく扱っているのでメモ。基本的にC/C++。 メモ プリプロセッサは、未定義の識別子を0として扱う。 従って、#if __GNUC__ >= 3はGCC3以上として使えるが、GCC2系かどうかを#if…