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

📄 cdrivercommimpwin32.cpp

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

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

#include "pgpClassesConfig.h"

#include "CMessageBox.h"
#include "CPath.h"

#include "pgpClientErrors.h"
#include "UCommonStrings.h"

#include "CDriverCommImpWin32.h"

_USING_PGP

// Class CDriverCommImpWin32 member functions

void 
CDriverCommImpWin32::OpenDriver()
{
	pgpAssert(!IsDriverOpened());

	CString	cfDriverName(DriverAPI::kPGPdiskDriverNameA);
	cfDriverName.Prepend("\\\\.\\");

	mDriverHandle = CreateFile(cfDriverName, GENERIC_READ | GENERIC_WRITE, 
		0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

	if (mDriverHandle == INVALID_HANDLE_VALUE)
	{
#if PGP_DEBUG
		using namespace UCommonStrings;

		CMessageBox	msgBox;
		msgBox.Display(Get(kWarnDriverNotLoaded), Get(kGenericMsgBoxTitle), NULL, 
			CMessageBox::kWarningTone);
#endif	// PGP_DEBUG

		THROW_PGPERROR(kPGPClientError_DiskDriverNotInstalled);
	}

	mIsDriverOpened = TRUE;
}

void 
CDriverCommImpWin32::CloseDriver()
{
	pgpAssert(IsDriverOpened());

	if (!CloseHandle(mDriverHandle))
	{
		pgpAssert(FALSE);
	}

	mDriverHandle = INVALID_HANDLE_VALUE;
	mIsDriverOpened = FALSE;
}

void 
CDriverCommImpWin32::SendPacket(
	DriverAPI::CCommandHeader	*pPacket, 
	PGPUInt32					size) const
{
#if !PGP_DEBUG
	pgpAssert(IsDriverOpened());
#endif	// !PGP_DEBUG

	pgpAssertAddrValid(pPacket, DriverAPI::CCommandHeader);
	pgpAssert(size >= sizeof(DriverAPI::CCommandHeader));

	unsigned long	nBytesReturned;

	if (!DeviceIoControl(mDriverHandle, DriverAPI::kSendPacketIoctl, 
		pPacket, size, NULL, NULL, &nBytesReturned, NULL))
	{
		THROW_ERRORS(kPGPClientError_DiskDriverCommFailed, GetLastError());
	}

	if (pPacket->DriverError().IsError())
		throw pPacket->DriverError();
}

void 
CDriverCommImpWin32::QueryMountedPath(
	const char	*path, 
	PGPBoolean&	isMounted) const
{
	CPath	cpath(path);

	try {
		cpath.Canonicalize(kPGPdiskFileExtension);
	} catch (CComboError&) { }

	CDriverCommImp::QueryMountedPath(cpath, isMounted);
}

void 
CDriverCommImpWin32::QueryMountedRoot(
	const char	*root, 
	PGPBoolean&	isMounted) const
{
	CPath	croot(root);

	try {
		croot.Canonicalize();
	} catch (CComboError&) { }

	// end in slash regardless of canonicalization
	croot.EndInSlash();

	CDriverCommImp::QueryMountedRoot(croot, isMounted);
}

⌨️ 快捷键说明

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