dllmain.cpp

来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C++ 代码 · 共 129 行

CPP
129
字号
/*____________________________________________________________________________
		Copyright (C) 2002 PGP Corporation
        All rights reserved.

        $Id: DllMain.cpp,v 1.12 2002/11/22 05:33:01 wjb Exp $
____________________________________________________________________________*/

#include "pgpClassesConfig.h"

#include "CPFLImpFactoryWin32.h"
#include "UModuleInstance.h"

#include "pgpClientLib.h"
#include "pgpDiskEngine.h"

#include "CEngineImpFactoryWin32.h"
#include "CEngineSubsystemsWin32.h"

_USING_PGP

_UNNAMED_BEGIN

// Static variables

PGPUInt32		PGPdiskEngineRefCount	= 0;
PGPBoolean		PGPclInitialized		= FALSE;
PGPBoolean		SubInitialized			= FALSE;
PGPContextRef	PGPContextForCL			= kInvalidPGPContextRef;

_UNNAMED_END

// Dll startup and shutdown functions

PGPError 
PGPdiskEngineExport 
PGPdiskEngineInitLibrary(PGPUInt32 Flags)
{
	PGPError	error	= kPGPError_NoErr;

	try
	{
		// Special case for admin disk wizard running in disk
		if ((PGPdiskEngineRefCount>0)&&(PGPclInitialized)&&(!SubInitialized))
		{
			SubInitialized=TRUE;
			CPFLImpFactoryWin32::CreateInstance();
			CEngineImpFactoryWin32::CreateInstance();
			CEngineSubsystemsWin32::CreateInstance();
			CEngineSubsystemsWin32::CreateSubsystems();
		}
		// End special case

		if (PGPdiskEngineRefCount++ == 0)
		{
			// Convention is we must close it even if it errors out
			PGPclInitialized = TRUE;

			error = PGPclInitLibrary(&PGPContextForCL, Flags);

			THROW_IF_PGPERROR(error);

			SubInitialized=TRUE;
			CPFLImpFactoryWin32::CreateInstance();
			CEngineImpFactoryWin32::CreateInstance();
			CEngineSubsystemsWin32::CreateInstance();
			CEngineSubsystemsWin32::CreateSubsystems();
		}
	}
	catch (CComboError& caughtErr)
	{
		error = caughtErr.pgpErr;
		PGPdiskEngineCleanupLibrary();	// this is safe
	}

	return error;
}

void 
PGPdiskEngineExport 
PGPdiskEngineCleanupLibrary()
{

	try
	{
		if ((PGPdiskEngineRefCount > 0) && 
			(--PGPdiskEngineRefCount == 0))
		{
			SubInitialized=FALSE;

			CEngineSubsystemsWin32::DestroySubsystems();
			CEngineSubsystemsWin32::DestroyInstance();
			CEngineImpFactoryWin32::DestroyInstance();
			CPFLImpFactoryWin32::DestroyInstance();

			if (PGPclInitialized)
			{
				PGPclCloseLibrary();

				PGPclInitialized = FALSE;
				PGPContextForCL = kInvalidPGPContextRef;
			}
		}
	}
	catch (CComboError&) { }
}

BOOL 
WINAPI 
DllMain(HINSTANCE hInstDll, DWORD dwReason, LPVOID lpvReserved)
{
	switch (dwReason)
	{
	case DLL_PROCESS_ATTACH:
		UModuleInstance::Set(hInstDll);
		break;

	case DLL_PROCESS_DETACH:
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
		break;

	default:
		pgpAssert(FALSE);
		break;
	}

	return TRUE;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?