Windows SDK 6.0 → 6.1 更新されたファイル一覧

Windows SDK 6.1 (build 6001-16659-070916-1443) と,Windows SDK 6.0 を比較してみました.
軽く感想ですが,

  • コーディング規約に変更があったらしく,あちこちにあった無名の共用体に名前が付いています.大量の修正ファイル数の一因はこれ.
  • 一方で新規追加のファイル数が半端じゃない.
    • 大半のファイルは "OLE DB interface definition" と書かれている
    • wds で始まるファイルは Windows Desktop Search 関係?
  • Direct3D 10.1 関係の更新も取り込まれつつある模様
  • さりげなく mscoree.idl が更新されている.(恐らく .NET CLR 2.0 SP1 相当のアップデート)
  • DWMAPI の変更はなさげ.
  • TSF 関係は今のところ変更なしの模様.TSFApp サンプルのバグも直ってませんでした.

Windows SDK 6.0 にのみ存在するファイル

  • CertAdm.Idl
  • CertBase.Idl
  • CertCli.Idl
  • CertEnc.Idl
  • Certif.Idl
  • CertView.Idl
  • ComDef.h
  • dvec.h
  • fvec.h
  • ivec.h
  • pre64pra.h

Windows SDK 6.1 (6001-16659-070916-1443) にのみ存在するファイル

  • access.idl
  • adc.h
  • adoctint.h
  • adodef.h
  • adogpool.h
  • adoguids.h
  • adoid.h
  • adojet.h
  • adomd.h
  • altidx.idl
  • alttab.idl
  • asynot.idl
  • asysta.idl
  • binres.idl
  • chprst.idl
  • clinf2.idl
  • cmdbas.idl
  • cmdcst.idl
  • cmdpre.idl
  • cmdprp.idl
  • cmdprst.idl
  • cmdstrm.idl
  • cmdtre.idl
  • cmdtree.idl
  • cmdtxt.idl
  • cmdval.idl
  • cmdwpr.idl
  • colinf.idl
  • colrst.idl
  • crtrow.idl
  • cvttyp.idl
  • davclnt.h
  • dbccmd.idl
  • dbcses.idl
  • dbdsad.idl
  • dbinfo.idl
  • dbinit.idl
  • dbprop.idl
  • dbrtpr.idl
  • dbs.idl
  • dbscmd.idl
  • dbsdep.idl
  • dbseci.idl
  • dbsrst.idl
  • errlup.idl
  • errrec.idl
  • fsrm.h
  • fsrm.idl
  • fsrmenums.h
  • fsrmenums.idl
  • fsrmerr.h
  • fsrmquota.h
  • fsrmquota.idl
  • fsrmreports.h
  • fsrmreports.idl
  • fsrmscreen.h
  • fsrmscreen.idl
  • fsrmtlb.h
  • functiondiscoveryproviderhelper.h
  • getdts.idl
  • getrow.idl
  • getses.idl
  • getsrw.idl
  • icrsint.h
  • IDLMULTI.H
  • inddef.idl
  • mddset.idl
  • mdfind.idl
  • mdrrst.idl
  • msdadc.h
  • msdaguid.h
  • msdaora.h
  • msdaosp.h
  • msdaosp.idl
  • msdasc.h
  • msdasql.h
  • msdasql_interfaces.h
  • msdatsrc.h
  • msdatsrc.idl
  • msdshape.h
  • msremote.h
  • mulres.idl
  • nsemail.h
  • objactnl.idl
  • odbcss.h
  • OleAcc.idl
  • oledb.idl
  • oledbdep.idl
  • oledbnew.idl
  • opnrst.idl
  • parrst.idl
  • persist.h
  • playlist.h
  • prvmon.idl
  • qrybas.idl
  • readdt.idl
  • regprv.idl
  • row.idl
  • rowchg.idl
  • rowinf.idl
  • rowpos.idl
  • rowpsc.idl
  • rstasn.idl
  • rstbas.idl
  • rstbmrk.idl
  • rstcei.idl
  • rstchg.idl
  • rstchpmb.idl
  • rstcpr.idl
  • rstcridx.idl
  • rstfnd.idl
  • rstidn.idl
  • rstind.idl
  • rstinf.idl
  • rstkys.idl
  • rstlkr.idl
  • rstloc.idl
  • rstnot.idl
  • rstnra.idl
  • rstnwr.idl
  • rstnxr.idl
  • rstres.idl
  • rstrfres.idl
  • rstscr.idl
  • rstupd.idl
  • rstvw.idl
  • rstwpr.idl
  • rstwta.idl
  • rstwtn.idl
  • rstwtr.idl
  • rstxsc.idl
  • rwschg.idl
  • scpops.idl
  • scserver.h
  • sesprp.idl
  • seurinfo.idl
  • simpdata.idl
  • sqleri.idl
  • srcrst.idl
  • stgprop.h
  • t2embapi.h
  • tabdef.idl
  • tabren.idl
  • tbdefcnt.idl
  • tblcrt.idl
  • tlbref.h
  • tlbref.idl
  • transact.idl
  • trnjoi.idl
  • trnlcl.idl
  • trnobj.idl
  • truadmin.idl
  • trugpadm.idl
  • tssbx.h
  • tssbx.idl
  • tssbx_i.c
  • tsvirtualchannels.h
  • tsvirtualchannels.idl
  • txcoord.idl
  • txfw32.h
  • vwchp.idl
  • vwflt.idl
  • vwrst.idl
  • vwsrt.idl
  • wdscpmsg.h
  • wdsmcerr.h
  • wdstci.h
  • wdstpdi.h
  • wdstptmgmt.h
  • wdstptmgmt.idl
  • wdstptmgmt_i.c
  • wdstptmgmtmsg.h
  • windowssearcherrors.h
  • wpdmtpextensions.h
  • wpdshellextension.h

