IUrlAccessor3
COM公式ドキュメント
IUrlAccessor2 インターフェイスの機能を拡張し、IUrlAccessor3::GetImpersonationSidBlobs メソッドによって、指定した URL に対するユーザーのセキュリティ識別子 (SID) を特定できるようにします。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定した URL に対するユーザーのセキュリティ識別子 (SID) の配列を取得します。このメソッドにより、プロトコルハンドラーはそのファイルにアクセスできるユーザーを指定でき、検索プロトコルホストはファイルをインデックス化するためにユーザーを偽装できます。
| pcwszURL | LPWSTR | in | 偽装したユーザーに代わってアクセスする URL。 |
| pcSidCount | DWORD* | out | ppSidBlobs で返されるユーザー SID の数へのポインターを受け取ります。 |
| ppSidBlobs | BLOB** | out | 偽装候補となるユーザー SID の配列へのポインターのアドレスを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ファイルが暗号化されている場合、このメソッドは、その復号とアクセスの両方を行えるユーザーを特定します。この情報を特定できない場合、メソッドはエラーコード E_ACCESSDENIED で失敗します。
このメソッドは、IUrlAccessor2 オブジェクトの初期化が失敗し、コード PRTH_S_TRY_IMPERSONATING が返されたことを前提としています。その後、検索プロトコルホストはこのメソッドを呼び出して偽装に使用する SID の一覧を取得し、IUrlAccessor2 の使用に戻って、アイテムを開く際に許可されたユーザーのいずれかを偽装します。
ユーザーを偽装しても、呼び出し元の特権が昇格されるわけではありません。呼び出し元がリソースへのアクセスを許可されたユーザーの一覧を直接取得できない場合は、このメソッドを使用しても取得できません。現在ログオンしているユーザーを偽装するのに十分な特権を持つのは、検索プロトコルホストとインデクサーのみです。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IUrlAccessor3 "{6FBC7005-0455-4874-B8FF-7439450241A3}" #usecom global IUrlAccessor3 IID_IUrlAccessor3 "{}" #comfunc global IUrlAccessor3_GetImpersonationSidBlobs 19 wstr,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IUrlAccessor3 "{6FBC7005-0455-4874-B8FF-7439450241A3}" #usecom global IUrlAccessor3 IID_IUrlAccessor3 "{}" #comfunc global IUrlAccessor3_GetImpersonationSidBlobs 19 wstr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。