次の方法で共有


IOfflineFilesItemContainer::EnumItems メソッド (cscobj.h)

このメソッドを実装するキャッシュ項目の子項目の列挙子を返します。 オフライン ファイル キャッシュ内のサーバー、共有、およびディレクトリ エントリは、直接の子の列挙を公開するために、このメソッドを実装します。

メモ ファイルアイテムに子がないため、 queryInterface を呼び出して IID_IOfflineFilesItemContainer のファイルアイテムに対してクエリを実行すると、 E_NOINTERFACEで失敗します。
 

構文

HRESULT EnumItems(
  [in]  DWORD                  dwQueryFlags,
  [out] IEnumOfflineFilesItems **ppenum
);

パラメーター

[in] dwQueryFlags

列挙時のクエリ アクティビティの量に影響を与えるフラグ。 パラメーターには、次のビット フラグの 1 つ以上を含む場合があります。

OFFLINEFILES_ITEM_QUERY_REMOTEINFO (0x00000001)

このフラグは将来利用するために予約されています。

OFFLINEFILES_ITEM_QUERY_CONNECTIONSTATE (0x00000002)

このフラグが設定されている場合、列挙操作には、アイテムの接続状態 (オンラインまたはオフライン) に関する情報を取得するためのオフライン ファイル ストアへの追加の呼び出しが含まれます。 このフラグが設定されていない場合、列挙体にはこの追加の操作は含まれません。必要に応じて、接続情報は必要に応じて自動的に照会されます。

OFFLINEFILES_ITEM_QUERY_LOCALDIRTYBYTECOUNT (0x00000004)

このフラグが設定されている場合、検索操作にはオフライン ファイル ストアへの追加の呼び出しが含まれます。これにより、ローカルオフライン ファイル キャッシュ内の関連付けられたファイルの非同期 ("ダーティ") データの量 (バイト単位) に関する情報が取得されます。

OFFLINEFILES_ITEM_QUERY_REMOTEDIRTYBYTECOUNT (0x00000008)

このフラグは将来利用するために予約されています。

OFFLINEFILES_ITEM_QUERY_INCLUDETRANSPARENTCACHE (0x00000010)

管理者は、任意のユーザーによってキャッシュされたアイテムを検索できます。 このフラグが設定されていて、呼び出し元が管理者でない場合、メソッド呼び出しは失敗します。

[out] ppenum

IOfflineFilesItem インターフェイス ポインターの列挙子。

戻り値

成功した場合 はS_OK を返し、それ以外の場合はエラー値を返します。

注釈

キャッシュ全体のトップダウン列挙を開始するには、次の手順を実行します。

  1. CLSID_OfflineFilesCacheのインスタンスを作成し、その IOfflineFilesItemContainer インターフェイスを取得します。
  2. EnumItems メソッドを呼び出して、サーバー エントリの列挙子を取得します。
  3. 返される各エントリについて、IOfflineFilesItemContainerQueryInterface を呼び出します。
  4. QueryInterface が成功した場合、項目は子をサポートします。 その場合は、各子を列挙し、それぞれに 対して QueryInterface for IOfflineFilesItemContainer を呼び出します。 このパターンは、キャッシュ全体を列挙するために再帰的に適用できます。

この例では、単純な再帰的実装を使用してオフライン ファイル キャッシュのトップダウン トラバーサルを実行する方法を示します。

HRESULT EnumItems(IOfflineFilesItemContainer *pContainer);

//
// Emits the item's path string to the console.
//
HRESULT ReportItem(
    IOfflineFilesItem *pItem
    )
{
    LPWSTR pszPath;
    HRESULT hr = pItem->GetPath(&pszPath);
    if (SUCCEEDED(hr))
    {
        LPCWSTR pszType = L"";
        OFFLINEFILES_ITEM_TYPE ItemType;
        hr = pItem->GetItemType(&ItemType);
        if (SUCCEEDED(hr))
        {
            switch(ItemType)
            {
                case OFFLINEFILES_ITEM_TYPE_SERVER:
                    pszType = L" [SERVER]";
                    break;

                case OFFLINEFILES_ITEM_TYPE_SHARE:
                    pszType = L" [SHARE]";
                    break;

                case OFFLINEFILES_ITEM_TYPE_DIRECTORY:
                    pszType = L" [DIR]";
                    break;

                default:
                    break;
            }
            wprintf(L"%s%s", pszPath, pszType);
        }
        CoTaskMemFree(pszPath);
    }
    return hr;
}

//
// Processes the "current" item then recursively enumerate children
// if the item is a container (server, share, directory).
//
HRESULT ProcessItem(
    IOfflineFilesItem *pItem
    )
{
    HRESULT hr = ReportItem(pItem);
    if (SUCCEEDED(hr))
    {
        IOfflineFilesItemContainer *pContainer;
        hr = pItem->QueryInterface(IID_IOfflineFilesItemContainer,
                                   (void **)&pContainer);
        if (SUCCEEDED(hr))
        {
            EnumItems(pContainer);
            pContainer->Release();
        }
    }
    return hr;
}

//
// Enumerate the items in a container.
//
HRESULT EnumItems(
    IOfflineFilesItemContainer *pContainer
    )
{
    IEnumOfflineFilesItems *pEnum;
    HRESULT hr = pContainer->EnumItems(0, &pEnum);
    if (SUCCEEDED(hr))
    {
        IOfflineFilesItem *pItem;
        ULONG celt;
        while(S_OK == (hr = pEnum->Next(1, &pItem, &celt)))
        {
            ProcessItem(pItem);
            pItem->Release();
        }
        pEnum->Release();
    }
    return hr;
}

HRESULT EnumItemsInCache(
    IOfflineFilesCache *pCache
    )
{
    //
    // The "cache" object is a container of "server" items.
    //
    IOfflineFilesItemContainer *pContainer;
    HRESULT hr = pCache->QueryInterface(IID_IOfflineFilesItemContainer,
                                        (void **)&pContainer);
    if (SUCCEEDED(hr))
    {
        hr = EnumItems(pContainer);
    }
    return hr;
}

int wmain(int argc, __in_ecount(argc) WCHAR* argv[])
{
    HRESULT hr = CoInitialize(NULL);
    if (SUCCEEDED(hr))
    {
        //
        // The "cache" object is the entry point into the
        // Offline Files COM API.
        //
        IOfflineFilesCache *pCache;
        hr = CoCreateInstance(CLSID_OfflineFilesCache,
                              NULL,
                              CLSCTX_INPROC_SERVER,
                              IID_IOfflineFilesCache,
                              (void **)&pCache);
        if (SUCCEEDED(hr))
        {
            hr = EnumItemsInCache(pCache);
            pCache->Release();
        }
        CoUninitialize();
    }
    return 0;
}

要件

要件
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
対象プラットフォーム Windows
ヘッダー cscobj.h
[DLL] CscSvc.dll;CscObj.dll

こちらもご覧ください

IOfflineFilesItem

IOfflineFilesItemContainer