Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

157 lines
3.4 KiB

// W3Key.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include <afxdllx.h>
#include "KeyObjs.h"
#include "W3Key.h"
#include "W3Serv.h"
#include "resource.h"
extern "C"
{
#include "ipaddr.h"
}
#include "ipaddr.hpp"
#include "kmlsa.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
static AFX_EXTENSION_MODULE W3KeyDLL = { NULL, NULL };
// the tree control
CTreeCtrl* g_pTreeCtrl = NULL;
// the service image index
int g_iServiceImage = 0;
HINSTANCE hInst = NULL;
void LoadServiceIcon( CTreeCtrl* pTree );
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
hInst = hInstance;
TRACE0("W3KEY.DLL Initializing!\n");
// Extension DLL one-time initialization
AfxInitExtensionModule(W3KeyDLL, hInstance);
// one-time initialization of ip address window
IPAddrInit( hInstance );
// Insert this DLL into the resource chain
new CDynLinkLibrary(W3KeyDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("W3KEY.DLL Terminating!\n");
}
return 1; // ok
}
//=======================================================
// the main routine called by the keyring application
BOOL _cdecl LoadService( CMachine* pMachine )
{
ASSERT( pMachine );
if ( !pMachine ) return FALSE;
// the FIRST thing we do is see if we can access this machine!
// get the normal name
CString szName;
DWORD err;
pMachine->GetMachineName( szName );
// allocate the cache for the machine name
WCHAR* pszwMachineName = new WCHAR[MAX_PATH];
if ( !pszwMachineName ) return FALSE;
// unicodize the name
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szName, -1, pszwMachineName, MAX_PATH );
HANDLE hPolicy = HOpenLSAPolicy( pszwMachineName, &err );
// clean up
delete pszwMachineName;
// if we did not get the policy, then fail
if ( !hPolicy )
return FALSE;
// we did get the policy, so close it
FCloseLSAPolicy( hPolicy, &err );
// tell MFC to load reources out of the dll first - restore to app later
HINSTANCE hold = AfxGetResourceHandle();
AfxSetResourceHandle( hInst );
// if this is the first time through, initialize the tree control stuff
if ( !g_pTreeCtrl )
{
// get the tree control
g_pTreeCtrl = pMachine->PGetTreeCtrl();
ASSERT( g_pTreeCtrl );
// since we are adding a service icon, we need to do that now too
LoadServiceIcon( g_pTreeCtrl );
}
// now the whole purpose here is to setup a service object on the
// machine object. So, create the service object
try {
CW3KeyService* pKServ = new CW3KeyService;
// add it to the machine
pKServ->FAddToTree( pMachine );
// load the keys
pKServ->LoadKeys( pMachine );
}
catch( CException e )
{
AfxSetResourceHandle( hold );
return FALSE;
}
// return successfully
AfxSetResourceHandle( hold );
return TRUE;
// return pMachine->FAddService( pService );
}
//-------------------------------------------------------------------
void LoadServiceIcon( CTreeCtrl* pTree )
{
ASSERT( pTree );
// get the image list from the tree
CImageList* pImageList = pTree->GetImageList(TVSIL_NORMAL);
ASSERT( pImageList );
// load the service bitmap
CBitmap bmpService;
if ( !bmpService.LoadBitmap( IDB_SERVICE_BMP ) )
{
ASSERT( FALSE );
return;
}
// connect the bitmap to the image list
g_iServiceImage = pImageList->Add( &bmpService, 0x00FF00FF );
}