mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
2.7 KiB
115 lines
2.7 KiB
//---------------------------------------------------------------------------
|
|
//
|
|
// Module: fni.h
|
|
//
|
|
// Description: Filter Node Instance Class
|
|
//
|
|
//
|
|
//@@BEGIN_MSINTERNAL
|
|
// Development Team:
|
|
// Mike McLaughlin
|
|
//
|
|
// History: Date Author Comment
|
|
//
|
|
//@@END_MSINTERNAL
|
|
//---------------------------------------------------------------------------
|
|
//
|
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
|
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
|
// PURPOSE.
|
|
//
|
|
// Copyright (c) 1996-1999 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Constants and Macros
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Classes
|
|
//---------------------------------------------------------------------------
|
|
|
|
typedef class CFilterNodeInstance : public CListDoubleItem
|
|
{
|
|
public:
|
|
~CFilterNodeInstance(
|
|
);
|
|
|
|
static NTSTATUS
|
|
Create(
|
|
PFILTER_NODE_INSTANCE *ppFilterNodeInstance,
|
|
PLOGICAL_FILTER_NODE pLogicalFilterNode,
|
|
PDEVICE_NODE pDeviceNode,
|
|
BOOL fReuseInstance
|
|
);
|
|
|
|
static NTSTATUS
|
|
Create(
|
|
PFILTER_NODE_INSTANCE *ppFilterNodeInstance,
|
|
PFILTER_NODE pFilterNode
|
|
);
|
|
|
|
VOID
|
|
AddRef(
|
|
)
|
|
{
|
|
Assert(this);
|
|
++cReference;
|
|
};
|
|
|
|
ENUMFUNC
|
|
Destroy()
|
|
{
|
|
if(this != NULL) {
|
|
Assert(this);
|
|
DPF1(95, "CFilterNodeInstance::Destroy: %08x", this);
|
|
ASSERT(cReference > 0);
|
|
|
|
if(--cReference == 0) {
|
|
delete this;
|
|
}
|
|
}
|
|
return(STATUS_CONTINUE);
|
|
};
|
|
|
|
NTSTATUS
|
|
RegisterTargetDeviceChangeNotification(
|
|
);
|
|
|
|
VOID
|
|
UnregisterTargetDeviceChangeNotification(
|
|
);
|
|
|
|
static NTSTATUS
|
|
CFilterNodeInstance::DeviceQueryRemove(
|
|
);
|
|
|
|
static NTSTATUS
|
|
TargetDeviceChangeNotification(
|
|
IN PTARGET_DEVICE_REMOVAL_NOTIFICATION pNotification,
|
|
IN PFILTER_NODE_INSTANCE pFilterNodeInstance
|
|
);
|
|
|
|
#ifdef DEBUG
|
|
ENUMFUNC Dump();
|
|
#endif
|
|
|
|
private:
|
|
LONG cReference;
|
|
public:
|
|
PFILTER_NODE pFilterNode;
|
|
PDEVICE_NODE pDeviceNode;
|
|
PFILE_OBJECT pFileObject;
|
|
HANDLE hFilter;
|
|
HANDLE pNotificationHandle;
|
|
DefineSignature(0x20494E46); // FNI
|
|
|
|
} FILTER_NODE_INSTANCE, *PFILTER_NODE_INSTANCE;
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
typedef ListDoubleDestroy<FILTER_NODE_INSTANCE> LIST_FILTER_NODE_INSTANCE;
|
|
|
|
//---------------------------------------------------------------------------
|