2009年7月 9日 (木)

livemark問題探求その3

SASFの更新が一段落ついたので、AMDのCodeAnalyzerを使ってみました。

js3250.dll 24.23%
xul.dll 19.60
ntoskrnl.exe 13.46
sqlite32.dll 11.85
mozcrt19.dll 7.54
ntdll.dll 6.25
ntfs.sys 3.34
nspr4.dll 2.69
ahcix64s.sys 1.67
kernel32.dll 1.45

と、こんな感じ。一見js3250.dllとxul.dllがえらい食っているように見えるけど、その中の関数単位だと実はそんなに重いものは無いんだよねぇ。

どっかでUI用のスレッドが何かの処理に時間を食われてるっぽいけど、それがどこなんだかさっぱりだ。

| | コメント (0) | トラックバック (0)

2009年7月 6日 (月)

not implementation

SASF3にて、サーバー名と共有名のコンテキストメニューが表示できないミスを修正。Delphi2009に基本ツール類を移植した際にShell Obj関連を書き直して、該当する部分を結構いじってました。で、その結果PItemIDListの取得に失敗 > 表示できない ということに。

サーバー名に関してはCSIDL_NETWORKをIShellFolderで取得してParseDisplayNameしてやればok。
共有名は\\ServerをBindToObjectでIShellFolderを取得して、ParseDisplayNameでok....なのはVISTAだけでした。2000/XPだとOle Error 0x80004001(=not implementation)。なんでやねん!
SASF2だと普通に取得できる...つまり、相対PItemIDを自前で作成すればokなのね....ということで2000/XPの時だけ従来と同様の処理でPItemIDの取得を行うように。これでどうにか解決。

| | コメント (0) | トラックバック (0)

2009年7月 5日 (日)

本日の獲物

鉄錆廃園 愛蔵版 1・2/華不魅

それぞれビブロス版の1-2、3-4をまとめたもの。でも4巻のおまけが収録されてないな。次巻以降かな?

以下、SASF用メモ。

  • 共有名、サーバーのコンテキストメニューが開けない
  • 自分配下の共有名のローカルパスの取得は可能か?

| | コメント (0) | トラックバック (0)

2009年7月 4日 (土)

まだまだジャンクション

とりあえずHardlink、Junction、SymbolicLinkをSASFで扱えるように作業続行中。
手持ちのbuildでは作成とJunction/SymbolicLinkの解除、削除におけるリンク先の削除の回避までは実装済み。ちゅーか、シンボリックリンクはVISTA以降の上に、作成権限はデフォルトではadminしか持ってないのね。何故そんなことになってんじゃああ! と思ったけど、シンボリックリンクは「相対パス」でも張れるのがいろいろやっかいなのね...。

C:\hoge1\hoge2\hoge3\hoge4\hogehoge\をC:\fuga1\fuga2\fuga3\にコピーしようと思ったとき、hoge2とhoge4がそれぞれJunctionだったりSymbolicLinkだったりしたらそれぞれを展開してからC:\fura1\fura2\fuga3にコピーしても差し支えないパスかどうかの判定を行って云々。で、ここでそれがSymbolicLinkだったりして、且つそれが相対パスだったりした場合、自前でパスの再構築ですか...。

| | コメント (0) | トラックバック (0)

2009年7月 3日 (金)

ジャンクション問題解決

CreateFileの第2引数にFILE_READ_EA(0x0008)を渡せば万事解決でした。あとはDeviceIoControlでリパースデータを読み込んで解析すれば終わり。ふぅ。
ぐぐってもなかなか当たりの情報が出てこなかったんだけど、ふとBingで検索してみたら見つかりましたよ。
http://blog.kalmbach-software.de/2008/02/28/howto-correctly-read-reparse-data-in-vista/
ここに書いてある通りでした。

あ....cmd.exeの逆アセンブラソースをもう一回チェックしたら、ちゃんと第2引数が8になってるじゃないか....。

| | コメント (0) | トラックバック (0)

2009年7月 2日 (木)

やっちまったぜ

「よみきりものの…6」を頼んだつもりで「よみきりもの6」が届いてしまった。
体がへろへろの時に頼むもんじゃないな.....。

