|
|
//----------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2001.
//
// File: snapin.cpp
//
// Contents: WiF Policy Snapin
//
//
// History: TaroonM
// 10/30/01
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include "initguid.h"
#include "about.h"
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap) OBJECT_ENTRY(CLSID_Snapin, CComponentDataPrimaryImpl) OBJECT_ENTRY(CLSID_Extension, CComponentDataExtensionImpl) OBJECT_ENTRY(CLSID_About, CSnapinAboutImpl) END_OBJECT_MAP()
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
class CSnapinApp : public CWinApp { public: virtual BOOL InitInstance(); virtual int ExitInstance(); };
CSnapinApp theApp;
BOOL CSnapinApp::InitInstance() { _Module.Init(ObjectMap, m_hInstance); // set the application name:
//First free the string allocated by MFC at CWinApp startup.
//The string is allocated before InitInstance is called.
free((void*)m_pszAppName); //Change the name of the application file.
//The CWinApp destructor will free the memory.
CString strName; strName.LoadString (IDS_NAME); m_pszAppName=_tcsdup(strName); SHFusionInitializeFromModuleID (m_hInstance, 2); return CWinApp::InitInstance(); }
int CSnapinApp::ExitInstance() { SHFusionUninitialize(); _Module.Term(); DEBUG_VERIFY_INSTANCE_COUNT(CComponentImpl); DEBUG_VERIFY_INSTANCE_COUNT(CComponentDataImpl); return CWinApp::ExitInstance(); }
/////////////////////////////////////////////////////////////////////////////
// Used to determine whether the DLL can be unloaded by OLE
STDAPI DllCanUnloadNow(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); return (AfxDllCanUnloadNow()==S_OK && _Module.GetLockCount()==0) ? S_OK : S_FALSE; }
/////////////////////////////////////////////////////////////////////////////
// Returns a class factory to create an object of the requested type
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { return _Module.GetClassObject(rclsid, riid, ppv); }
/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // registers object, typelib and all interfaces in typelib
HRESULT hr = _Module.RegisterServer(FALSE); if (hr == S_OK) { // the dll was registered ok, so proceed to do the MMC registry fixups
// open the registry at \\My Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MMC\SnapIns
HKEY hkMMC = NULL; LONG lErr = RegOpenKeyEx (HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\MMC\\SnapIns"), 0, KEY_ALL_ACCESS, &hkMMC); if (lErr == ERROR_SUCCESS) { // create our subkey(s)
HKEY hkSub = NULL; lErr = RegCreateKey (hkMMC, cszSnapin, &hkSub); if (lErr == ERROR_SUCCESS) { // A couple of simple values into our subkey
// NameString = IP Security Management
// NodeType = {36703241-D16C-11d0-9CE4-0080C7221EBD}
// Version = 1.0
// TODO: resource hardcoded strings
CString strName; strName.LoadString (IDS_NAME); lErr = RegSetValueEx (hkSub, _T("NameString"), 0, REG_SZ, (CONST BYTE *)(LPCTSTR)strName, strName.GetLength() * sizeof (TCHAR)); ASSERT (lErr == ERROR_SUCCESS); TCHAR szModuleFileName[MAX_PATH * 2 + 1]; ZeroMemory(szModuleFileName, sizeof(szModuleFileName)); DWORD dwRet = ::GetModuleFileName(_Module.GetModuleInstance(), szModuleFileName, DimensionOf(szModuleFileName)-1); szModuleFileName[MAX_PATH*2] = L'\0'; if (0 != dwRet) { CString strNameIndirect; strNameIndirect.Format(_T("@%s,-%u"), szModuleFileName, IDS_NAME); lErr = RegSetValueEx(hkSub, _T("NameStringIndirect"), 0, REG_SZ, (CONST BYTE *)(LPCTSTR)strNameIndirect, strNameIndirect.GetLength() * sizeof (TCHAR)); ASSERT (lErr == ERROR_SUCCESS); } //lErr = RegSetValueEx (hkSub, _T("NodeType"), 0, REG_SZ, (CONST BYTE *)&(_T("{36703241-D16C-11d0-9CE4-0080C7221EBD}")), wcslen (_T("{36703241-D16C-11d0-9CE4-0080C7221EBD}")) * sizeof (TCHAR));
//ASSERT (lErr == ERROR_SUCCESS);
lErr = RegSetValueEx (hkSub, _T("NodeType"), 0, REG_SZ, (CONST BYTE *)&(_T("{36D6CA65-3367-49de-BB22-1907554F6075}")), wcslen (_T("{36D6CA65-3367-49de-BB22-1907554F6075}")) * sizeof (TCHAR)); ASSERT (lErr == ERROR_SUCCESS); lErr = RegSetValueEx (hkSub, _T("Provider"), 0, REG_SZ, (CONST BYTE *)&(_T("Microsoft Corporation")), wcslen (_T("Microsoft Corporation")) * sizeof (TCHAR)); ASSERT (lErr == ERROR_SUCCESS); lErr = RegSetValueEx (hkSub, _T("Version"), 0, REG_SZ, (CONST BYTE *)&(_T("1.0")), wcslen (_T("1.01")) * sizeof (TCHAR)); ASSERT (lErr == ERROR_SUCCESS); lErr = RegSetValueEx (hkSub, _T("About"), 0, REG_SZ, (CONST BYTE *)&(_T("{DD468E14-AF42-4d63-8908-EDAC4A9E67AE}")), wcslen (_T("{DD468E14-AF42-4d63-8908-EDAC4A9E67AE}")) * sizeof (TCHAR)); ASSERT (lErr == ERROR_SUCCESS);
HKEY hkType = NULL; /*
// create "StandAlone" subkey
lErr = RegCreateKey (hkSub, _T("StandAlone"), &hkType); ASSERT (lErr == ERROR_SUCCESS); RegCloseKey( hkType ); */ hkType = NULL; // create "Extension" subkey
lErr = RegCreateKey (hkSub, _T("Extension"), &hkType); ASSERT (lErr == ERROR_SUCCESS); RegCloseKey( hkType ); hkType = NULL; // close the hkSub
RegCloseKey (hkSub); } // close the hkMMC
RegCloseKey (hkMMC); hkMMC = NULL; // Register as an extension to the Security Template snap-in
{ #define WIRELESS_POLMGR_NAME _T("Wireless Network Policy Manager Extension")
// lstruuidNodetypeSceTemplate is defined as L"{668A49ED-8888-11d1-AB72-00C04FB6C6FA}" in sceattch.h
// open the registry at \\My Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MMC\Node Types
lErr = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\MMC\\NodeTypes"), 0, KEY_ALL_ACCESS, &hkMMC ); ASSERT( lErr == ERROR_SUCCESS ); if (lErr == ERROR_SUCCESS) { HKEY hkNameSpace = NULL; // Now open the Security Template entry: {668A49ED-8888-11d1-AB72-00C04FB6C6FA}\Extensions\NameSpace
lErr = RegCreateKey( hkMMC, _T("{668A49ED-8888-11d1-AB72-00C04FB6C6FA}\\Extensions\\NameSpace"), &hkNameSpace ); ASSERT( lErr == ERROR_SUCCESS ); if (lErr == ERROR_SUCCESS) { // We want to add ourselves as an extension to the Security editor
//lErr = RegSetValueEx( hkNameSpace, _T("{DEA8AFA0-CC85-11d0-9CE2-0080C7221EBD}" ),
lErr = RegSetValueEx( hkNameSpace, cszSnapin, 0, REG_SZ, (CONST BYTE *)&(WIRELESS_POLMGR_NAME), wcslen( WIRELESS_POLMGR_NAME ) * sizeof (TCHAR)); ASSERT( lErr == ERROR_SUCCESS ); } } } } else { ASSERT (0); hr = E_UNEXPECTED; } } return hr; }
/////////////////////////////////////////////////////////////////////////////
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void) { _Module.UnregisterServer(); return S_OK; }
|