<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>プログラミング：Win32</title><link>http://blogs.wankuma.com/shannon/category/1215.aspx</link><description>プログラミング：Win32</description><managingEditor>αετος / aetos</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>αετος / aetos</dc:creator><title>東京大学（略）プログラム</title><link>http://blogs.wankuma.com/shannon/archive/2009/01/23/166678.aspx</link><pubDate>Fri, 23 Jan 2009 14:05:00 GMT</pubDate><guid>http://blogs.wankuma.com/shannon/archive/2009/01/23/166678.aspx</guid><wfw:comment>http://blogs.wankuma.com/shannon/comments/166678.aspx</wfw:comment><comments>http://blogs.wankuma.com/shannon/archive/2009/01/23/166678.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/shannon/comments/commentRss/166678.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/shannon/services/trackbacks/166678.aspx</trackback:ping><description>&lt;p&gt;検索するとよく引っかかる。&lt;br&gt;結構貴重な資料が公開されているように思う。&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aetosfolia.jp/blog/post/2009/01/23/e69db1e4baace5a4a7e5ada6efbc88e795a5efbc89e38395e383ade382afe383a9e383a0.aspx"&gt;続きを読む&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/shannon/aggbug/166678.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>αετος</dc:creator><title>連載：メッセージ リソース(2)</title><link>http://blogs.wankuma.com/shannon/archive/2008/09/29/157719.aspx</link><pubDate>Mon, 29 Sep 2008 12:39:00 GMT</pubDate><guid>http://blogs.wankuma.com/shannon/archive/2008/09/29/157719.aspx</guid><wfw:comment>http://blogs.wankuma.com/shannon/comments/157719.aspx</wfw:comment><comments>http://blogs.wankuma.com/shannon/archive/2008/09/29/157719.aspx#Feedback</comments><slash:comments>982</slash:comments><wfw:commentRss>http://blogs.wankuma.com/shannon/comments/commentRss/157719.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/shannon/services/trackbacks/157719.aspx</trackback:ping><description>&lt;p&gt;ちょっと間が空いてしまいましたが、連載第２回です。&lt;br&gt;今回は、前回作ったメッセージ リソースを使うコードを紹介します。&lt;br&gt;前回までで、以下のようなプロジェクトができているはずです。&lt;/p&gt; &lt;p&gt;&lt;a href="http://shannon.wankuma.com/images/blog/2008/2_AB77/image.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="198" alt="image" src="http://shannon.wankuma.com/images/blog/2008/2_AB77/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;これに、ソース ファイルを追加しましょう。&lt;br&gt;ファイル名は MsgRes.cpp とでもしておきます。&lt;/p&gt; &lt;p&gt;で、いきなりですが中身を公開します。&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e5f6e2f3-0969-43aa-8957-8d2cae5d512b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c"&gt;
#include &amp;lt;windows.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;locale.h&amp;gt;
#include &amp;lt;tchar.h&amp;gt;

#include "MsgRes.h"

int _tmain()
{
	setlocale( LC_CTYPE, "japanese" );

	LPTSTR msg = NULL;
	DWORD result = FormatMessage(
		FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL, MSGID_SAMPLE_0001, MAKELANGID( LANG_JAPANESE, SUBLANG_DEFAULT ),
		reinterpret_cast&amp;lt; LPTSTR &amp;gt;( &amp;amp;msg ), 0, NULL );

	if( result != 0 )
	{
		_putts( msg );
		LocalFree( msg );
	}

	setlocale( LC_CTYPE, "english" );

	result = FormatMessage(
		FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL, MSGID_SAMPLE_0001, MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT ),
		reinterpret_cast&amp;lt; LPTSTR &amp;gt;( &amp;amp;msg ), 0, NULL );

	if( result != 0 )
	{
		_putts( msg );
		LocalFree( msg );
	}

	return 0;
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;はい。みんな大好き FormatMessage です。&lt;br&gt;GetLastError が返すエラーコードを文字列化するのにしか使ったことがない方も少なくないと思います。&lt;br&gt;今回は、第一引数に FORMAT_MESSAGE_FROM_HMODULE を指定し、第二引数に NULL を指定しています。&lt;br&gt;この場合、呼び出し側プロセスの EXE モジュールのハンドルを指定したのと同じことになります。&lt;/p&gt;
&lt;p&gt;MSGID_SAMPLE_0001 は、前回 MsgRes.mc で定義し、メッセージ コンパイラによって MsgRes.h に書かれているメッセージ識別子です。&lt;br&gt;続いて言語識別子を指定しています。これは MsgRes.mc の LanguageNames で指定した値です。&lt;br&gt;言語識別子を変えることで、同じメッセージ識別子でも違うメッセージが取得できているのが分かると思います。&lt;/p&gt;
&lt;p&gt;本題は以上です。以下、ちょっとしたオマケ。&lt;/p&gt;
&lt;p&gt;メッセージ コンパイラが生成した MsgRes.rc を開いてみると、以下のような、なんともそっけないコードになっています。&lt;/p&gt;&lt;pre class="code"&gt;LANGUAGE 0x11,0x1
1 11 &lt;span style="color: #a31515"&gt;"MSG_JA.bin"
&lt;/span&gt;LANGUAGE 0x9,0x1
1 11 &lt;span style="color: #a31515"&gt;"MSG_EN.bin"&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;これでは何だかわからん！　という方のために、もう少し読みやすく書き換えてみます。&lt;br&gt;ただし、このファイルはもう一度メッセージ コンパイラを実行すれば上書きされてしまうので、別のリソース ファイルを作りましょう。&lt;br&gt;MsgRes.rc を一旦プロジェクトから除外し、新しいリソース スクリプトを MsgRes2.rc とでも名づけて作成しましょう。&lt;br&gt;そうしたら、リソース ビューで MsgRes2.rc を右クリックして「リソース ファイルのインクルード」を選択します。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://shannon.wankuma.com/images/blog/2008/2_AB77/image_3.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="237" alt="image" src="http://shannon.wankuma.com/images/blog/2008/2_AB77/image_thumb_3.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;出てきたダイアログに、以下のように入力しましょう。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://shannon.wankuma.com/images/blog/2008/2_AB77/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="215" alt="image" src="http://shannon.wankuma.com/images/blog/2008/2_AB77/image_thumb_4.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="code"&gt;LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
1 MESSAGETABLE &lt;span style="color: #a31515"&gt;"MSG_JA.bin"

