// PermPage.cpp : Implementation of data object classes

#include "stdafx.h"
#include "PermPage.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

static HINSTANCE            g_hDll = NULL;
static PFNDSCREATESECPAGE   g_hProc = NULL;

HRESULT 
CreateDfsSecurityPage(
    IN LPPROPERTYSHEETCALLBACK  pCallBack,
    IN LPCTSTR                  pszObjectPath,
    IN LPCTSTR                  pszObjectClass,
    IN DWORD                    dwFlags
)
{
  _ASSERT( pCallBack );

  HRESULT hr = S_OK;
  HPROPSHEETPAGE hPage = NULL;

  if (!g_hDll)
  {
    if ( !(g_hDll = LoadLibrary(_T("dssec.dll"))) ||
         !(g_hProc = (PFNDSCREATESECPAGE)GetProcAddress(g_hDll, "DSCreateSecurityPage")) )
    {
      DWORD dwErr = GetLastError();
      if (g_hDll)
      {
        FreeLibrary(g_hDll);
        g_hDll = NULL;
      }
      return HRESULT_FROM_WIN32(dwErr);
    }
  }

  hr = (*g_hProc)(pszObjectPath,
                  pszObjectClass,
                  dwFlags,
                  &hPage,
                  NULL,
                  NULL,
                  0);

  if (SUCCEEDED(hr) && hPage)
    pCallBack->AddPage(hPage);
  
  return hr;
}