📄 cpgpdiskhandlerimpdrvnt.cpp
字号:
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: CPGPdiskHandlerImpDrvNT.cpp,v 1.4 2002/08/06 20:09:31 dallen Exp $
____________________________________________________________________________*/
#include "pgpClassesConfig.h"
#include "DriverAPI.h"
#include "CPGPdiskHandlerImpDrvNT.h"
_USING_PGP
// Class CPGPdiskHandlerImpDrvNT member functions
NTSTATUS
CPGPdiskHandlerImpDrvNT::PGPdiskIrpDispatch(
CDevice *pDevice,
CIrp& irp,
void *refPtr,
PGPBoolean& isIrpCompleted)
{
pgpAssertAddrValid(pDevice, CDevice);
// refPtr will be NULL when pDevice is not attached to a PGPdisk.
if (IsNull(refPtr))
{
CComboError error;
irp.Information() = 0;
switch (irp.MajorFunction())
{
case IRP_MJ_CLOSE:
case IRP_MJ_CREATE:
case IRP_MJ_SHUTDOWN:
error.err = STATUS_SUCCESS;
break;
case IRP_MJ_FLUSH_BUFFERS:
case IRP_MJ_DEVICE_CONTROL:
case IRP_MJ_READ:
case IRP_MJ_WRITE:
error.err = STATUS_VOLUME_DISMOUNTED;
break;
default:
error.err = STATUS_NOT_IMPLEMENTED;
break;
}
irp.Complete(error.err);
isIrpCompleted = TRUE;
return error.err;
}
else
{
CPGPdisk *pPGD = static_cast<CPGPdisk *>(refPtr);
pgpAssertAddrValid(pPGD, CPGPdisk);
return pPGD->ProcessExternalIo(irp.Get(), isIrpCompleted);
}
}
CComboError
CPGPdiskHandlerImpDrvNT::Startup()
{
CComboError error;
error = CPGPdiskHandlerImp::Startup();
if (error.IsntError())
{
// Create PGPdisk directory object.
CUnicodeString dirName(DriverAPI::kPGPdiskDeviceDir);
error = dirName.Status();
if (error.IsntError())
error = dirName.Prepend(kNTDevicePathPrefix);
if (error.IsntError())
{
OBJECT_ATTRIBUTES objAttribs;
InitializeObjectAttributes(&objAttribs, dirName.Get(),
OBJ_CASE_INSENSITIVE, NULL, NULL);
error.err = ZwCreateDirectoryObject(&mDirHandle,
DIRECTORY_ALL_ACCESS, &objAttribs);
if (error.HaveNonPGPError())
{
if (error.err == STATUS_OBJECT_NAME_COLLISION)
error.err = STATUS_SUCCESS;
else
error.pgpErr = kPGPError_FileOpFailed;
}
}
}
return error;
}
void
CPGPdiskHandlerImpDrvNT::Shutdown()
{
CComboError error;
// Delete PGPdisk directory object.
if (IsntNull(mDirHandle))
{
ZwMakeTemporaryObject(mDirHandle);
ZwClose(mDirHandle);
mDirHandle = NULL;
}
CPGPdiskHandlerImp::Shutdown();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -