Antoine.st 2011-02

2011-02-27

iOS SDK

iPhone SDK じゃなかった、Xcode 3.2.5 and iOS SDK 4.2 を ここ からダウンロード ( 要登録 )。3.52 GB ということで、かなーり大きいです。あとはとくに気にすることなくインストールと。他のアプリと違って、アイコンが勝手にできたりはしないので、/Developer/Application/ の下にある Xcode.app を起動っと。とりあえず、エイリアスを作って Dock にでも突っ込んでおこう。これが正しい手順かどうか知りませんけど。

apple 謹製の開発者リソースとしては、この辺 があるっぽい。まぁ。予想どおり英語です。そんなもんですよね。

SDK に加えて IDE ( Xcode ) も無償で提供されてるというとこで、なかなかいい感じです。Objective-C って使ったことないので、どんなものか楽しみ楽しみ。

といったところでインストールが終わったので、さくっと Hello World なアプリを作ってみると。へー、不思議な補完ですが、思ったよりエディタも使いやすい感じ。で、作ってみてさっそく実行。おお、動いた。つか、iPhone エミュレータ軽いな。

なかなか楽しい。エディタのキーバインドをできるだけ Emacs に近い感じにしてみるべくがんばってみたんですが、よく使うやつでは C-/ とか C-x C-s とか C-Space とかが設定できない...。設定ファイルから変更できる、って感じの情報があったので、今度やってみようっと。


2011-02-23

Network Drive - 3

前回の考察では、『Winlogon.exe が怪しい』ってところまで行きました。で、今日仕事をしてるときに、『監査すればええやん』ということに気づいたところ。

ネットワークドライブの設定は、レジストリの『HKEY_CURRENT_USER\Network\Z』とかに保存されてます。ということで、この辺 を見ながら監査を設定。ローカルセキュリティポリシーで『オブジェクトアクセス』の監査を有効にして、いったんログオフ&ログオン。

はい、ばっちりでした。Winlogon.exe が上記のレジストリを読み込んでます。というところで、『Winlogon.exe がネットワークドライブの設定を復元してる』という結論で終了、と。おつかれさまでした。


2011-02-21

Network Drive - 2

昨日時点の結論は、『ユーザープロファイルのロードだけでは、ネットワークドライブのマッピングは行われない』ってところでした。続報。

ほんとにロードだけではダメなのか? って部分に関しては、LogonUser() なり LoadUserProfile() なりをしてみればわかります。というところで、さくっと簡単なサンプルを作って試してみると、やっぱりダメ。おそらく、IIS からワーカープロセスが起動される際、LogonUser() なり CreateProcessWithLogonW() が呼ばれることになるんだと思いますが、その辺を踏まえて考えると『Web アプリケーションでは、自動的な再接続は行われない』ってところに落ち着きそうです。

で、前回からの疑問だった『じゃ、誰が再接続してるのよ?』って件ですが、やっぱりログオンを仕切ってる Winlogon.exe なんだろうなと。dumpbin /IMPORTS してみると、非公開関数の WNetRestoreConnection2W() ( Windows XP の場合 )、WNetRestoreAllConnectionsW() ( Windows 7 の場合 ) を使ってる雰囲気です。ちょっとサーバー製品では確認できてませんが、たぶん、似た感じかと。

この辺の API、非公開なので詳細はわかりませんが、WNetRestoreConnectionW() 関数 とかを見る限り、ドライブマッピングを復元する機能を提供しているそうで ( ドライブを指定しない場合、カレントユーザーのレジストリ情報を見て全部のネットワークドライブに再接続する、なんてことも書いてあります )。なので、ログオン時にユーザーのプロファイルをロード、その後、この辺の API を使ってマッピングを復元、etc...。という感じの動作だと推測します。

ちなみに、Explorer はこの辺のレジストリ情報を見てアイコンを表示しているものと思われますが、そのタイミングでは接続は復元されてません。ドライブアイコンをダブルクリックするなりして、再度開くタイミングで接続しに行っているようです ( コストを考えれば当然かも )。

この動作は、ドライブをマッピングしたユーザーに runas する ( cmd.exe とか ) -> そのタイミングでは接続できない -> Explorer 開く ( アイコンあり ) -> ドライブダブルクリック -> 接続 OK -> コマンドプロンプトでも接続できるようになる、って動作から類推できると思います。

てな感じで、自分としては、それなりに納得できる結論に至りました。Winlogon.exe をゴニョゴニョしちゃえばいいのかもですが、API フックはできそうにないし、リモートデバッグ環境作るのも面倒 ( やったことないんで、Winlogon.exe のデバッグができるのかは知りません ) だし、ほどほどのところでやめときます。


2011-02-20

Network Drive

IIS 上の Web アプリケーションでドライブにマッピングされた共有フォルダ ( Z: みたいなやつ ) が利用できない、というのは、ある意味 FAQ として知られています。で、その対処策としては、UNC ( \\Server\Share ) 形式でアクセスしましょう、ってことに。