Windows SDK 6.1 (6001-16659-070916-1443) で更新があったファイル

  • AccCtrl.h
  • AclUI.h
  • ActivScp.h
  • ActivScp.Idl
  • ahadmin.h
  • ahadmin.idl
  • ahadmin_i.c
  • audioenginebaseapo.idl
  • audiosessiontypes.h
  • bcrypt.h
  • BluetoothAPIs.h
  • CDOSys.h
  • CDOSysErr.h
  • CeLib.h
  • CertAdm.h
  • CertBCli.Idl
  • CertCli.h
  • certenroll.h
  • CertExit.h
  • CertExit.Idl
  • CertSrv.h
  • cfg.h
  • CGuid.h
  • clfs.h
  • clfsmgmt.h
  • clfsmgmtw32.h
  • ClusApi.h
  • CommCtrl.h
  • commctrl.inl
  • CommCtrl.rh
  • commdlg.inl
  • common.ver
  • corhlpr.cpp
  • corhlpr.h
  • Cpl.h
  • credentialprovider.idl
  • credssp.h
  • cryptuiapi.h
  • cscobj.h
  • d3d10.h
  • d3d10effect.h
  • d3d10shader.h
  • DhcpCSdk.h
  • dhcpsapi.h
  • Dlgs.h
  • DocObj.h
  • DocObj.Idl
  • DSClient.h
  • dxgi.h
  • EapHostError.h
  • eaphostpeerconfigapis.h
  • EapHostPeerTypes.h
  • eapmethodauthenticatorapis.h
  • eapmethodpeerapis.h
  • eapmethodtypes.h
  • eappapis.h
  • eaptypes.h
  • esent.h
  • EvColl.h
  • evntcons.h
  • Evntrace.h
  • ExDisp.h
  • fontsub.h
  • functiondiscovery.idl
  • functiondiscoveryapi.idl
  • functiondiscoverycategories.h
  • functiondiscoveryconstraints.h
  • functiondiscoverykeys.h
  • functiondiscoverynotification.h
  • functiondiscoveryprovider.idl
  • functiondiscoveryserviceids.h
  • fwpmtypes.h
  • fwpmtypes.idl
  • fwpmu.h
  • fwpsu.h
  • fwptypes.h
  • fwptypes.idl
  • GdiPlusEnums.h
  • GdiPlusFlat.h
  • http.h
  • httpcach.h
  • HttpExt.h
  • httpserv.h
  • httptrace.h
  • Iadmw.h
  • Icm.h
  • IcmpAPI.h
  • iepmapi.h
  • ifdef.h
  • IIScnfg.h
  • iketypes.h
  • iketypes.idl
  • imapi2fs.h
  • imapi2fs.idl
  • imnxport.idl
  • infocard.h
  • intsafe.h
  • IPExport.h
  • IPHlpApi.h
  • ipmib.h
  • Iprtrmib.h
  • ipsectypes.h
  • ipsectypes.idl
  • IPTypes.h
  • journal.h
  • journal_i.c
  • Ks.h
  • ksamd64.inc
  • KsMedia.h
  • ktmtypes.h
  • ktmw32.h
  • kxamd64.inc
  • LMDFS.h
  • LMErrlog.h
  • LMJoin.h
  • LMServer.h
  • LMUse.h
  • macamd64.inc
  • Mfidl.idl
  • MMSystem.h
  • Mprapi.h
  • Mq.h
  • msado15.h
  • msado15.idl
  • MSClus.h
  • MSClus.Idl
  • mscoree.h
  • MSCOREE.IDL
  • msdrm.h
  • msdrmdefs.h
  • msdrmerror.h
  • Msi.h
  • MsiDefs.h
  • msinkaut.h
  • msinkaut15.h
  • msinkaut15_i.c
  • msinkaut_i.c
  • MSTcpIP.h
  • MsXml.h
  • MsXml2.h
  • msxml6.h
  • mxdc.h
  • napcertrelyingparty.h
  • napcertrelyingparty.idl
  • napcommon.h
  • napcommon.idl
  • napenforcementclient.h
  • napenforcementclient.idl
  • naperror.h
  • napmanagement.h
  • napmanagement.idl
  • napprotocol.h
  • napprotocol.idl
  • napsystemhealthagent.h
  • napsystemhealthagent.idl
  • naptypes.h
  • naptypes.idl
  • naputil.h
  • Nb30.h
  • ncrypt.h
  • ndr64types.h
  • newdev.h
  • NtDDNdis.h
  • ntddscsi.h
  • NtDsAPI.h
  • NtLdap.h
  • NTSecAPI.h
  • ntstatus.h
  • ntverp.h
  • OAIdl.h
  • OAIdl.Idl
  • ObjBase.h
  • ObjIdl.h
  • ObjIdl.Idl
  • Ole2.h
  • OleAuto.h
  • oledb.h
  • p2p.h
  • packoff.h
  • packon.h
  • pciprop.h
  • Pdh.h
  • PopPack.h
  • PortableDevice.h
  • powrprof.h
  • prnasnot.h
  • PropIdl.h
  • PropIdl.Idl
  • propkey.h
  • propsys.h
  • propsys.idl
  • propvarutil.h
  • prsht.inl
  • PshPack1.h
  • PshPack2.h
  • PshPack4.h
  • PshPack8.h
  • Ras.h
  • Raseapif.h
  • RassHost.h
  • Ratings.h
  • rectypes.h
  • RegStr.h
  • Resapi.h
  • RpcAsync.h
  • RpcDce.h
  • RpcDceP.h
  • RpcNdr.h
  • RpcNtErr.h
  • RTSCOM.h
  • RTSCOM_i.c
  • SCardErr.h
  • schannel.h
  • Sddl.h
  • sdkddkver.h
  • sdoias.h
  • sdoias.idl
  • SecExt.h
  • SetupAPI.h
  • shdeprecated.h
  • ShellAPI.h
  • ShlGuid.h
  • ShlObj.h
  • Shlwapi.h
  • ShObjIdl.h
  • ShObjIdl.idl
  • ShTypes.h
  • ShTypes.Idl
  • slerror.h
  • slpublic.h
  • SmtpEvent.Idl
  • specstrings.h
  • specstrings_adt.h
  • specstrings_strict.h
  • specstrings_undef.h
  • sqloledb.h
  • StrAlign.h
  • strsafe.h
  • SubAuth.h
  • SyncMgr.h
  • SyncMgr.idl
  • tbs.h
  • tcpmib.h
  • Tmschema.h
  • tpcshrd.h
  • umbus.h
  • urlacc.idl
  • UrlMon.h
  • UrlMon.Idl
  • vds.h
  • vdserr.h
  • vsmgmt.h
  • vss.h
  • vsserror.h
  • WdsClientApi.h
  • wdspxe.h
  • Win32.Mak
  • WinBase.h
  • WinBase.Inl
  • wincred.h
  • WinCrypt.h
  • windot11.h
  • Windows.h
  • WinEFS.h
  • WinError.h
  • WinGDI.h
  • winhttp.h
  • WinIoCtl.h
  • WinNT.h
  • WinReg.h
  • WinSCard.h
  • WinSmCrd.h
  • WinSpool.h
  • winternl.h
  • WinUser.h
  • WinUser.Inl
  • wlanapi.h
  • wlclient.h
  • Wmistr.h
  • wmsdefs.h
  • wmsserver.h
  • wmsserver.idl
  • WowNT32.h
  • ws2ipdef.h
  • WS2tcpip.h
  • wsdns.h
  • wsdtypes.h
  • WtsApi32.h
  • WTypes.h
  • WTypes.Idl
  • wuapi.h
  • wuapi.idl
  • xmllite.h
  • xoleHlp.h