&lt;/span&gt;LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
1 MESSAGETABLE &lt;span style="color: #a31515"&gt;"MSG_EN.bin"&lt;font face="Trebuchet MS" color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;これで、言語も、メッセージ リソースだということもわかりやすくなりますね。&lt;/p&gt;
&lt;p&gt;ただし、リソース コンパイラは MESSAGETABLE というキーワードを理解しますが、Visual C++ のリソースエディタは理解しません。&lt;br&gt;というかそれ以前に、このダイアログで入力した内容は、リソース ビューに表示されません。&lt;br&gt;このダイアログを使わずに、MsgRes2.rc を直接書き換えても、リソースの種類は "11" と表示されるだけです。ちょっとさみしいですね。&lt;/p&gt;
&lt;p&gt;次回は、挿入シーケンスの使い方と、エラー コードに対するメッセージを定義する方法を解説します。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/shannon/aggbug/157719.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>αετος</dc:creator><title>連載：メッセージ リソース(1)</title><link>http://blogs.wankuma.com/shannon/archive/2008/09/19/157005.aspx</link><pubDate>Fri, 19 Sep 2008 16:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/shannon/archive/2008/09/19/157005.aspx</guid><wfw:comment>http://blogs.wankuma.com/shannon/comments/157005.aspx</wfw:comment><comments>http://blogs.wankuma.com/shannon/archive/2008/09/19/157005.aspx#Feedback</comments><slash:comments>185</slash:comments><wfw:commentRss>http://blogs.wankuma.com/shannon/comments/commentRss/157005.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/shannon/services/trackbacks/157005.aspx</trackback:ping><description>&lt;p&gt;何回か、メッセージ リソースというものを取り上げます。 &lt;br&gt;メッセージ リソースとは、アイコンやバージョン情報と同様、exe ファイルや dll ファイルに持たせることができるリソースの一種ですが、Visual Studio のリソース エディタで作成できないため、あまり知られていないものではないかと思われます。&lt;/p&gt; &lt;p&gt;メッセージ リソースを作成するためには、まず、そのソースとなるメッセージ定義ファイルを書きます。 &lt;br&gt;これを、Windows SDK に付属しているメッセージ コンパイラ（mc.exe）でコンパイルしてバイナリ形式に変換し、それをリソースに埋め込みます。 &lt;br&gt;なお、Visual C++ 2008 Express には、メッセージ コンパイラが付属していませんので、別途 Windows SDK をインストールする必要があります。&lt;/p&gt; &lt;p&gt;メッセージ定義ファイルの書き方や、メッセージ コンパイラの使い方は、MSDN Library の &lt;a href="http://msdn.microsoft.com/en-us/library/aa385633.aspx"&gt;Message Compiler&lt;/a&gt; のところに書かれています。 &lt;br&gt;MSDN では、イベント ログ関係のページとして書かれているところからもわかるように、メッセージ リソースの主な用途はイベント ログです。 &lt;br&gt;そのため、この連載でもイベント ログについてとりあげますが、それは連載の終盤になる予定です。 &lt;br&gt;その前に、次回以降で、イベント ログ以外の使い方を紹介します。&lt;/p&gt; &lt;p&gt;では、早速作ってみましょう。&lt;/p&gt; &lt;p&gt;まず、Visual Studio を立ち上げ、VC++ で新しい Win32 コンソール アプリケーション プロジェクトを作成します。 &lt;br&gt;ウィザードでは「空のプロジェクト」を選びましょう。 &lt;br&gt;&lt;a href="http://shannon.wankuma.com/images/blog/2008/1_CD52/image.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="157" alt="image" src="http://shannon.wankuma.com/images/blog/2008/1_CD52/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;次に、ソリューション エクスプローラのリソース フォルダに、メッセージ定義ファイルを追加しましょう。 &lt;br&gt;カテゴリには出てこないので、とりあえずテキスト ファイルを選んでおきます。 &lt;br&gt;拡張子は何でもいいですが、ここでは .mc としました。 &lt;br&gt;&amp;nbsp;&lt;a href="http://shannon.wankuma.com/images/blog/2008/1_CD52/image_3.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="127" alt="image" src="http://shannon.wankuma.com/images/blog/2008/1_CD52/image_thumb_3.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;そのファイルを開いて、以下のような内容を書き込みます（VC++ 上では色分けはされません）。&lt;/p&gt;&lt;pre&gt;&lt;font color="#008000"&gt;;// コメントはヘッダー ファイルに反映されるので、C++ 形式で書く必要があります。
&lt;/font&gt;
&lt;font color="#0000ff"&gt;MessageIdTypedef&lt;/font&gt;=DWORD

&lt;font color="#0000ff"&gt;LanguageNames&lt;/font&gt;=(
	English=0x0409:MSG_EN
	Japanese=0x0411:MSG_JA
)

&lt;font color="#0000ff"&gt;MessageId&lt;/font&gt;=0x0001
&lt;font color="#0000ff"&gt;Severity&lt;/font&gt;=Informational
&lt;font color="#0000ff"&gt;Facility&lt;/font&gt;=Application
&lt;font color="#0000ff"&gt;SymbolicName&lt;/font&gt;=MSGID_SAMPLE_0001
&lt;font color="#0000ff"&gt;Language&lt;/font&gt;=English
This is Message Resource Sample.
.
&lt;font color="#0000ff"&gt;Language&lt;/font&gt;=Japanese
メッセージ リソースのサンプルです。
.&lt;/pre&gt;
&lt;p&gt;次に、ファイルのプロパティを開いて、ビルド方法を設定します。 &lt;br&gt;Visual Studio はメッセージ リソースをビルドする方法を知らないので、自分でコンパイラの設定をしてやる必要があります。 &lt;br&gt;とりあえず、以下のようにすればよいでしょう。&amp;nbsp; &lt;br&gt;&lt;a href="http://shannon.wankuma.com/images/blog/2008/1_CD52/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="138" alt="image" src="http://shannon.wankuma.com/images/blog/2008/1_CD52/image_thumb_4.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;設定したら、ソリューション エクスプローラでこのファイルを右クリックして「コンパイル」を選びます。 &lt;br&gt;終わったら、同じフォルダに、MsgRes.h、MsgRes.rc、MSG_EN.bin、MSG_JA.bin の4つのファイルができていることを確認してください。 &lt;br&gt;これらのファイルを、プロジェクトに追加しておきましょう。MsgRes.h はヘッダー ファイル フォルダに、それ以外はリソース ファイル フォルダでいいでしょう。&lt;/p&gt;
&lt;p&gt;それでは、先ほど記述したファイルの内容を解説します。&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;コメント 
&lt;dd&gt;.mc ファイルに書いたコメントは、ヘッダー ファイルに反映されます。 &lt;br&gt;MsgRes.h を開いてみると、一番上に、.mc ファイルに書いたコメントがあります。 &lt;br&gt;そのため、.mc ファイル中でも、それを意識してコメントを書く必要があります。 
&lt;dt&gt;MessageIdTypedef 
&lt;dd&gt;MsgRes.h を見ると、 &lt;pre&gt;&lt;font color="#0000ff"&gt;#define&lt;/font&gt; MSGID_SAMPLE_0001 ((DWORD)0x40000001L)&lt;/pre&gt;という記述があるかと思います。 &lt;br&gt;この (DWORD) が、MessageIdTypedef=DWORD で指定したものです。 &lt;br&gt;MessageIdTypedef=WORD とすれば、生成されるコードは &lt;pre&gt;&lt;font color="#0000ff"&gt;#define&lt;/font&gt; MSGID_SAMPLE_0001 ((WORD)0x40000001L)&lt;/pre&gt;になります。 
&lt;dt&gt;LanguageNames 
&lt;dd&gt;言語名を定義し、言語識別子とファイル名を関連付けます。 &lt;br&gt;言語名は、その後のメッセージ定義で使用しています。 &lt;br&gt;ファイル名は、メッセージ コンパイラが生成する .bin ファイルの名前になります。 
&lt;dt&gt;MessageId 
&lt;dd&gt;メッセージの識別子です。 &lt;br&gt;Severity と Facility を上位ワード、この識別子を下位ワードとしたものが、実際のメッセージ識別子になります。 &lt;br&gt;その値は、MsgRes.h に書き込まれます。 &lt;br&gt;以降、メッセージ識別子に関する話が出てきますが、MsgRes.h に構造が書かれているので、それを見ながらだとわかりやすいと思います。 
&lt;dt&gt;Severity 
&lt;dd&gt;メッセージの重大さです。 &lt;br&gt;この値は、メッセージ識別子の上位 2 ビットに反映されます。 &lt;br&gt;標準では、成功=0、情報=1、警告=2、エラー=3 となっていますが、SeverityNames ステートメントを使うことで、自分で名前を定義することもできます（2 ビットしかないため、値は 0 ～ 3 しか使えません）。 &lt;br&gt;今回は、メッセージ識別子の上位 2 ビットが 01 なので、0x4000～ になっているわけです。 
&lt;dt&gt;Facility 
&lt;dd&gt;メッセージのファシリティ値（日本語ではどう言えばいいんでしょう？）を指定します。 &lt;br&gt;この値は、メッセージ識別子のビット 16 ～ 27 に書き込まれます。 &lt;br&gt;標準では、Application=0 のようです。他に何が定義されているのかはわかりません（MSDN の記述は間違えているようです）。 &lt;br&gt;FacilityNames ステートメントを使うことで、自分で名前を定義することができます。こちらは、任意の 12 ビットの値を使えます（たぶん）。 
&lt;dt&gt;SymbolicName 
&lt;dd&gt;MsgRes.h に定義される値の名前です。 
&lt;dt&gt;Language 
&lt;dd&gt;LanguageNames で定義した言語名です。 
&lt;dt&gt;メッセージ本体 
&lt;dd&gt;メッセージの本体を記述します。 &lt;br&gt;最後に、ピリオドだけの行を置くと、メッセージ本体の終端を意味します（ピリオドはメッセージ本体に含まれません）。 &lt;br&gt;複数行書くことも可能です。&lt;/dd&gt;&lt;/dl&gt;
&lt;p&gt;次回は、このメッセージを使う方法です。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/shannon/aggbug/157005.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>シャノン</dc:creator><title>WTL 日本語 アプリケーション ウィザード</title><link>http://blogs.wankuma.com/shannon/archive/2008/09/09/155914.aspx</link><pubDate>Tue, 09 Sep 2008 00:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/shannon/archive/2008/09/09/155914.aspx</guid><wfw:comment>http://blogs.wankuma.com/shannon/comments/155914.aspx</wfw:comment><comments>http://blogs.wankuma.com/shannon/archive/2008/09/09/155914.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/shannon/comments/commentRss/155914.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/shannon/services/trackbacks/155914.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://www.usefullcode.net/2007/01/wtl_806536.html"&gt;UsefullCode.net&lt;/a&gt; で配布されているものをベースに、最新の build 7161 への対応ほか、ちょこちょこ改造したもの。&lt;br&gt;よければ使って＆おかしなところがあったら突っ込んで。&lt;/p&gt; &lt;p&gt;&lt;a href="http://cid-e324cfc6fe7b549e.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/wtl8.rar"&gt;http://cid-e324cfc6fe7b549e.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/wtl8.rar&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/shannon/aggbug/155914.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>シャノン</dc:creator><title>NTネイティブパス名をMS-DOSパス名に変換するには？</title><link>http://blogs.wankuma.com/shannon/archive/2008/08/05/151797.aspx</link><pubDate>Tue, 05 Aug 2008 13:15:00 GMT</pubDate><guid>http://blogs.wankuma.com/shannon/archive/2008/08/05/151797.aspx</guid><wfw:comment>http://blogs.wankuma.com/shannon/comments/151797.aspx</wfw:comment><comments>http://blogs.wankuma.com/shannon/archive/2008/08/05/151797.aspx#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://blogs.wankuma.com/shannon/comments/commentRss/151797.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/shannon/services/trackbacks/151797.aspx</trackback:ping><description>&lt;p&gt;本投稿は備忘録であり、ご回答は &lt;a href="http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200808/08080009.txt"&gt;NTネイティブパス名をMS-DOSパス名に変換するには？&lt;/a&gt; で募っています。&lt;br&gt;マルチポストとなるのを避けるため、こちらには技術的な内容をご回答されませんよう、お願いいたします。&lt;/p&gt; &lt;p&gt;以下本文。&lt;/p&gt; &lt;p&gt;NT パス名、例えば \Device\HarddiskVolume1\... を C:\... に変換するにはどうすればよいのだろう？&lt;/p&gt; &lt;p&gt;ローカルドライブ下にあるパスについては、GetLogicalDriveStrings でドライブ名の一覧を取得し、QueryDosDevice でドライブ名を NT デバイス形式に変換し、前方一致で確認すればできそう。&lt;br&gt;が、ネットワークドライブや、ドライブレターが割り当てられていない UNC パスについてはどうすれば？&lt;/p&gt; &lt;p&gt;ローカルドライブの場合、例えば C: について QueryDosDevice で問い合わせれば \Device\HarddiskVolume1 という文字列のみが返ってくるため、前方一致で判別できる。&lt;br&gt;しかし、例えば、N: が \\Server\Path にマップされている場合、ネットワークドライブ内にあるファイルの NT パスは \Device\LanmanRedirector\Server\Path だが、N: に対して QueryDosDevice を実行すると \Device\LanmanRedirector\;N:謎の数字 \Server\Path のような文字列が返ってきてしまい、前方一致できない。&lt;br&gt;また、QueryDosDevice に UNC を渡しても、対応する NT パスは取得できない。&lt;br&gt;NT パスが \Device\LanmanRedirector\Server\Path となっていれば、それは \\Server\Path を指すのだと解釈してしまうのも、ドライバか何かの実装が異なれば、 LanmanRedirector 以外の名前がありそうで怖い。&lt;/p&gt; &lt;p&gt;RtlNtPathNameToDosPathName という関数もあるが、Undocumented なので、できれば使いたくない。&lt;/p&gt; &lt;p&gt;マウントポイント等の場合にどうなるかは要調査。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/shannon/aggbug/151797.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>シャノン</dc:creator><title>追試、情報求む</title><link>http://blogs.wankuma.com/shannon/archive/2008/07/25/150320.aspx</link><pubDate>Fri, 25 Jul 2008 13:44:00 GMT</pubDate><guid>http://blogs.wankuma.com/shannon/archive/2008/07/25/150320.aspx</guid><wfw:comment>http://blogs.wankuma.com/shannon/comments/150320.aspx</wfw:comment><comments>http://blogs.wankuma.com/shannon/archive/2008/07/25/150320.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/shannon/comments/commentRss/150320.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/shannon/services/trackbacks/150320.aspx</trackback:ping><description>&lt;P&gt;Windows API の &lt;A href="http://msdn.microsoft.com/en-us/library/aa364937.aspx"&gt;GetDiskFreeSpaceEx&lt;/A&gt;&amp;nbsp;について MSDN で調べると、&lt;Q&gt; If per-user quotas are being used, this value may be less than the total number of free bytes on a disk. &lt;/Q&gt;とあることから、この関数はディスク クォータに対応していると考えられます。&lt;BR&gt;しかし、Windows 2003 R2 から導入された &lt;A href="http://www.atmarkit.co.jp/fwin2k/special/2003r2_02/2003r2_02_02.html"&gt;File Server Resource Manager&lt;/A&gt;&amp;nbsp;を利用して設定したクォータによって制限された容量は、この関数では取得できない（GetDiskFreeSpaceEx は FSRM に対応していない）という情報を耳にしました。&lt;/P&gt;
&lt;P&gt;当方、2003 R2 または 2008 の環境がないため、試すことができません。&lt;BR&gt;どなたか、この情報は本当なのか、もし本当であれば、それは仕様として Microsoft からドキュメント化されているか、また、回避策はあるのか等、ご存知でしたら教えてください。&lt;/P&gt;
&lt;P&gt;MSDN には &lt;A href="http://msdn.microsoft.com/en-us/library/bb972746.aspx"&gt;FSRM の API&lt;/A&gt; がドキュメント化されていますが、&lt;Q&gt;The FSRM API is available starting with Windows Server 2008.&lt;/Q&gt; と書かれています。これは本当なのでしょうか？ 2003 R2 の FSRM の情報を取得する API は無いということでしょうか？&lt;/P&gt;
&lt;P&gt;また、このような透過的でないクォータ サービスが存在しうるということは、第２、第３の FSRM（Microsoft 製でないものも含む）があり得るということですので、由々しき事態だと思います。&lt;BR&gt;もし本当ならば、これは Microsoft に改善してもらわねばならないと思うのですが、そういったフィードバックはどこに提出すればよいのでしょうか？&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/shannon/aggbug/150320.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>シャノン</dc:creator><title>翻訳版でないかなー</title><link>http://blogs.wankuma.com/shannon/archive/2008/07/18/149551.aspx</link><pubDate>Fri, 18 Jul 2008 13:24:00 GMT</pubDate><guid>http://blogs.wankuma.com/shannon/archive/2008/07/18/149551.aspx</guid><wfw:comment>http://blogs.wankuma.com/shannon/comments/149551.aspx</wfw:comment><comments>http://blogs.wankuma.com/shannon/archive/2008/07/18/149551.aspx#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://blogs.wankuma.com/shannon/comments/commentRss/149551.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/shannon/services/trackbacks/149551.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://www.amazon.co.jp/dp/0735625301/"&gt;Windows Internals 5th Edition&lt;/A&gt;&lt;BR&gt;「インサイド Windows」の第5版。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.amazon.co.jp/dp/0735624240/"&gt;Windows Via C/C++&lt;/A&gt;&lt;BR&gt;たぶん「Advanced Windows」の第5版。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/shannon/aggbug/149551.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>シャノン</dc:creator><title>Visual BasicユーザーのためのWindowsプログラミング入門</title><link>http://blogs.wankuma.com/shannon/archive/2008/06/06/141882.aspx</link><pubDate>Fri, 06 Jun 2008 09:34:00 GMT</pubDate><guid>http://blogs.wankuma.com/shannon/archive/2008/06/06/141882.aspx</guid><wfw:comment>http://blogs.wankuma.com/shannon/comments/141882.aspx</wfw:comment><comments>http://blogs.wankuma.com/shannon/archive/2008/06/06/141882.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/shannon/comments/commentRss/141882.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/shannon/services/trackbacks/141882.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://www.bookcyber.net/basket/detail.cgi?key=4822216810"&gt;Visual BasicユーザーのためのWindowsプログラミング入門&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.bookcyber.net/"&gt;電脳書房&lt;/A&gt;で見つけた古雑誌。思わずぽちっと購入。&lt;/P&gt;
&lt;P&gt;これはですね、タイトルに補足を入れるならば、「Visual Basic（6.0）ユーザーのためのWindows（API）プログラミング入門」です。&lt;BR&gt;冒頭から、「言語としては VB6 を使いつつ、VB6 のオブジェクトや関数は一切使わない Windows プログラム」が出てきます。もちろん、RegisterClassEx に始まり、CreateWindowEx やら GetMessage やらが出てくるあれです。&lt;BR&gt;ただひとつ、Command 関数だけは使われていたので、自分で GetCommandLine 関数に直したりしましたけど。&lt;/P&gt;
&lt;P&gt;俺が始めて「Windowsプログラミング」をやった記念すべき一冊です。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/shannon/aggbug/141882.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>シャノン</dc:creator><title>リンクいろいろ</title><link>http://blogs.wankuma.com/shannon/archive/2008/05/27/139629.aspx</link><pubDate>Tue, 27 May 2008 16:09:00 GMT</pubDate><guid>http://blogs.wankuma.com/shannon/archive/2008/05/27/139629.aspx</guid><wfw:comment>http://blogs.wankuma.com/shannon/comments/139629.aspx</wfw:comment><comments>http://blogs.wankuma.com/shannon/archive/2008/05/27/139629.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/shannon/comments/commentRss/139629.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/shannon/services/trackbacks/139629.aspx</trackback:ping><description>&lt;UL&gt;
&lt;LI&gt;ハードリンク 
&lt;LI&gt;リパースポイント 
&lt;LI&gt;シンボリックリンク 
&lt;LI&gt;ジャンクション
&lt;LI&gt;マウントポイント
&lt;LI&gt;subst&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;どう違うのー？&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/shannon/aggbug/139629.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>シャノン</dc:creator><title>VC++での、リンカオプションの自動設定</title><link>http://blogs.wankuma.com/shannon/archive/2008/03/24/129373.aspx</link><pubDate>Mon, 24 Mar 2008 16:56:00 GMT</pubDate><guid>http://blogs.wankuma.com/shannon/archive/2008/03/24/129373.aspx</guid><wfw:comment>http://blogs.wankuma.com/shannon/comments/129373.aspx</wfw:comment><comments>http://blogs.wankuma.com/shannon/archive/2008/03/24/129373.aspx#Feedback</comments><slash:comments>106</slash:comments><wfw:commentRss>http://blogs.wankuma.com/shannon/comments/commentRss/129373.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/shannon/services/trackbacks/129373.aspx</trackback:ping><description>&lt;P&gt;例えば&lt;FONT color=#0000ff&gt;、#define&lt;/FONT&gt; _WIN32_WINNT 0x0600 とします。&lt;BR&gt;これは、Windows Vista 以降で実装された機能を使うことの宣言であって、できたプログラムは Vista 以降でしか動かなくなります。&lt;BR&gt;この宣言をしたにもかかわらず、Vista 以降固有の機能を使っていない場合、動くこともありますが、動かないものと思っておくべきです。&lt;/P&gt;
&lt;P&gt;で、WinMain あたりで &lt;A href="http://msdn2.microsoft.com/en-us/library/ms725492.aspx"&gt;VerifyVersionInfo&lt;/A&gt; で Vista 以降かどうか判定して蹴るという方法もあるのですが、もっと楽な手もあります。&lt;BR&gt;それは、リンカオプションの &lt;A href="http://msdn2.microsoft.com/en-us/library/fcc1zstk.aspx"&gt;/SUBSYSTEM&lt;/A&gt; を利用するというものです。&lt;BR&gt;例えばこれを /SUBSYSTEM:WINDOWS,6.0 とすると、Windows 5.x では、実行しようとしたときに「有効な Win32 イメージではありません」と怒られます。&lt;/P&gt;
&lt;P&gt;んで、ちょっと前に挑戦して、うまく行かなかったこと。&lt;BR&gt;WINVER や _WIN32_WINNT シンボルの値に応じて、リンカオプションを自動的に指定できないものかと思うわけです。&lt;BR&gt;コードからリンカオプションを指定するには、&lt;FONT color=#0000ff&gt;#pragma comment&lt;/FONT&gt;( linker, "/SUBSYSTEM:WINDOWS,6.0" ) とやればいいはずです。&lt;BR&gt;この "6.0" の部分を、プリプロセッサシンボルから自動生成できないかなーというわけなのですが。&lt;/P&gt;
&lt;P&gt;どなたかご存知ありません？&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/shannon/aggbug/129373.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>