Windows ファイル プロテクションの対象ファイル名を列挙 [SFC]

(2004.12.09)
#include <vector>
 
#include <Sfc.h>
//#pragma comment(lib, "Sfc.lib")
 
#include "Module.h"
 
 
class CProtectedFileData : public PROTECTED_FILE_DATA
{
public:
    CProtectedFileData(DWORD dwFileNumber = 0)
    {
        memset(this, 0, sizeof(PROTECTED_FILE_DATA));
        this->FileNumber = dwFileNumber;
    }
};
 
    static HRESULT EnumProtectedFileNames(std::vector<CString>& strFileNames)
    {
        USES_CONVERSION;
 
        HRESULT hr = S_OK;
 
        strFileNames.clear();
 
        CModule module;
 
        // sfc.dllのキャッシュも兼ねています
        HINSTANCE hInst = module.LoadLibrary(_T("sfc.dll"));
        if (hInst == NULL)
        {
            return E_NOTIMPL;
        }
 
        DWORD i = 0;
        while (1)
        {
            CProtectedFileData data(i);
            BOOL br = CSfcHelper::Probe_SfcGetNextProtectedFile(NULL, &data);
            if (!br)
            {
                break;
            }
 
            strFileNames.push_back(W2T(data.FileName));
            i++;
        }
 
        return S_OK;
    }
    static BOOL Probe_SfcGetNextProtectedFile(HANDLE RpcHandle, PPROTECTED_FILE_DATA ProtFileData)
    {
        CModule module;
 
        HINSTANCE hInst = module.LoadLibrary(_T("sfc.dll"));
        if (hInst == NULL)
        {
            return FALSE;
        }
 
        typedef BOOL (WINAPI *SFC_GET_NEXT_PROTECTED_FILE)(HANDLE RpcHandle, PPROTECTED_FILE_DATA ProtFileData);
        SFC_GET_NEXT_PROTECTED_FILE func = (SFC_GET_NEXT_PROTECTED_FILE)module.GetProcAddress(_T("SfcGetNextProtectedFile"));
        if (func == NULL)
        {
            return FALSE;
        }
 
        return (*func)(RpcHandle, ProtFileData);
    }
一覧に戻る
© 2003 WAC.com All Right Reserved.