Windows Vista SP1 beta1

Windows Vista SP1 beta1 をクリーンインストールしてみました.以下軽く気づき.


FeedbackID 231316 のバグ技とは?

Desktop Window Manager の Direct3D Rendering Redirection のバグで,バックバッファフォーマット A8R8G8B8 を使ってウィンドウの per pixel alpha を設定できてしまうというもの.これだけ聞くと機能の一種に聞こえますが,実際には DwmExtendFrameIntoClientArea を使いつつ「透明感を有効にする」がオンの時に,意図せずそういう動作をするという単なるバグです.

こういうエフェクトが可能でした.

Shell_NotifyIcon のタイムアウトと UI の安定性

SP1の導入でより安定性が増すWindows Vista

(中略)

例えば、Windows UIの安定性は格段に上がった。具体的に言えば、Windowsではタスクバーの右側に“通知領域”と呼ばれる動作中のツールなどの状態を表示する領域があるが、Vista SP1導入前はアイコンが出たり出なかったりという問題がよく発生していた。これはHDD上に何らかのエラーがある時によく発生し、スキャンディスクをかけると解決することが多いのだが、SP1をインストールした後にはそうした問題がほとんど発生しなくなった。また、全体としての性能は明らかに向上しており、以前よりも快適に利用できるようになった。

