« 高校の必須科目未履修 | トップページ | 多色のアイコンとカーソルを作る »

2006年10月26日

Windows Vistaのセキュリティ

Windows VistaになってCOMのセキュリティが変わったみたいです。
仕事でいろいろあってちょっと調べてみました。

The COM Elevation Moniker”(MSDN)

typedef struct tagBIND_OPTS3 : tagBIND_OPTS2
{
  HWND hwnd;
} BIND_OPTS3, * LPBIND_OPTS3;

HRESULT CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, __out void ** ppv)
{
    BIND_OPTS3 bo;
    WCHAR  wszCLSID[50];
    WCHAR  wszMonikerName[300];

    StringFromGUID2(rclsid, wszCLSID, sizeof(wszCLSID)/sizeof(wszCLSID[0]));
    HRESULT hr = StringCchPrintf(wszMonikerName, sizeof(wszMonikerName)/sizeof(wszMonikerName[0]), L"Elevation:Administrator!new:%s", wszCLSID);
    if (FAILED(hr)) return hr;
    memset(&bo, 0, sizeof(bo));
    bo.cbStruct = sizeof(bo);
    bo.hwnd = hwnd;
    bo.dwClassContext  = CLSCTX_LOCAL_SERVER;
    return CoGetObject(wszMonikerName, &bo, riid, ppv);
}

今までCoCreateInstanceでCOMを作成していたのを、権限をあげて作成する場合には、こんな具合にするみたいです。
ただ、自分で作った物なら良いんですけど、他人が作った物(特にシステム標準)な物は権限をあげることができないみたいです。

HKEY_LOCAL_MACHINE\Software\Classes\CLSID\
{CLSID}\Elevation\Enabled = 1

レジストリにこのような記述がないとCO_E_ELEVATION_DISABLED(0x80070017だったかな)になっちゃうみたいです。
システムの物は勝手に書き換えるわけにも行かないし、困っちゃいますね。

manifestファイルでもコントロールできるようで、権限をあげるプログラムの場合には、アイコンにシールドマークが自動的に付加されるみたいです。

Developer Best Practices and Guidelines for Applications in a Least Privileged Environment” (MSDN)

ただ、このmanifestファイルは曲者で、注意が必要みたいです。

“.exe ファイルまたは Windows XP Service Pack 2(SP2)での .dll ファイルに Windows Vista 拡張子を持つマニフェストを追加すると、コンピュータは、再起動することがあります。”(MSDN)

とりあえず、アプリケーションを作るには、“Vista Compatibility Team Blog”を参考にするしかないんですね。今のところ。

|

« 高校の必須科目未履修 | トップページ | 多色のアイコンとカーソルを作る »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2700/12441661

この記事へのトラックバック一覧です: Windows Vistaのセキュリティ:

« 高校の必須科目未履修 | トップページ | 多色のアイコンとカーソルを作る »