📄 cdrivercommimpwin32.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 + -