Windows ファイル プロテクションの対象かどうかを調査 [SFC]

(2004.12.09)
#include <Sfc.h>
//#pragma comment(lib, "Sfc.lib")
 
#include "Module.h"
 
 
    static HRESULT IsFileProtected(LPCTSTR szFileName)
    {
        USES_CONVERSION;
 
        CModule module;
 
        HINSTANCE hInst = module.LoadLibrary(_T("sfc.dll"));
        if (hInst == NULL)
        {
            return E_NOTIMPL;
        }
 
        BOOL br = CSfcHelper::Probe_SfcIsFileProtected(NULL, T2W(szFileName));
        if (!br)
        {
            DWORD dwError = ::GetLastError();
            if (dwError != ERROR_FILE_NOT_FOUND)
            {
                // エラー
                return HRESULT_FROM_WIN32(dwError);
            }
 
            // 保護されていない
            return S_FALSE;
        }
 
        // 保護されている
        return S_OK;
    }
    static BOOL Probe_SfcIsFileProtected(HANDLE RpcHandle, LPCWSTR ProtFileName)
    {
        CModule module;
 
        HINSTANCE hInst = module.LoadLibrary(_T("sfc.dll"));
        if (hInst == NULL)
        {
            return FALSE;
        }
 
        typedef BOOL (WINAPI *SFC_IS_FILE_PROTECTED)(HANDLE RpcHandle, LPCWSTR ProtFileName);
        SFC_IS_FILE_PROTECTED func = (SFC_IS_FILE_PROTECTED)module.GetProcAddress(_T("SfcIsFileProtected"));
        if (func == NULL)
        {
            return FALSE;
        }
 
        return (*func)(RpcHandle, ProtFileName);
    }
一覧に戻る
© 2003 WAC.com All Right Reserved.