drivermain.cpp

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

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

        $Id: DriverMain.cpp,v 1.5 2002/08/06 20:09:31 dallen Exp $
____________________________________________________________________________*/

#include "pgpClassesConfig.h"
#include <winerror.h>

#include "UDebug.h"
#include "UStaticCpp.h"

#include "CPFLImpFactoryDrv98.h"

#include "CInterface.h"
#include "DriverApi.h"

#include "CDriverImpFactoryDrv98.h"
#include "CDriverSubsystemsDrv98.h"
#include "CIosInterface.h"
#include "DriverMain.h"
#include "pgpBuild.h"

_USING_PGP

// Globals

extern "C"
{
	ILB	PGPdisk_Ilb;

	#define	PGPDISK_NAME	"PGPdisk Driver "

	DRP	PGPdisk_Drp	= {{'X','X','X','X','X','X','X','X'}, DRP_MISC_PD, 
		PGPdisk_Aer, &PGPdisk_Ilb, "PGPdisk Driver ", 0, 0, 0, DRP_BT_ESDI, 
		0, 0};

	#undef PGPDISK_NAME
}

// DriverMain functions

PDRP 
DriverMain::GetDriverDrpInitParam()
{
	return &PGPdisk_Drp;
}

PILB 
DriverMain::GetDriverIlbInitParam()
{
	return &PGPdisk_Ilb;
}


// Extern functions

extern "C" 
BOOL 
OnSysDynamicDeviceInit()
{
	CComboError	error;

	UDebug::DebugOut("PGPdisk: Loading PGPdisk driver.");
	UDebug::DebugOut("PGPdisk: PGPdisk driver v%s loaded.", 
		PGPVERSIONSTRING);
	UDebug::DebugOut(PGPCOPYRIGHT);
	UDebug::DebugOut("\n");

	// Must construct global static C++ objects.
	UStaticCpp::CallGlobalConstructors();

	// Create PGPdisk driver subsystems.
	error = CPFLImpFactoryDrv98::CreateInstance();

	if (error.IsntError())
	{
		error = CDriverImpFactoryDrv98::CreateInstance();

		if (error.IsntError())
		{
			error = CDriverSubsystemsDrv98::CreateInstance();

			if (error.IsntError())
			{
				error = CDriverSubsystemsDrv98::CreateSubsystems();

				if (error.IsntError())
				{
					UDebug::DebugOut("PGPdisk: PGPdisk driver loaded "
						"successfully.");
				}

				if (error.IsError())
					CDriverSubsystemsDrv98::DestroyInstance();
			}

			if (error.IsError())
				CDriverImpFactoryDrv98::DestroyInstance();
		}
		
		if (error.IsError())
			CPFLImpFactoryDrv98::DestroyInstance();
	}

	if (error.IsError())
	{
		UDebug::DebugOut("PGPdisk: PGPdisk driver failed to load!");
		UStaticCpp::CallGlobalDestructors();

		return FALSE;
	}
	else
	{
		return TRUE;
	}
}

extern "C" 
BOOL  
OnSysDynamicDeviceExit()
{
	UDebug::DebugOut("PGPdisk:: Unloading PGPdisk driver.");

	// Destroy PGPdisk driver subsystems.
	CDriverSubsystemsDrv98::DestroySubsystems();
	CDriverSubsystemsDrv98::DestroyInstance();
	CDriverImpFactoryDrv98::DestroyInstance();
	CPFLImpFactoryDrv98::DestroyInstance();

	// Must destruct global static C++ objects.
	UStaticCpp::CallGlobalDestructors();
	UDebug::DebugOut("PGPdisk: PGPdisk driver unloaded successfully.");
	
	return TRUE;
}

extern "C" 
DWORD 
OnWin32DeviceIoControl(
    DWORD	dwService,
    DWORD	dwDDB,
    DWORD	hDevice,
    LPDIOC	pParams)
{
	CComboError	error;

	switch (pParams->dwIoControlCode)
	{
	case DIOC_OPEN:
		error.err = ERROR_SUCCESS;
		break;

	case DIOC_CLOSEHANDLE:
		error.err = ERROR_SUCCESS;
		break;

	case DriverAPI::kSendPacketIoctl:

		// Process a DriverCommandPacket from User mode.
		if (!CDriverSubsystemsDrv98::Interface().ProcessRawPacket(
			reinterpret_cast<void *>(pParams->lpvInBuffer), 
			pParams->cbInBuffer))
		{
			error.err = ERROR_INVALID_PARAMETER;
		}
		break;

	default:
		error.err = ERROR_INVALID_PARAMETER;
		break;
	}

	return error.err;
}

extern "C" 
void 
PGPdisk_Aer(PAEP pAep)
{
	CDriverSubsystemsDrv98::IosInterface().ProcessAep(pAep);
}

⌨️ 快捷键说明

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