(訂正)Shell_NotifyIcon タイムアウト時の挙動は,FALSE (失敗) が返ってきたときに GetLastError で原因を知るというのが正しいです.本記事の最初のバージョンでは Shell_NotifyIcon の戻り値で判断するように書かれていましたので,修正してあります.
この「出たり出なかったり」という挙動ですが,多くの場合はアプリケーションが Shell_NotifyIcon API のエラーを正しく取り扱わないことで発生します *1
Shell_NotifyIcon は,SendMessageTimeout を利用してシェルウィンドウにメッセージを送信します.SendMessageTimeout は同期呼び出し型の API なので,受け手のシェルウィンドウのメッセージポンプが応答を返すまで待機します.SendMessage API と同じく,この間は新着送信メッセージへの応答以外の動作は行いません.もし,Shell_NotifyIcon がタイムアウトを設定していなければどうなるでしょうか?
もしタイムアウトがなければ,シェルがハングしていたり,高負荷でシェルが十分な CPU 時間を得られている状況での Shell_NotifyIcon API の使用は死を意味します.シェルが応答を返さないため,通知領域にアイコンを設定しようとしたアプリケーションのスレッドまで道連れになってハングアップすることになります.
実際には,シェルが忙しいときに Shell_NotifyIcon を呼び出すと,数秒程度で失敗を示す FALSE が返り,アプリケーションは制御を取り戻すことができます.ここで GetLastError を呼び出して,エラーコード 1460 (timeout) をチェックすることで,タイムアウトによって Shell_NotifyIcon が失敗したことが分かります.
ここでアプリケーションがタイムアウトエラー発生時に再度アイコンの登録を行わないと,「アイコンが出なかったり」ということが起こりえます.Windows Vista の起動直後にログインしたときは,ディスクアクセスの競合によってタイムアウトが発生しやすい状況に陥ります.スタートアップアプリケーションが影響を受けやすいのはこのためです.
もっとも,Vista で Shell_NotifyIcon タイムアウト後に再度設定しようとしたら今度はエラー 87 (parameters incorrect) が返ってきた という人もいるので,実際に Vista での取り扱いに何か問題があったのかもしれません.
SendMessageTimeout は,相手にメッセージが届いていないのか,それとも相手には届いたものの返信を受け取り損ねたかを区別できないので,Shell_NotifyIcon によるアイコン設定手続きの途中まで成功している可能性を考慮する必要があります.推奨されるリトライ方法については,KB418138 通知領域にアイコンが登録されないことがある を参照してください.



余談ですが,記事中“タスクトレイ”ではなく正式名称の“通知領域”*2 を使っているあたりはさすが.

