#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);
}