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