⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cinterfaceimpdrvnt.cpp

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 CPP
字号:
/*____________________________________________________________________________
		Copyright (C) 2002 PGP Corporation
        All rights reserved.

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

#include "pgpClassesConfig.h"

#include "CUnicodeString.h"
#include "CIrp.h"
#include "CInterface.h"

#include "DriverMain.h"
#include "CDriverSubsystemsDrvNT.h"
#include "CInterfaceImpDrvNT.h"

_USING_PGP

// Class CInterfaceImpDrvNT member functions

CInterfaceImpDrvNT::CInterfaceImpDrvNT()
{
	Status() = mInterfaceDevice.Status();
}

CComboError 
CInterfaceImpDrvNT::Startup()
{
	CComboError	error;

	CUnicodeString	driverName(DriverAPI::kPGPdiskDriverNameW);
	CUnicodeString	linkName(DriverAPI::kPGPdiskDriverNameW);

	error = driverName.Status();

	if (error.IsntError())
		error = linkName.Status();

	if (error.IsntError())
		error = driverName.Prepend(kNTDevicePathPrefix);

	if (error.IsntError())
		error = linkName.Prepend(kNTLinkPathPrefix);

	if (error.IsntError())
	{
		error = mInterfaceDevice.Create(
			DriverMain::GetDriverObjectInitParam(), driverName, 
			FILE_DEVICE_UNKNOWN, 0, FALSE, InterfaceIrpDispatch, NULL);
	}

	if (error.IsntError())
	{
		error = mInterfaceDevice.Link(linkName);

		if (error.IsError())
			mInterfaceDevice.Delete();
	}

	return error;
}

void 
CInterfaceImpDrvNT::Shutdown()
{
	if (mInterfaceDevice.WeCreated())
	{
		mInterfaceDevice.Unlink();
		mInterfaceDevice.Delete();
	}
}

NTSTATUS 
CInterfaceImpDrvNT::ProcessIrpMjDeviceControl(
	CDevice		*pDevice, 
	CIrp&		irp, 
	PGPBoolean&	isIrpCompleted)
{
	CComboError	error;

	if (irp.IoctlCode() == DriverAPI::kSendPacketIoctl)
	{
		// Process a DriverCommandPacket from User mode.
		if (!CDriverSubsystemsDrvNT::Interface().ProcessRawPacket(
			irp.IoctlType3InputBuffer(), irp.IoctlInputBufferLength()))
		{
			error.err = STATUS_INVALID_PARAMETER;
		}
	}
	else
	{
		irp.Information() = 0;
		error.err = STATUS_INVALID_DEVICE_REQUEST;
	}

	return error.err;
}

NTSTATUS 
CInterfaceImpDrvNT::InterfaceIrpDispatch(
	CDevice		*pDevice, 
	CIrp&		irp, 
	void		*refPtr, 
	PGPBoolean&	isIrpCompleted)
{
	CComboError	error;
	irp.Information() = 0;

	switch (irp.MajorFunction())
	{
	case IRP_MJ_CREATE:
	case IRP_MJ_CLOSE:

		error.err = STATUS_SUCCESS;
		break;

	case IRP_MJ_DEVICE_CONTROL:
		error.err = ProcessIrpMjDeviceControl(pDevice, irp, isIrpCompleted);
		break;

	default:
		error.err = STATUS_NOT_IMPLEMENTED;
		break;
	}

	irp.Complete(error.err);
	isIrpCompleted = TRUE;

	return error.err;
}

⌨️ 快捷键说明

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