| | コメント (0) | トラックバック (0)

ジャンクションの続き

Bakcupだけでは無く、Restore権限も同時に必要なのか...。
とりあえず自前で作成したjunction/symboliclinkに関してはIoDeviceControlで情報を取得できるように。でも相変わらずC:\Documents and SettingsやC:\Users\All Usersはアクセス拒否。
DIR /Aで元情報が表示できてるんだから手段があるはず....が、ぐぐっても情報はでてこない。なので、あまりやりたくなかった最後の手段。cmd.exeの逆アセンブル。....読みづらい....読みたくない....。ざっくり覗いてみた感じでは、cmd.exeもCreateFile~IoDeviceControlの流れで取得してるみたい。ただし、権限取得は行っていない模様。GetFileSecurity,GetSecurityDescriptorOwner,LookupAccountSidあたりを呼び出してからCreateFile等に移行しているようだ。うーむ。

追記
Security関連はdir/q用な気がしてきた...

| | コメント (1) | トラックバック (0)

2009年7月 1日 (水)

ジャンクションとシンボリックリンク

SASFにリクエストがあったので、ちょっと調べてみました。とりあえずファイルについては後回しで、ディレクトリに関してのみですが。

えーと、シンボリックリンクかジャンクションかであること自体はGetFileAttributesで属性取得して、FILE_ATTRIBUTE_REPARSE_POINT bitが立っているかどうかで判断できる、と。で、それがシンボリックリンクかジャンクションか、の判断が....。

hFile:=CreateFile(PWideChar(ATarget),GENERIC_READ, FILE_SHARE_READ OR FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT OR FILE_FLAG_BACKUP_SEMANTICS, 0)

とかやってもアクセス拒否(当然この前にbackup privilageは取得済み)。でもこれで開いてくれないとDeviceIoControlで情報が取得できんし..。コマンドラインのDIR /AでJUNKTION or SYMLINKかってのは表示できてるんだから、方法はあるはずなんだけどなぁ。

追記
SymLinkかJunctionかの判定は簡単でした...orz FindFirst/FindNextでWIN32_FIND_DATAを取得して、dwFileAttributesがFILE_ATTRIBUTE_REPARSE_POINTを含むとき、dwReserved0がどのタイプのreparseなのかを指し示していましたとさ。でもこれだと、リパース先は取得できないなぁ。

| | コメント (1) | トラックバック (0)

DDO(JP)終了

課金は7/31まで。9/30まで無料&終了。
課金プレイヤーを確保できないんじゃあしょうがないわな。米鯖に移住するって人もちらほら居るけど、私はクレジットカードをネット上では絶対使わない主義なので無理。Lv20にはしてみたいけど、またFavor稼いでレイド回して、とか考えるとめんどくさい。
UOに舞い戻ってまったりするかねぇ。

| | コメント (2) | トラックバック (0)

2009年6月30日 (火)

エライ目にあった:(

水曜日からずるずると引きずっていた風邪が月曜になっても治らないので、病院へ行ってきました。
副鼻腔炎と極軽い肺炎を併発してましたよ、ええ。熱が常に36.5℃~37℃しかでなくて、非常に中途半端感が強かったんだけど、結構悪化してたのね。
もらった抗生剤が結構効いて、今はだいぶ楽になりました。やれやれ。

Livemark問題の探求のために、VS2008で時間単位のプロファイリングをするにはどうすればいいのか調べてみました。.....えーと、professionalにはついて無くて、team suiteと買えと。たかがこの問題のためだけに30万も出せるかっ!!!
と、ふと思い出したことが。たしかteteさんがAMDが開発者向けに分析ツールをリリースしている、というのを書いてあるのをみて、AMD Developer centerのIDを取ってdownloadしたまま放置していたなぁ。
てなことで、CodeAnalystを入手してインストール。おお、ちゃんと時間単位のプロファイリングがあるよ!

問題はこのツール、まったく使ったことがないので使い方から覚えなきゃいけないってのがね。まぁ、のんびりやろう。

| | コメント (0) | トラックバック (0)

«livemark問題探求その2