あんまり原因には興味がないわたしにとっては、それはそれでいいんですが、『.NET Framework ではネットワークドライブが使えない』とか、無茶なことを言ってるブログもある始末なので、ちょっと調べてみました。

とりあえずの結論は、『ドライブマッピングは、ユーザー固有の情報だから』というところ。つまり、Web アプリケーションの実行ユーザーである『Network Service』と割り当てを行った誰か、たとえば、『Administrator』が違うユーザーなので、Z: ドライブにアクセスできないわけです。

ただ、これだと、Web アプリケーションの実行ユーザーを変えたとき、には説明がつきません。そこで出てくるのがプロファイル、です。ネットワークドライブの割り当てとかを行ってくれる WNetAddConnection3() 関数 には、CONNECT_UPDATE_PROFILE なんて定数が用意されています。これは、プロファイルを更新することで、再度ログオンを行ったときに再接続されるようにするためのフラグです。

ログオン時にプロファイルが読み込まれることは、『ネットワークドライブの割り当て』を行った際に、『ログオン時に再接続する』チェックボックスがあることからもわかります。ちなみに、『再接続するのは Explorer のお仕事か?』と思ったら、そうでもないようです。レジストリを変更してシェルを『cmd.exe』にしたりして試してみましたが、ログオンするとドライブが自動的にマッピングされました。

話は Web アプリケーションに戻りますが、ワーカープロセスの実行ユーザー、すなわち、アプリケーションプールのセキュリティアカウントを変更した場合、そのユーザー ( たとえば、Administrator ) で実行されます。ところが、その状態を Process Explorer とかで見てみると、『Default User』な環境変数だったりすることがわかります。となると、たぶん、ユーザープロファイルはロードされていないんでしょうね、といったあたり ( なお、CreateProcessAsUser() とかのリファレンスを見るとわかりますが、プロファイルと環境変数は別物です )。

ま、これはわかります。アプリケーションプールのセキュリティアカウントを変更する理由は、基本的にそのユーザーのセキュリティコンテキストで動作させたい、からです。権限のないフォルダとかにアクセスするとか。なので、ユーザープロファイルまでは気にしてなくても別におかしな動作じゃないです。

ただ... プロファイルがロードされればいい、ってものではないようです。たとえば、runas コマンドを利用して ( 別ユーザーから ) Administrator ユーザーとして cmd.exe を起動します。このとき、デフォルトでは /profile オプションが指定されている動作となり、Administrator のユーザープロファイルがロードされます。しかし、この状態でも Z: ドライブにはアクセスできません。

おそらく、ユーザープロファイルのロードとネットワークドライブの再接続はまた別なんでしょうけど、誰がやってるのか、まではわかりませんでした...。Explorer、だとわかりやすい話なんだけどなぁ...。

思ったより長くなったので、今回はこの辺までにして、またちょっと調べます。ぺこり。


2011-02-15

MacBook Air

『Android ですよね!』とか書いておきながら、気づいたら、MacBook Air をポチっとしてました。考えてみたら、Android 端末持ってないし。で、届きました。うすーい、ちいさーい。でも、おもーい。という、よくわからない作り。

思えば、漢字 Talk 7 の頃以来の Mac です。OS X になってから、ちょっとだけ使ったことはありますが。なんつーか、Windows に慣れた体にはまだまだ使いづらいです。とりあえず、Carbon Emacs をインストールして、なんとかメモ書き程度はできるようになりました。

あとは、開発環境の準備か・・・。平日は体力不足気味なので、週末にでもがんばろう。


2011-02-13

Windows Phone 7

この辺 のニュースによりますと、Nokia が Windows Phone を採用、とのことで。これで、iPhone、Android、Windows Phone な三国志が始まるんだったらなかなか面白そうです。BlackBerry がどうするんだろう? ってのはありますけど。

開発者としてはどうしましょうね? とりあえず、無償の Android かユーザーが多そうな iPhone あたりをやりつつ、日本語環境が出そろってきたら Windows Phone とかでしょうか。面倒なんで、メインの機能を Web ( クラウド ) 側に置いておいて、ってのが、もしかすると一番楽だったりするかもしれません。

サーバーサイドよりクライアントサイド好きなわたしとしては、いろいろできそうな Android かなぁ。Eclipse で開発できますしね。


2011-02-03

64 bit ODBC Driver for Access

長いこと、Access 用の ODBC ドライバ ( 64 ビット版 ) って存在しないものだと思っていたんですが、ひょんなことから、発見。『Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント』ということで、ダウンロードできます。

これの 64 ビット版の方に、Access / dBase / Excel / Text な ODBC ドライバが含まれてました。サーバーサイドの利用については非サポートっぽかったり、いろいろ制約はあるみたいですが、ないよりある方がいい、ってことで。