*1:[http://support.microsoft.com/kb/835874/ja:title=KB835874 通知領域のアイコンが消えてしまうことがある], [http://support.microsoft.com/kb/418138/JA/:title=KB418138 通知領域にアイコンが登録されないことがある]

*2:[http://blogs.msdn.com/oldnewthing/archive/2003/09/10/54831.aspx:title=Why do some people call the taskbar the "tray"?]

GiB Age

スルーしようと思ってましたが,ちょっとだけ.

マルチコアを生かしたい気持ちはわかる

Vistaの開発に携わった人たちがバックグラウンド・タスクを増やした狙いは理解できる。2001年に米Intelは「ハイパースレッディング」を発表し,物理的には一つのCPUでも,アプリケーション・ソフトからは2CPUに見えるようにして処理性能の向上を図った。2005年には一つのCPUパッケージに二つのCPUコアを搭載する「デュアルコア」CPUがパソコン向けに供給されるようになった。価格はまだ高いが,四つのCPUコアを搭載する「クアッドコア」CPUも登場してきている。「マルチコア」CPU(2個以上のコアを持つCPUの総称)が今後の主流になることは間違いないだろう。

そこで困ったのがソフトウエア(プログラム)の開発者だ。プログラムは基本的に逐次処理(AをやってBをやってCをやる…)で記述する。逐次処理のプログラムでは,コアが増えてもそれを使いこなすことができない。並列処理を行うプログラムを書けばいいのだが,正しい結果が得られなかったり,処理時間が短くならなかったりといった問題が生じやすく,かなり難しい。

そこで,逐次処理のプログラムを複数同時に動かせばマルチコアを無駄にしないで済むのではないかという発想が出てくる。Vistaではバックグラウンドのタスクが多いと書いた。フォアグラウンドのタスクだけでは今どきのマルチコアCPUを有効活用できないので,ユーザーのためになるバックグラウンドで動くプログラムを書こうと知恵を絞った結果が,Vistaなのだろうと思う。

そのシナリオを力説したい気持ちはよく分かるのですが,ディスク律速になりがちなタイプのプロセスを集めるとやっぱりディスク律速になることも,その場合 CPU 性能が (コア数が増えようとも) 関係ないことも,さすがに開発者は知ってます.もっとも,Vista のバックグラウンドディスクアクセスが従来よりも大幅に増えていて,そこはまだまだチューニングが必要なのは確かです.それは確かなのですが,だからといってマルチコアを生かすためにバックグラウンドプロセスを増やしたという主張は,ちょっと無理があります.そりゃ結論ありきすぎますよと.


でもディスクは1台しかない

記者が使っているVista搭載パソコンの1台は,CPUは米AMDSempron 3000+(1.8GHz)と旧式だが,ハード・ディスクは1万5000回転/分,容量146GB,Ultra160 SCSI接続のものを積んでいる(一般的なパソコンが搭載しているハード・ディスクは5400または7200回転/分)。回転待ちの時間が短いことが効果的なのか,きびきび動く。高速なハード・ディスクが安価になったら,Vistaが喜ばれる日が来るかもしれない。

ポイントは,「高速なハード・ディスクが安価になる」よりも先に,低価格化したメモリやシリコンストレージと,統計処理によるインテリジェントな先読みによる性能向上の方が大衆化する可能性が高いということです*1
近年,「1万5000回転/分,容量146GB,Ultra160 SCSIの高速ハードディスク」を買うお金があれば,4 GB オーバーのメモリ,あるいはその数倍のシリコンストレージが十分手に入るようになって来ました.
「そんな巨大なメモリまたはシリコンストレージが手に入ったとき,従来よりも飛躍的に高速化できるアプリケーションは何か? そのときになって実用的になるアルゴリズムは何か?」は結構いろいろな人が考えていて,開発者レベルでの投資としてはもう遅すぎるぐらいです.



さて,現実にはデスクトップアプリケーションの多くがディスクアクセスによる遅延に無頓着という現実があります.一方で Web の世界は,ブラウザの前で待たせると人が逃げるということで,事前処理と効率のよいデータキャッシュにとても真剣に取り組んでいます.Web アプリケーションを毛嫌いする人も多いですが,実際にはしばしば Web アプリケーションの方が軽快という場面に出くわします.
MSDN Library で API の説明を見るのに,ローカルで Document Explorer を立ち上げて API を検索するより,ブラウザを立ち上げて GoogleAPI を検索するほうが早く結果にたどり着けることなどは,そのよい例でしょう.
そしてデスクトップアプリケーションの遅延をもっと減らすためには,バックグラウンド処理による事前処理が重要なのですが,ここで話の先頭に戻る,というわけです.


まあ実際,勝手にディスクアクセスランプが点滅していたり,心当たりのないディスクの動作音が繰り返されるのが腹立たしいのは私も同じです.が,この腹立たしさのいくらかは,ディスクアクセスランプと動作音が五感で感じられるからこそのものかもしれません.今後 SSD の普及とともに「光も音もしなくなれば」,単に気づかないという理由で腹立たしさが解消されてしまうこともありえます.
普段 PC を使っているときでも,CPU の分岐予測の失敗や L1/L2 キャッシュミスが,パイプラインを驚くほど長時間ストールさせているにもかかわらず,そのことで心の平安を乱している人はほとんどいないようです.知らぬが仏というやつでしょうか.

*1:[http://pc.watch.impress.co.jp/docs/2007/0904/kaigai383.htm:title=後藤弘茂のWeekly海外ニュース PCのメモリ階層の変革を展望するMicrosoftとIntel]